|
|
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 |
|