diff options
author | Karel Zak | 2019-01-11 10:44:14 +0100 |
---|---|---|
committer | Karel Zak | 2019-01-11 10:44:14 +0100 |
commit | fe7d63105d923d43c9f478acded0ac888463e456 (patch) | |
tree | 345eb83b2dab27e7b26605b1360d20f23928d83c | |
parent | su-common.c: prefer ENV_SUPATH over ENV_ROOTPATH (diff) | |
download | kernel-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>
-rw-r--r-- | sys-utils/fstrim.c | 6 |
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; |