Skip to contentSkip to conversation

src/fiemap-tester: fix getting blocksize on overlayfs

PATCH New Amir Goldstein 1 participant 1 message Oct 11, 2018

lore
Share & tools
lore
#0 lore raw

PATCH v2 1/1 src/fiemap-tester: fix getting blocksize on overlayfs

There was a regression in v4.19-rc1 that caused FIGETBSZ ioctl to return 0 on an overlayfs file.

That regression went unnoticed because the xfstests that run fiemap-tester program terminated in success status after not doing much instead of failing.

Check for invalid value of block size returned by FIGETBSZ ioctl, so these tests can detect the regression.

Fallback to statfs(2) for getting the filesystem blocksize if FIGETBSZ ioctl fails (i.e. on overlayfs).

---
 src/fiemap-tester.c | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)
src/fiemap-tester.c +14 -1
index 97ac5ad0..3db24daa 100644
@@ -14,6 +14,7 @@
 #include <sys/ioctl.h>
 #include <sys/types.h>
 #include <sys/stat.h>
+#include <sys/statfs.h>
 #include <sys/vfs.h>
 #include <linux/fs.h>
 #include <linux/types.h>
@@ -556,7 +557,19 @@ main(int argc, char **argv)
 	}
 
 	if (ioctl(fd, FIGETBSZ, &blocksize) < 0) {
-		perror("Can't get filesystem block size");
+		struct statfs buf;
+
+		if (fstatfs(fd, &buf) == 0) {
+			blocksize = buf.f_bsize;
+		} else {
+			perror("Can't get filesystem block size");
+			close(fd);
+			exit(1);
+		}
+	}
+
+	if (blocksize <= 0) {
+		printf("Illegal filesystem block size\n");
 		close(fd);
 		exit(1);
 	}
Signature · 1 line
2.17.1