[LTP] [PATCH 1/2] lib: Add is_fuse flag to SAFE_MOUNT() and tst_device

Cyril Hrubis chrubis@suse.cz
Mon Jun 30 17:32:04 CEST 2025


This allows us to adjust tests that need different expectations on FUSE
based filesystems.

Signed-off-by: Cyril Hrubis <chrubis@suse.cz>
---
 include/old/safe_macros.h |  2 +-
 include/safe_macros_fn.h  |  2 +-
 include/tst_device.h      |  2 ++
 include/tst_safe_macros.h |  7 ++++++-
 lib/safe_macros.c         | 10 ++++++++--
 lib/tst_test.c            |  4 ++--
 6 files changed, 20 insertions(+), 7 deletions(-)

diff --git a/include/old/safe_macros.h b/include/old/safe_macros.h
index fb1d7a110..307843ab0 100644
--- a/include/old/safe_macros.h
+++ b/include/old/safe_macros.h
@@ -150,7 +150,7 @@
 #define SAFE_MOUNT(cleanup_fn, source, target, filesystemtype, \
 		   mountflags, data) \
 	safe_mount(__FILE__, __LINE__, (cleanup_fn), (source), (target), \
-		   (filesystemtype), (mountflags), (data))
+		   (filesystemtype), (mountflags), (data), NULL)
 
 #define SAFE_UMOUNT(cleanup_fn, target) \
 	safe_umount(__FILE__, __LINE__, (cleanup_fn), (target))
diff --git a/include/safe_macros_fn.h b/include/safe_macros_fn.h
index d256091b7..b4be482c1 100644
--- a/include/safe_macros_fn.h
+++ b/include/safe_macros_fn.h
@@ -172,7 +172,7 @@ int safe_rename(const char *file, const int lineno, void (*cleanup_fn)(void),
 int safe_mount(const char *file, const int lineno, void (*cleanup_fn)(void),
 	       const char *source, const char *target,
 	       const char *filesystemtype, unsigned long mountflags,
-	       const void *data);
+	       const void *data, int *is_fuse);
 
 int safe_umount(const char *file, const int lineno, void (*cleanup_fn)(void),
 		const char *target);
diff --git a/include/tst_device.h b/include/tst_device.h
index 2597fb4e2..9ca802735 100644
--- a/include/tst_device.h
+++ b/include/tst_device.h
@@ -15,6 +15,8 @@ struct tst_device {
 	const char *dev;
 	const char *fs_type;
 	uint64_t size;
+	/* If device was mounted by the test library this flag is set for fuse fileystems. */
+	int is_fuse;
 };
 
 /*
diff --git a/include/tst_safe_macros.h b/include/tst_safe_macros.h
index 19504beb5..6d53c0bbc 100644
--- a/include/tst_safe_macros.h
+++ b/include/tst_safe_macros.h
@@ -241,7 +241,12 @@ int safe_getgroups(const char *file, const int lineno, int size, gid_t list[]);
 #define SAFE_MOUNT(source, target, filesystemtype, \
 		   mountflags, data) \
 	safe_mount(__FILE__, __LINE__, NULL, (source), (target), \
-		   (filesystemtype), (mountflags), (data))
+		   (filesystemtype), (mountflags), (data), NULL)
+
+#define SAFE_MOUNT2(source, target, filesystemtype, \
+		    mountflags, data, is_fuse) \
+	safe_mount(__FILE__, __LINE__, NULL, (source), (target), \
+		   (filesystemtype), (mountflags), (data), (is_fuse))
 
 #define SAFE_UMOUNT(target) \
 	safe_umount(__FILE__, __LINE__, NULL, (target))
diff --git a/lib/safe_macros.c b/lib/safe_macros.c
index 726c9ae8e..6d267522f 100644
--- a/lib/safe_macros.c
+++ b/lib/safe_macros.c
@@ -907,11 +907,14 @@ static int possibly_fuse(const char *fs_type)
 int safe_mount(const char *file, const int lineno, void (*cleanup_fn)(void),
 	       const char *source, const char *target,
 	       const char *filesystemtype, unsigned long mountflags,
-	       const void *data)
+	       const void *data, int *is_fuse)
 {
 	int rval = -1;
 	char mpath[PATH_MAX];
 
+	if (is_fuse)
+		*is_fuse = 0;
+
 	if (realpath(target, mpath)) {
 		tst_resm_(file, lineno, TINFO,
 			"Mounting %s to %s fstyp=%s flags=%lx",
@@ -957,8 +960,11 @@ int safe_mount(const char *file, const int lineno, void (*cleanup_fn)(void),
 			filesystemtype, mount_ro, source, target);
 
 		rval = tst_system(buf);
-		if (WIFEXITED(rval) && WEXITSTATUS(rval) == 0)
+		if (WIFEXITED(rval) && WEXITSTATUS(rval) == 0) {
+			if (is_fuse)
+				*is_fuse = 1;
 			return 0;
+		}
 
 		tst_brkm_(file, lineno, TBROK, cleanup_fn,
 			"mount.%s failed with %i", filesystemtype, rval);
diff --git a/lib/tst_test.c b/lib/tst_test.c
index 17ce91932..2130e4be8 100644
--- a/lib/tst_test.c
+++ b/lib/tst_test.c
@@ -1273,8 +1273,8 @@ static void prepare_device(struct tst_fs *fs)
 		mnt_data = limit_tmpfs_mount_size(fs->mnt_data,
 				buf, sizeof(buf), tdev.fs_type);
 
-		SAFE_MOUNT(get_device_name(tdev.fs_type), tst_test->mntpoint,
-				tdev.fs_type, fs->mnt_flags, mnt_data);
+		SAFE_MOUNT2(get_device_name(tdev.fs_type), tst_test->mntpoint,
+				tdev.fs_type, fs->mnt_flags, mnt_data, &tdev.is_fuse);
 		context->mntpoint_mounted = 1;
 	}
 }
-- 
2.49.0



More information about the ltp mailing list