Blame SOURCES/qemuga-qga-commands-posix-Fix-bug-in-guest-fstrim.patch

8be556
From 0a3e71ac6373184a31a5d99b6eebc1c698a6e12f Mon Sep 17 00:00:00 2001
8be556
From: Thomas Huth <thuth@redhat.com>
8be556
Date: Thu, 9 Jul 2015 10:15:50 +0200
8be556
Subject: [PATCH 2/2] qga/commands-posix: Fix bug in guest-fstrim
8be556
8be556
Message-id: <1436436950-3481-2-git-send-email-thuth@redhat.com>
8be556
Patchwork-id: 66881
8be556
O-Subject: [RHEV-7.2 qemu-guest-agent PATCH 1/1] qga/commands-posix: Fix bug in guest-fstrim
8be556
Bugzilla: 1211973
8be556
RH-Acked-by: Miroslav Rezanina <mrezanin@redhat.com>
8be556
RH-Acked-by: Laszlo Ersek <lersek@redhat.com>
8be556
RH-Acked-by: Laurent Vivier <lvivier@redhat.com>
8be556
8be556
From: Justin Ossevoort <justin@quarantainenet.nl>
8be556
8be556
The FITRIM ioctl updates the fstrim_range structure it receives. This
8be556
way the caller can determine how many bytes were trimmed. The
8be556
guest-fstrim logic reuses the same fstrim_range for each filesystem,
8be556
effectively limiting each filesystem to trim at most as much as the
8be556
previous was able to trim.
8be556
8be556
If a previous filesystem would have trimmed 0 bytes, than the next
8be556
filesystem would report an error 'Invalid argument' because a FITRIM
8be556
request with length 0 is not valid.
8be556
8be556
This change resets the fstrim_range structure for each filesystem.
8be556
8be556
Signed-off-by: Justin Ossevoort <justin@quarantainenet.nl>
8be556
Reviewed-by: Thomas Huth <thuth@redhat.com>
8be556
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
8be556
(cherry picked from commit 73a652a1b08445e8d91e50cdbb2da50e571c61b3)
8be556
Signed-off-by: Thomas Huth <thuth@redhat.com>
8be556
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
8be556
---
8be556
 qga/commands-posix.c | 9 ++++-----
8be556
 1 file changed, 4 insertions(+), 5 deletions(-)
8be556
8be556
diff --git a/qga/commands-posix.c b/qga/commands-posix.c
8be556
index ba8de62..4449628 100644
8be556
--- a/qga/commands-posix.c
8be556
+++ b/qga/commands-posix.c
8be556
@@ -1332,11 +1332,7 @@ void qmp_guest_fstrim(bool has_minimum, int64_t minimum, Error **errp)
8be556
     struct FsMount *mount;
8be556
     int fd;
8be556
     Error *local_err = NULL;
8be556
-    struct fstrim_range r = {
8be556
-        .start = 0,
8be556
-        .len = -1,
8be556
-        .minlen = has_minimum ? minimum : 0,
8be556
-    };
8be556
+    struct fstrim_range r;
8be556
 
8be556
     slog("guest-fstrim called");
8be556
 
8be556
@@ -1360,6 +1356,9 @@ void qmp_guest_fstrim(bool has_minimum, int64_t minimum, Error **errp)
8be556
          * error means an unexpected error, so return it in those cases.  In
8be556
          * some other cases ENOTTY will be reported (e.g. CD-ROMs).
8be556
          */
8be556
+        r.start = 0;
8be556
+        r.len = -1;
8be556
+        r.minlen = has_minimum ? minimum : 0;
8be556
         ret = ioctl(fd, FITRIM, &r);
8be556
         if (ret == -1) {
8be556
             if (errno != ENOTTY && errno != EOPNOTSUPP) {
8be556
-- 
8be556
1.8.3.1
8be556