summaryrefslogtreecommitdiffstats
path: root/sys-utils/fstrim.c
diff options
context:
space:
mode:
authorKarel Zak2019-01-11 10:44:14 +0100
committerKarel Zak2019-01-11 10:44:14 +0100
commitfe7d63105d923d43c9f478acded0ac888463e456 (patch)
tree345eb83b2dab27e7b26605b1360d20f23928d83c /sys-utils/fstrim.c
parentsu-common.c: prefer ENV_SUPATH over ENV_ROOTPATH (diff)
downloadkernel-qcow2-util-linux-fe7d63105d923d43c9f478acded0ac888463e456.tar.gz
kernel-qcow2-util-linux-fe7d63105d923d43c9f478acded0ac888463e456.tar.xz
kernel-qcow2-util-linux-fe7d63105d923d43c9f478acded0ac888463e456.zip
fstrim: check for read-only devices on -a/-A
to avoid "FITRIM ioctl failed: Remote I/O error" Addresses: https://github.com/karelzak/util-linux/issues/738 Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'sys-utils/fstrim.c')
-rw-r--r--sys-utils/fstrim.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/sys-utils/fstrim.c b/sys-utils/fstrim.c
index 105ee89e7..2d5c0b74e 100644
--- a/sys-utils/fstrim.c
+++ b/sys-utils/fstrim.c
@@ -137,7 +137,7 @@ static int has_discard(const char *devname, struct path_cxt **wholedisk)
struct path_cxt *pc = NULL;
uint64_t dg = 0;
dev_t disk = 0, dev;
- int rc = -1;
+ int rc = -1, rdonly = 0;
dev = sysfs_devname_to_devno(devname);
if (!dev)
@@ -175,9 +175,11 @@ static int has_discard(const char *devname, struct path_cxt **wholedisk)
}
rc = ul_path_read_u64(pc, &dg, "queue/discard_granularity");
+ if (!rc)
+ ul_path_scanf(pc, "ro", "%d", &rdonly);
ul_unref_path(pc);
- return rc == 0 && dg > 0;
+ return rc == 0 && dg > 0 && rdonly == 0;
fail:
ul_unref_path(pc);
return 1;