[LTP] [PATCH] Fix ioctl_ficlone on XFS without reflink support

Andrea Cervesato
2024-09-24T12:54:25Z

From: Andrea Cervesato <andrea.cervesato@suse.com>

reflink has been introduced in XFS by kernel 4.9 and mkfs.xfs enabled
by default in 5.1.0. Check the mkfs.xfs version in order to make sure
that mkfs.xfs supports reflink and verify kernel is at least 4.9 when
we run the ioctl_ficlone tests on XFS.

Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
---
ioctl_ficlone tests are failing in certain circumstances. In particular,
when kernel version is lower than 4.9 and mkfs.xfs is not 5.1.0
---
testcases/kernel/syscalls/ioctl/ioctl_ficlone01.c | 9 ++++++++-
testcases/kernel/syscalls/ioctl/ioctl_ficlone03.c | 5 ++++-
testcases/kernel/syscalls/ioctl/ioctl_ficlonerange01.c | 5 ++++-
testcases/kernel/syscalls/ioctl/ioctl_ficlonerange02.c | 5 ++++-
4 files changed, 20 insertions(+), 4 deletions(-)

diff --git a/testcases/kernel/syscalls/ioctl/ioctl_ficlone01.c b/testcases/kernel/syscalls/ioctl/ioctl_ficlone01.c
index f5407f789..d0faf3327 100644
--- a/testcases/kernel/syscalls/ioctl/ioctl_ficlone01.c
+++ b/testcases/kernel/syscalls/ioctl/ioctl_ficlone01.c
@@ -95,6 +95,12 @@ static void run(void)
SAFE_UNLINK(DSTPATH);
}

+static void setup(void)
+{
+ if (!strcmp(tst_device->fs_type, "xfs") && tst_kvercmp(4, 9, 0) < 0)
+ tst_brk(TCONF, "XFS doesn't support reflink");
+}
+
static void cleanup(void)
{
if (src_fd != -1)
@@ -106,6 +112,7 @@ static void cleanup(void)

static struct tst_test test = {
.test_all = run,
+ .setup = setup,
.cleanup = cleanup,
.min_kver = "4.5",
.needs_root = 1,
@@ -115,7 +122,7 @@ static struct tst_test test = {
{.type = "bcachefs"},
{.type = "btrfs"},
{
- .type = "xfs",
+ .type = "xfs >= 5.1.0",
.mkfs_opts = (const char *const []) {"-m", "reflink=1", NULL},
},
{}
diff --git a/testcases/kernel/syscalls/ioctl/ioctl_ficlone03.c b/testcases/kernel/syscalls/ioctl/ioctl_ficlone03.c
index 3cc386c59..8e32ba039 100644
--- a/testcases/kernel/syscalls/ioctl/ioctl_ficlone03.c
+++ b/testcases/kernel/syscalls/ioctl/ioctl_ficlone03.c
@@ -62,6 +62,9 @@ static void setup(void)
int attr;
struct stat sb;

+ if (!strcmp(tst_device->fs_type, "xfs") && tst_kvercmp(4, 9, 0) < 0)
+ tst_brk(TCONF, "XFS doesn't support reflink");
+
rw_file = SAFE_OPEN("ok_only", O_CREAT | O_RDWR, 0640);
ro_file = SAFE_OPEN("rd_only", O_CREAT | O_RDONLY, 0640);
wo_file = SAFE_OPEN("rw_only", O_CREAT | O_WRONLY, 0640);
@@ -113,7 +116,7 @@ static struct tst_test test = {
{.type = "bcachefs"},
{.type = "btrfs"},
{
- .type = "xfs",
+ .type = "xfs >= 5.1.0",
.mkfs_opts = (const char *const []) {"-m", "reflink=1", NULL},
},
{}
diff --git a/testcases/kernel/syscalls/ioctl/ioctl_ficlonerange01.c b/testcases/kernel/syscalls/ioctl/ioctl_ficlonerange01.c
index e352c513b..4128285b1 100644
--- a/testcases/kernel/syscalls/ioctl/ioctl_ficlonerange01.c
+++ b/testcases/kernel/syscalls/ioctl/ioctl_ficlonerange01.c
@@ -108,6 +108,9 @@ static void setup(void)
{
struct stat sb;

+ if (!strcmp(tst_device->fs_type, "xfs") && tst_kvercmp(4, 9, 0) < 0)
+ tst_brk(TCONF, "XFS doesn't support reflink");
+
SAFE_STAT(MNTPOINT, &sb);

filesize = sb.st_blksize * CHUNKS;
@@ -148,7 +151,7 @@ static struct tst_test test = {
{.type = "bcachefs"},
{.type = "btrfs"},
{
- .type = "xfs",
+ .type = "xfs >= 5.1.0",
.mkfs_opts = (const char *const []) {"-m", "reflink=1", NULL},
},
{}
diff --git a/testcases/kernel/syscalls/ioctl/ioctl_ficlonerange02.c b/testcases/kernel/syscalls/ioctl/ioctl_ficlonerange02.c
index ad36df162..d1f8d60c0 100644
--- a/testcases/kernel/syscalls/ioctl/ioctl_ficlonerange02.c
+++ b/testcases/kernel/syscalls/ioctl/ioctl_ficlonerange02.c
@@ -60,6 +60,9 @@ static void setup(void)
{
struct stat sb;

+ if (!strcmp(tst_device->fs_type, "xfs") && tst_kvercmp(4, 9, 0) < 0)
+ tst_brk(TCONF, "XFS doesn't support reflink");
+
SAFE_STAT(MNTPOINT, &sb);

alignment = sb.st_blksize;
@@ -85,7 +88,7 @@ static struct tst_test test = {
{.type = "bcachefs"},
{.type = "btrfs"},
{
- .type = "xfs",
+ .type = "xfs >= 5.1.0",
.mkfs_opts = (const char *const []) {"-m", "reflink=1", NULL},
},
{}

---
base-commit: 968e6245d93bc91723e72086a71e6bc50f495d0b
change-id: 20240924-ioctl_ficlone01_fix-88a17ef58543

Best regards,
--
Andrea Cervesato <andrea.cervesato@suse.com>