* [LTP] [PATCH v3 0/6] file_setattr/file_getattr testing suite
@ 2025-08-05 7:01 Andrea Cervesato
2025-08-05 7:01 ` [LTP] [PATCH v3 1/6] Update LTP to the latest syscalls Andrea Cervesato
` (5 more replies)
0 siblings, 6 replies; 10+ messages in thread
From: Andrea Cervesato @ 2025-08-05 7:01 UTC (permalink / raw)
To: ltp
This testing suite is validating file_getattr and file_setattr
syscalls, introducing tests for error validation and basic
functionalities. These features have been introduced in the kernel 6.17.
https://lore.kernel.org/lkml/20250725-vfs-fileattr-fcfc534aac44@brauner/
Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
---
Changes in v3:
- fix fallback for fsxattr flags attributes
- Link to v2: https://lore.kernel.org/r/20250804-file_setattr_getattr-v2-0-651e50ec59e7@suse.com
Changes in v2:
- remove unrelated files
- fix fs.h ifndef
- Link to v1: https://lore.kernel.org/r/20250804-file_setattr_getattr-v1-0-6a43c3962c87@suse.com
---
Andrea Cervesato (6):
Update LTP to the latest syscalls
fs: add struct fsxattr fallback definitions
fs: add file_setattr/file_getattr fallback definitions
Add file_attr01 test
Add file_attr02 test
Add file_attr03 test
configure.ac | 3 +
include/lapi/fs.h | 64 ++++++++
include/lapi/syscalls/arc.in | 7 +
include/lapi/syscalls/arm.in | 7 +
include/lapi/syscalls/arm64.in | 7 +
include/lapi/syscalls/i386.in | 7 +
include/lapi/syscalls/loongarch64.in | 7 +
include/lapi/syscalls/mips64.in | 7 +
include/lapi/syscalls/mips64n32.in | 7 +
include/lapi/syscalls/mipso32.in | 7 +
include/lapi/syscalls/parisc.in | 7 +
include/lapi/syscalls/powerpc.in | 7 +
include/lapi/syscalls/powerpc64.in | 7 +
include/lapi/syscalls/s390.in | 7 +
include/lapi/syscalls/s390x.in | 7 +
include/lapi/syscalls/sh.in | 7 +
include/lapi/syscalls/sparc.in | 7 +
include/lapi/syscalls/sparc64.in | 7 +
include/lapi/syscalls/x86_64.in | 7 +
runtest/syscalls | 4 +
testcases/kernel/syscalls/file_attr/.gitignore | 3 +
testcases/kernel/syscalls/file_attr/Makefile | 8 +
testcases/kernel/syscalls/file_attr/file_attr01.c | 171 ++++++++++++++++++++++
testcases/kernel/syscalls/file_attr/file_attr02.c | 94 ++++++++++++
testcases/kernel/syscalls/file_attr/file_attr03.c | 81 ++++++++++
25 files changed, 547 insertions(+)
---
base-commit: b62b831cf0ba0420d4f2d4db2989ea0ad139d398
change-id: 20250801-file_setattr_getattr-74963fd52b05
Best regards,
--
Andrea Cervesato <andrea.cervesato@suse.com>
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 10+ messages in thread
* [LTP] [PATCH v3 1/6] Update LTP to the latest syscalls
2025-08-05 7:01 [LTP] [PATCH v3 0/6] file_setattr/file_getattr testing suite Andrea Cervesato
@ 2025-08-05 7:01 ` Andrea Cervesato
2025-08-05 7:01 ` [LTP] [PATCH v3 2/6] fs: add struct fsxattr fallback definitions Andrea Cervesato
` (4 subsequent siblings)
5 siblings, 0 replies; 10+ messages in thread
From: Andrea Cervesato @ 2025-08-05 7:01 UTC (permalink / raw)
To: ltp
From: Andrea Cervesato <andrea.cervesato@suse.com>
Add the following syscalls:
- setxattrat
- getxattrat
- listxattrat
- removexattrat
- open_tree_attr
- file_getattr
- file_setattr
Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
---
include/lapi/syscalls/arc.in | 7 +++++++
include/lapi/syscalls/arm.in | 7 +++++++
include/lapi/syscalls/arm64.in | 7 +++++++
include/lapi/syscalls/i386.in | 7 +++++++
include/lapi/syscalls/loongarch64.in | 7 +++++++
include/lapi/syscalls/mips64.in | 7 +++++++
include/lapi/syscalls/mips64n32.in | 7 +++++++
include/lapi/syscalls/mipso32.in | 7 +++++++
include/lapi/syscalls/parisc.in | 7 +++++++
include/lapi/syscalls/powerpc.in | 7 +++++++
include/lapi/syscalls/powerpc64.in | 7 +++++++
include/lapi/syscalls/s390.in | 7 +++++++
include/lapi/syscalls/s390x.in | 7 +++++++
include/lapi/syscalls/sh.in | 7 +++++++
include/lapi/syscalls/sparc.in | 7 +++++++
include/lapi/syscalls/sparc64.in | 7 +++++++
include/lapi/syscalls/x86_64.in | 7 +++++++
17 files changed, 119 insertions(+)
diff --git a/include/lapi/syscalls/arc.in b/include/lapi/syscalls/arc.in
index f680d4119c10f73e2f1b8938c3be4a7254965ed0..0f0fbef6be74d06abbf4f1bbf77eeaf72a1e6b71 100644
--- a/include/lapi/syscalls/arc.in
+++ b/include/lapi/syscalls/arc.in
@@ -340,3 +340,10 @@ lsm_get_self_attr 459
lsm_set_self_attr 460
lsm_list_modules 461
mseal 462
+setxattrat 463
+getxattrat 464
+listxattrat 465
+removexattrat 466
+open_tree_attr 467
+file_getattr 468
+file_setattr 469
diff --git a/include/lapi/syscalls/arm.in b/include/lapi/syscalls/arm.in
index 32e48b2151afbf55a19e493518395e4265c670a0..d0238dec5ecbf3849dff3b2c91ec88866dfb440c 100644
--- a/include/lapi/syscalls/arm.in
+++ b/include/lapi/syscalls/arm.in
@@ -413,3 +413,10 @@ lsm_get_self_attr 459
lsm_set_self_attr 460
lsm_list_modules 461
mseal 462
+setxattrat 463
+getxattrat 464
+listxattrat 465
+removexattrat 466
+open_tree_attr 467
+file_getattr 468
+file_setattr 469
diff --git a/include/lapi/syscalls/arm64.in b/include/lapi/syscalls/arm64.in
index be7e9df6480c065ff63345d55082b1a6b2532760..c76930e20df02905c9c640a749b4ec2df421c665 100644
--- a/include/lapi/syscalls/arm64.in
+++ b/include/lapi/syscalls/arm64.in
@@ -316,3 +316,10 @@ lsm_get_self_attr 459
lsm_set_self_attr 460
lsm_list_modules 461
mseal 462
+setxattrat 463
+getxattrat 464
+listxattrat 465
+removexattrat 466
+open_tree_attr 467
+file_getattr 468
+file_setattr 469
diff --git a/include/lapi/syscalls/i386.in b/include/lapi/syscalls/i386.in
index 13f72e7950ded9393e665cb1a44fe955343f820c..38ea71fb282d9dc69914b863cba352349fd1c9b9 100644
--- a/include/lapi/syscalls/i386.in
+++ b/include/lapi/syscalls/i386.in
@@ -447,3 +447,10 @@ lsm_get_self_attr 459
lsm_set_self_attr 460
lsm_list_modules 461
mseal 462
+setxattrat 463
+getxattrat 464
+listxattrat 465
+removexattrat 466
+open_tree_attr 467
+file_getattr 468
+file_setattr 469
diff --git a/include/lapi/syscalls/loongarch64.in b/include/lapi/syscalls/loongarch64.in
index 2c1ecd7aeeb2fa4f38999bad144cfceee39a4a54..5407b86eaf738354f645f894bd95900ff614b3e1 100644
--- a/include/lapi/syscalls/loongarch64.in
+++ b/include/lapi/syscalls/loongarch64.in
@@ -312,3 +312,10 @@ lsm_get_self_attr 459
lsm_set_self_attr 460
lsm_list_modules 461
mseal 462
+setxattrat 463
+getxattrat 464
+listxattrat 465
+removexattrat 466
+open_tree_attr 467
+file_getattr 468
+file_setattr 469
diff --git a/include/lapi/syscalls/mips64.in b/include/lapi/syscalls/mips64.in
index 8be734158fb7840b7757a012b6ed823f29eb7ab9..436d5c681c21f32623d779268b9c3daaaac5b5e0 100644
--- a/include/lapi/syscalls/mips64.in
+++ b/include/lapi/syscalls/mips64.in
@@ -362,3 +362,10 @@ lsm_get_self_attr 5459
lsm_set_self_attr 5460
lsm_list_modules 5461
mseal 5462
+setxattrat 5463
+getxattrat 5464
+listxattrat 5465
+removexattrat 5466
+open_tree_attr 5467
+file_getattr 5468
+file_setattr 5469
diff --git a/include/lapi/syscalls/mips64n32.in b/include/lapi/syscalls/mips64n32.in
index 153fe50bf9a7c62978e458e1cb7225aa63b9edda..860a19c8b62866aeaf5b03c5c45ef5d6d58cab0f 100644
--- a/include/lapi/syscalls/mips64n32.in
+++ b/include/lapi/syscalls/mips64n32.in
@@ -386,3 +386,10 @@ lsm_get_self_attr 6459
lsm_set_self_attr 6460
lsm_list_modules 6461
mseal 6462
+setxattrat 6463
+getxattrat 6464
+listxattrat 6465
+removexattrat 6466
+open_tree_attr 6467
+file_getattr 6468
+file_setattr 6469
diff --git a/include/lapi/syscalls/mipso32.in b/include/lapi/syscalls/mipso32.in
index 1ed74c1ecf281a3d208eded4a0dbd35fcc57e45f..5e53e46ce1e47c4618ceeeda03130cbdd621b180 100644
--- a/include/lapi/syscalls/mipso32.in
+++ b/include/lapi/syscalls/mipso32.in
@@ -426,3 +426,10 @@ lsm_get_self_attr 4459
lsm_set_self_attr 4460
lsm_list_modules 4461
mseal 4462
+setxattrat 4463
+getxattrat 4464
+listxattrat 4465
+removexattrat 4466
+open_tree_attr 4467
+file_getattr 4468
+file_setattr 4469
diff --git a/include/lapi/syscalls/parisc.in b/include/lapi/syscalls/parisc.in
index 662bfea4428cf3b090b03632f2087251aaf3b513..238756694d9a03bcb063c21d3644aaa2af47f3fc 100644
--- a/include/lapi/syscalls/parisc.in
+++ b/include/lapi/syscalls/parisc.in
@@ -395,3 +395,10 @@ lsm_get_self_attr 459
lsm_set_self_attr 460
lsm_list_modules 461
mseal 462
+setxattrat 463
+getxattrat 464
+listxattrat 465
+removexattrat 466
+open_tree_attr 467
+file_getattr 468
+file_setattr 469
diff --git a/include/lapi/syscalls/powerpc.in b/include/lapi/syscalls/powerpc.in
index faaa75883a7d2a0b70ca0e8064b6c91dae21d20c..6911f9af96247739a1ba7020aa3df77ef70ef55a 100644
--- a/include/lapi/syscalls/powerpc.in
+++ b/include/lapi/syscalls/powerpc.in
@@ -437,3 +437,10 @@ lsm_get_self_attr 459
lsm_set_self_attr 460
lsm_list_modules 461
mseal 462
+setxattrat 463
+getxattrat 464
+listxattrat 465
+removexattrat 466
+open_tree_attr 467
+file_getattr 468
+file_setattr 469
diff --git a/include/lapi/syscalls/powerpc64.in b/include/lapi/syscalls/powerpc64.in
index 23b65e7840869c0cc08559324271b3b0d865ac01..98190ba266a1c7a6c3dbca1346e9d5e55783e271 100644
--- a/include/lapi/syscalls/powerpc64.in
+++ b/include/lapi/syscalls/powerpc64.in
@@ -409,3 +409,10 @@ lsm_get_self_attr 459
lsm_set_self_attr 460
lsm_list_modules 461
mseal 462
+setxattrat 463
+getxattrat 464
+listxattrat 465
+removexattrat 466
+open_tree_attr 467
+file_getattr 468
+file_setattr 469
diff --git a/include/lapi/syscalls/s390.in b/include/lapi/syscalls/s390.in
index 69d7408b7bdf0d9019d3c319cd52ff48022aca39..a6cb85da805bec2540433783be9445645ab913ab 100644
--- a/include/lapi/syscalls/s390.in
+++ b/include/lapi/syscalls/s390.in
@@ -430,3 +430,10 @@ lsm_get_self_attr 459
lsm_set_self_attr 460
lsm_list_modules 461
mseal 462
+setxattrat 463
+getxattrat 464
+listxattrat 465
+removexattrat 466
+open_tree_attr 467
+file_getattr 468
+file_setattr 469
diff --git a/include/lapi/syscalls/s390x.in b/include/lapi/syscalls/s390x.in
index fa98054c732787b62528c71f60b04de490b98958..31f3ec5532c8c3017188b60907f7666b41f44102 100644
--- a/include/lapi/syscalls/s390x.in
+++ b/include/lapi/syscalls/s390x.in
@@ -378,3 +378,10 @@ lsm_get_self_attr 459
lsm_set_self_attr 460
lsm_list_modules 461
mseal 462
+setxattrat 463
+getxattrat 464
+listxattrat 465
+removexattrat 466
+open_tree_attr 467
+file_getattr 468
+file_setattr 469
diff --git a/include/lapi/syscalls/sh.in b/include/lapi/syscalls/sh.in
index 2e584253c61d51b140c3b2f586e3c49e5740e7af..ac281acf81ffe6770fa0d941d406714fbdce1bbd 100644
--- a/include/lapi/syscalls/sh.in
+++ b/include/lapi/syscalls/sh.in
@@ -424,3 +424,10 @@ lsm_get_self_attr 459
lsm_set_self_attr 460
lsm_list_modules 461
mseal 462
+setxattrat 463
+getxattrat 464
+listxattrat 465
+removexattrat 466
+open_tree_attr 467
+file_getattr 468
+file_setattr 469
diff --git a/include/lapi/syscalls/sparc.in b/include/lapi/syscalls/sparc.in
index fcdb9b812ee6844d4981550f3eeed7ff081852f8..ffc0d9f7abdaa8873ec73ed1a5e0ec98b5f8b1d7 100644
--- a/include/lapi/syscalls/sparc.in
+++ b/include/lapi/syscalls/sparc.in
@@ -428,3 +428,10 @@ lsm_get_self_attr 459
lsm_set_self_attr 460
lsm_list_modules 461
mseal 462
+setxattrat 463
+getxattrat 464
+listxattrat 465
+removexattrat 466
+open_tree_attr 467
+file_getattr 468
+file_setattr 469
diff --git a/include/lapi/syscalls/sparc64.in b/include/lapi/syscalls/sparc64.in
index 4256aaf77674ed0c00bbd092d7c715038e52f1c3..992bd307deb07d50ff814c603406842b5aedb431 100644
--- a/include/lapi/syscalls/sparc64.in
+++ b/include/lapi/syscalls/sparc64.in
@@ -391,3 +391,10 @@ lsm_get_self_attr 459
lsm_set_self_attr 460
lsm_list_modules 461
mseal 462
+setxattrat 463
+getxattrat 464
+listxattrat 465
+removexattrat 466
+open_tree_attr 467
+file_getattr 468
+file_setattr 469
diff --git a/include/lapi/syscalls/x86_64.in b/include/lapi/syscalls/x86_64.in
index e6c0a3b4047d60e0e372c023c8f6a9bab76697af..e9c0d0599e25e3fa408686544c5d80c5a3e876d7 100644
--- a/include/lapi/syscalls/x86_64.in
+++ b/include/lapi/syscalls/x86_64.in
@@ -373,3 +373,10 @@ lsm_get_self_attr 459
lsm_set_self_attr 460
lsm_list_modules 461
mseal 462
+setxattrat 463
+getxattrat 464
+listxattrat 465
+removexattrat 466
+open_tree_attr 467
+file_getattr 468
+file_setattr 469
--
2.50.1
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [LTP] [PATCH v3 2/6] fs: add struct fsxattr fallback definitions
2025-08-05 7:01 [LTP] [PATCH v3 0/6] file_setattr/file_getattr testing suite Andrea Cervesato
2025-08-05 7:01 ` [LTP] [PATCH v3 1/6] Update LTP to the latest syscalls Andrea Cervesato
@ 2025-08-05 7:01 ` Andrea Cervesato
2025-08-05 7:01 ` [LTP] [PATCH v3 3/6] fs: add file_setattr/file_getattr " Andrea Cervesato
` (3 subsequent siblings)
5 siblings, 0 replies; 10+ messages in thread
From: Andrea Cervesato @ 2025-08-05 7:01 UTC (permalink / raw)
To: ltp
From: Andrea Cervesato <andrea.cervesato@suse.com>
Add strut fsxattr fallback, as well as FS_IOC_FSGETFLAGS and
FS_IOC_FSSETFLAGS.
Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
---
configure.ac | 2 ++
include/lapi/fs.h | 20 ++++++++++++++++++++
2 files changed, 22 insertions(+)
diff --git a/configure.ac b/configure.ac
index 12025be51c865719b68c06ec3c286210dafbfa43..9bd139f602b9f174e5314171f8f03338c06f3df4 100644
--- a/configure.ac
+++ b/configure.ac
@@ -264,6 +264,8 @@ AC_CHECK_TYPES([struct statmount],,,[#include <sys/mount.h>])
AC_CHECK_TYPES([struct pidfd_info],,,[#include <sys/pidfd.h>])
+AC_CHECK_TYPES([struct fsxattr],,,[#include <linux/fs.h>])
+
# Tools knobs
# Bash
diff --git a/include/lapi/fs.h b/include/lapi/fs.h
index 8261ca41dab7d01ea5e7dc9d65e3d5604013cd46..261f9fd016eaa39e3072d9fb48742616b0c5f571 100644
--- a/include/lapi/fs.h
+++ b/include/lapi/fs.h
@@ -14,10 +14,22 @@
# include <linux/fs.h>
#endif
+#include <stdint.h>
#include <sys/user.h>
#include <limits.h>
#include "lapi/abisize.h"
+#ifndef HAVE_STRUCT_FSXATTR
+struct fsxattr {
+ uint32_t fsx_xflags; /* xflags field value (get/set) */
+ uint32_t fsx_extsize; /* extsize field value (get/set)*/
+ uint32_t fsx_nextents; /* nextents field value (get) */
+ uint32_t fsx_projid; /* project identifier (get/set) */
+ uint32_t fsx_cowextsize; /* CoW extsize field value (get/set)*/
+ unsigned char fsx_pad[8];
+};
+#endif
+
#ifndef FS_IOC_GETFLAGS
# define FS_IOC_GETFLAGS _IOR('f', 1, long)
#endif
@@ -26,6 +38,14 @@
# define FS_IOC_SETFLAGS _IOW('f', 2, long)
#endif
+#ifndef FS_IOC_FSGETXATTR
+# define FS_IOC_FSGETXATTR _IOR('X', 31, struct fsxattr)
+#endif
+
+#ifndef FS_IOC_FSSETXATTR
+# define FS_IOC_FSSETXATTR _IOW('X', 32, struct fsxattr)
+#endif
+
#ifndef FS_COMPR_FL
# define FS_COMPR_FL 0x00000004 /* Compress file */
#endif
--
2.50.1
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [LTP] [PATCH v3 3/6] fs: add file_setattr/file_getattr fallback definitions
2025-08-05 7:01 [LTP] [PATCH v3 0/6] file_setattr/file_getattr testing suite Andrea Cervesato
2025-08-05 7:01 ` [LTP] [PATCH v3 1/6] Update LTP to the latest syscalls Andrea Cervesato
2025-08-05 7:01 ` [LTP] [PATCH v3 2/6] fs: add struct fsxattr fallback definitions Andrea Cervesato
@ 2025-08-05 7:01 ` Andrea Cervesato
2025-08-05 7:01 ` [LTP] [PATCH v3 4/6] Add file_attr01 test Andrea Cervesato
` (2 subsequent siblings)
5 siblings, 0 replies; 10+ messages in thread
From: Andrea Cervesato @ 2025-08-05 7:01 UTC (permalink / raw)
To: ltp
From: Andrea Cervesato <andrea.cervesato@suse.com>
Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
---
configure.ac | 1 +
include/lapi/fs.h | 44 ++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 45 insertions(+)
diff --git a/configure.ac b/configure.ac
index 9bd139f602b9f174e5314171f8f03338c06f3df4..3ddea62b57270662fe8f24d52d697874ee8768ef 100644
--- a/configure.ac
+++ b/configure.ac
@@ -263,6 +263,7 @@ AC_CHECK_TYPES([struct mnt_id_req],,,[#include <sys/mount.h>])
AC_CHECK_TYPES([struct statmount],,,[#include <sys/mount.h>])
AC_CHECK_TYPES([struct pidfd_info],,,[#include <sys/pidfd.h>])
+AC_CHECK_TYPES([struct file_attr],,,[#include <linux/fs.h>])
AC_CHECK_TYPES([struct fsxattr],,,[#include <linux/fs.h>])
diff --git a/include/lapi/fs.h b/include/lapi/fs.h
index 261f9fd016eaa39e3072d9fb48742616b0c5f571..ac3e09fd6dcc60e3237247bd575b0d8c2796cb07 100644
--- a/include/lapi/fs.h
+++ b/include/lapi/fs.h
@@ -14,10 +14,13 @@
# include <linux/fs.h>
#endif
+#include <stddef.h>
#include <stdint.h>
#include <sys/user.h>
#include <limits.h>
+#include "tst_test.h"
#include "lapi/abisize.h"
+#include "lapi/syscalls.h"
#ifndef HAVE_STRUCT_FSXATTR
struct fsxattr {
@@ -66,6 +69,18 @@ struct fsxattr {
# define FS_VERITY_FL 0x00100000 /* Verity protected inode */
#endif
+#ifndef FS_XFLAG_APPEND
+# define FS_XFLAG_APPEND 0x00000010 /* all writes append */
+#endif
+
+#ifndef FS_XFLAG_EXTSIZE
+# define FS_XFLAG_EXTSIZE 0x00000800 /* extent size allocator hint */
+#endif
+
+#ifndef FS_XFLAG_COWEXTSIZE
+# define FS_XFLAG_COWEXTSIZE 0x00010000 /* CoW extent size allocator hint */
+#endif
+
/*
* Helper function to get MAX_LFS_FILESIZE.
* Missing PAGE_SHIFT on some libc prevents defining MAX_LFS_FILESIZE.
@@ -88,4 +103,33 @@ static inline long long tst_max_lfs_filesize(void)
#endif
}
+#ifndef HAVE_STRUCT_FILE_ATTR
+struct file_attr {
+ uint64_t fa_xflags; /* xflags field value (get/set) */
+ uint32_t fa_extsize; /* extsize field value (get/set)*/
+ uint32_t fa_nextents; /* nextents field value (get) */
+ uint32_t fa_projid; /* project identifier (get/set) */
+ uint32_t fa_cowextsize; /* CoW extsize field value (get/set) */
+};
+#endif
+
+#define FILE_ATTR_SIZE_VER0 24
+#define FILE_ATTR_SIZE_LATEST FILE_ATTR_SIZE_VER0
+
+static inline int file_getattr(int dfd, const char *filename,
+ struct file_attr *ufattr, size_t usize,
+ unsigned int at_flags)
+{
+ return tst_syscall(__NR_file_getattr, dfd, filename, ufattr, usize,
+ at_flags);
+}
+
+static inline int file_setattr(int dfd, const char *filename,
+ struct file_attr *ufattr, size_t usize,
+ unsigned int at_flags)
+{
+ return tst_syscall(__NR_file_setattr, dfd, filename, ufattr, usize,
+ at_flags);
+}
+
#endif /* LAPI_FS_H__ */
--
2.50.1
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [LTP] [PATCH v3 4/6] Add file_attr01 test
2025-08-05 7:01 [LTP] [PATCH v3 0/6] file_setattr/file_getattr testing suite Andrea Cervesato
` (2 preceding siblings ...)
2025-08-05 7:01 ` [LTP] [PATCH v3 3/6] fs: add file_setattr/file_getattr " Andrea Cervesato
@ 2025-08-05 7:01 ` Andrea Cervesato
2025-08-05 11:36 ` Cyril Hrubis
2025-08-05 7:01 ` [LTP] [PATCH v3 5/6] Add file_attr02 test Andrea Cervesato
2025-08-05 7:01 ` [LTP] [PATCH v3 6/6] Add file_attr03 test Andrea Cervesato
5 siblings, 1 reply; 10+ messages in thread
From: Andrea Cervesato @ 2025-08-05 7:01 UTC (permalink / raw)
To: ltp
From: Andrea Cervesato <andrea.cervesato@suse.com>
Verify that `file_getattr` and `file_setattr` syscalls are raising the
correct errors according to the invalid input arguments. In particular:
- EBADFD: Invalid file descriptor.
- ENOENT: File doesn't exist
- EFAULT: File name is NULL
- EFAULT: File attributes is NULL
- EINVAL: File attributes size is zero
- E2BIG: File attributes size is too big
- EINVAL: Invalid AT flags
Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
---
runtest/syscalls | 2 +
testcases/kernel/syscalls/file_attr/.gitignore | 1 +
testcases/kernel/syscalls/file_attr/Makefile | 8 +
testcases/kernel/syscalls/file_attr/file_attr01.c | 171 ++++++++++++++++++++++
4 files changed, 182 insertions(+)
diff --git a/runtest/syscalls b/runtest/syscalls
index 6a17a34f8b5fc1289947d4504b7a146f3d022f1c..fed17a38baf0586ec886876b58c04158fa11e8e0 100644
--- a/runtest/syscalls
+++ b/runtest/syscalls
@@ -246,6 +246,8 @@ fallocate06 fallocate06
fsetxattr01 fsetxattr01
fsetxattr02 fsetxattr02
+file_attr01 file_attr01
+
#posix_fadvise test cases
posix_fadvise01 posix_fadvise01
posix_fadvise01_64 posix_fadvise01_64
diff --git a/testcases/kernel/syscalls/file_attr/.gitignore b/testcases/kernel/syscalls/file_attr/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..de06f204d34be482a6401f2a5e7931caa5e3ab12
--- /dev/null
+++ b/testcases/kernel/syscalls/file_attr/.gitignore
@@ -0,0 +1 @@
+file_attr01
diff --git a/testcases/kernel/syscalls/file_attr/Makefile b/testcases/kernel/syscalls/file_attr/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..3b19b0ce6be00839038c405eea027b0102761e45
--- /dev/null
+++ b/testcases/kernel/syscalls/file_attr/Makefile
@@ -0,0 +1,8 @@
+# Copyright (c) 2025 - Linaro Limited. All rights reserved.
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+top_srcdir ?= ../../../..
+
+include $(top_srcdir)/include/mk/testcases.mk
+
+include $(top_srcdir)/include/mk/generic_leaf_target.mk
diff --git a/testcases/kernel/syscalls/file_attr/file_attr01.c b/testcases/kernel/syscalls/file_attr/file_attr01.c
new file mode 100644
index 0000000000000000000000000000000000000000..597ce31fbb11c47754a264eba394be3c233c8663
--- /dev/null
+++ b/testcases/kernel/syscalls/file_attr/file_attr01.c
@@ -0,0 +1,171 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Copyright (C) 2025 SUSE LLC Andrea Cervesato <andrea.cervesato@suse.com>
+ */
+
+/*\
+ * Verify that `file_getattr` and `file_setattr` syscalls are raising the
+ * correct errors according to the invalid input arguments. In particular:
+ *
+ * - EBADFD: Invalid file descriptor.
+ * - ENOENT: File doesn't exist
+ * - EFAULT: File name is NULL
+ * - EFAULT: File attributes is NULL
+ * - EINVAL: File attributes size is zero
+ * - E2BIG: File attributes size is too big
+ * - EINVAL: Invalid AT flags
+ */
+
+#include <string.h>
+#include "tst_test.h"
+#include "lapi/fs.h"
+#include "lapi/fcntl.h"
+
+#define MNTPOINT "mntpoint"
+#define FILENAME "ltp_file"
+#define NO_FILENAME "ltp_file_doesnt_exist"
+
+static int valid_dfd = -1;
+static int invalid_dfd = -1;
+static char *valid_filename;
+static char *invalid_filename;
+static char *null_ptr;
+static size_t zero;
+static size_t valid_usize;
+static size_t big_usize;
+static struct file_attr *valid_file_attr;
+
+static struct tcase {
+ int *dfd;
+ char **filename;
+ struct file_attr **ufattr;
+ size_t *usize;
+ int at_flags;
+ int exp_errno;
+ char *msg;
+} tcases[] = {
+ {
+ .dfd = &invalid_dfd,
+ .filename = &valid_filename,
+ .ufattr = &valid_file_attr,
+ .usize = &valid_usize,
+ .exp_errno = EBADF,
+ .msg = "Invalid file descriptor",
+ },
+ {
+ .dfd = &valid_dfd,
+ .filename = &invalid_filename,
+ .ufattr = &valid_file_attr,
+ .usize = &valid_usize,
+ .exp_errno = ENOENT,
+ .msg = "File doesn't exist",
+ },
+ {
+ .dfd = &valid_dfd,
+ .filename = &null_ptr,
+ .ufattr = &valid_file_attr,
+ .usize = &valid_usize,
+ .exp_errno = EFAULT,
+ .msg = "Filename is NULL",
+ },
+ {
+ .dfd = &valid_dfd,
+ .filename = &valid_filename,
+ .ufattr = (struct file_attr **)(&null_ptr),
+ .usize = &valid_usize,
+ .exp_errno = EFAULT,
+ .msg = "File attributes is NULL",
+ },
+ {
+ .dfd = &valid_dfd,
+ .filename = &valid_filename,
+ .ufattr = &valid_file_attr,
+ .usize = &zero,
+ .exp_errno = EINVAL,
+ .msg = "File attributes size is zero",
+ },
+ {
+ .dfd = &valid_dfd,
+ .filename = &valid_filename,
+ .ufattr = &valid_file_attr,
+ .usize = &big_usize,
+ .exp_errno = E2BIG,
+ .msg = "File attributes size is too big",
+ },
+ {
+ .dfd = &valid_dfd,
+ .filename = &valid_filename,
+ .ufattr = &valid_file_attr,
+ .usize = &valid_usize,
+ .at_flags = -1,
+ .exp_errno = EINVAL,
+ .msg = "Invalid AT flags",
+ },
+};
+
+static void run(unsigned int i)
+{
+ struct tcase *tc = &tcases[i];
+
+ if (tst_variant) {
+ TST_EXP_FAIL(file_getattr(
+ *tc->dfd, *tc->filename,
+ *tc->ufattr, *tc->usize,
+ tc->at_flags),
+ tc->exp_errno,
+ "%s", tc->msg);
+ } else {
+ TST_EXP_FAIL(file_setattr(
+ *tc->dfd, *tc->filename,
+ *tc->ufattr, *tc->usize,
+ tc->at_flags),
+ tc->exp_errno,
+ "%s", tc->msg);
+ }
+}
+
+static void setup(void)
+{
+ valid_dfd = SAFE_OPEN(MNTPOINT, O_RDONLY);
+
+ SAFE_CHDIR(MNTPOINT);
+ SAFE_TOUCH(FILENAME, 0777, NULL);
+ SAFE_CHDIR("..");
+
+ memcpy(valid_filename, FILENAME, strlen(FILENAME));
+ memcpy(invalid_filename, NO_FILENAME, strlen(NO_FILENAME));
+
+ valid_usize = FILE_ATTR_SIZE_LATEST;
+ big_usize = sysconf(_SC_PAGESIZE) + 100;
+}
+
+static void cleanup(void)
+{
+ if (valid_dfd != -1)
+ SAFE_CLOSE(valid_dfd);
+}
+
+static struct tst_test test = {
+ .test = run,
+ .setup = setup,
+ .cleanup = cleanup,
+ .tcnt = ARRAY_SIZE(tcases),
+ .mntpoint = MNTPOINT,
+ .needs_root = 1,
+ .mount_device = 1,
+ .all_filesystems = 1,
+ .test_variants = 2,
+ .skip_filesystems = (const char *const []) {
+ "fuse",
+ "ntfs",
+ "vfat",
+ "exfat",
+ NULL
+ },
+ .bufs = (struct tst_buffers []) {
+ {&valid_filename, .size = 32},
+ {&invalid_filename, .size = 32},
+ {&valid_file_attr, .size = sizeof(struct file_attr)},
+ {}
+ }
+};
--
2.50.1
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [LTP] [PATCH v3 5/6] Add file_attr02 test
2025-08-05 7:01 [LTP] [PATCH v3 0/6] file_setattr/file_getattr testing suite Andrea Cervesato
` (3 preceding siblings ...)
2025-08-05 7:01 ` [LTP] [PATCH v3 4/6] Add file_attr01 test Andrea Cervesato
@ 2025-08-05 7:01 ` Andrea Cervesato
2025-08-05 11:41 ` Cyril Hrubis
2025-08-05 7:01 ` [LTP] [PATCH v3 6/6] Add file_attr03 test Andrea Cervesato
5 siblings, 1 reply; 10+ messages in thread
From: Andrea Cervesato @ 2025-08-05 7:01 UTC (permalink / raw)
To: ltp
From: Andrea Cervesato <andrea.cervesato@suse.com>
Verify that `file_getattr` is correctly reading filesystems additional
attributes. We are running test on XFS only, since it's the only filesystem
currently implementing the features we need.
Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
---
runtest/syscalls | 1 +
testcases/kernel/syscalls/file_attr/.gitignore | 1 +
testcases/kernel/syscalls/file_attr/file_attr02.c | 94 +++++++++++++++++++++++
3 files changed, 96 insertions(+)
diff --git a/runtest/syscalls b/runtest/syscalls
index fed17a38baf0586ec886876b58c04158fa11e8e0..b69e474a6a596359bb1ace30312b55d6bf2b65cc 100644
--- a/runtest/syscalls
+++ b/runtest/syscalls
@@ -247,6 +247,7 @@ fsetxattr01 fsetxattr01
fsetxattr02 fsetxattr02
file_attr01 file_attr01
+file_attr02 file_attr02
#posix_fadvise test cases
posix_fadvise01 posix_fadvise01
diff --git a/testcases/kernel/syscalls/file_attr/.gitignore b/testcases/kernel/syscalls/file_attr/.gitignore
index de06f204d34be482a6401f2a5e7931caa5e3ab12..afe9c2fc9a4218dc032f044c1d317355a784a525 100644
--- a/testcases/kernel/syscalls/file_attr/.gitignore
+++ b/testcases/kernel/syscalls/file_attr/.gitignore
@@ -1 +1,2 @@
file_attr01
+file_attr02
diff --git a/testcases/kernel/syscalls/file_attr/file_attr02.c b/testcases/kernel/syscalls/file_attr/file_attr02.c
new file mode 100644
index 0000000000000000000000000000000000000000..f8ad8a325966a5c64cdaf45b9fc046e72b89b6fe
--- /dev/null
+++ b/testcases/kernel/syscalls/file_attr/file_attr02.c
@@ -0,0 +1,94 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Copyright (C) 2025 SUSE LLC Andrea Cervesato <andrea.cervesato@suse.com>
+ */
+
+/*\
+ * Verify that `file_getattr` is correctly reading filesystems additional
+ * attributes. We are running test on XFS only, since it's the only filesystem
+ * currently implementing the features we need.
+ */
+
+#include "tst_test.h"
+#include "lapi/fs.h"
+#include <linux/fs.h>
+
+#define MNTPOINT "mntpoint"
+#define FILENAME "ltp_file"
+#define BLOCKS 1024
+#define PROJID 16
+
+static int fd = -1;
+static int dfd = -1;
+static struct fsxattr xattr;
+static struct file_attr *attr;
+
+static void run(void)
+{
+ memset(attr, 0, sizeof(*attr));
+
+ TST_EXP_PASS(file_getattr(
+ dfd, FILENAME,
+ attr, FILE_ATTR_SIZE_LATEST,
+ 0));
+
+ TST_EXP_EQ_LI(attr->fa_xflags, xattr.fsx_xflags);
+ TST_EXP_EQ_LI(attr->fa_extsize, xattr.fsx_extsize);
+ TST_EXP_EQ_LI(attr->fa_cowextsize, xattr.fsx_cowextsize);
+ TST_EXP_EQ_LI(attr->fa_nextents, xattr.fsx_nextents);
+ TST_EXP_EQ_LI(attr->fa_projid, PROJID);
+ TST_EXP_EQ_LI(attr->fa_projid, xattr.fsx_projid);
+}
+
+static void setup(void)
+{
+ int block_size;
+
+ block_size = tst_dev_block_size(MNTPOINT);
+
+ dfd = SAFE_OPEN(MNTPOINT, O_RDONLY);
+ fd = SAFE_CREAT(MNTPOINT "/" FILENAME, 0777);
+
+ SAFE_IOCTL(fd, FS_IOC_FSGETXATTR, &xattr);
+
+ xattr.fsx_xflags |= FS_XFLAG_EXTSIZE;
+ xattr.fsx_xflags |= FS_XFLAG_COWEXTSIZE;
+ xattr.fsx_extsize = BLOCKS * block_size;
+ xattr.fsx_cowextsize = BLOCKS * block_size;
+ xattr.fsx_projid = PROJID;
+
+ SAFE_IOCTL(fd, FS_IOC_FSSETXATTR, &xattr);
+
+ /* this will force at least one extent to be allocated */
+ SAFE_WRITE(SAFE_WRITE_ALL, fd, "a", 1);
+
+ SAFE_IOCTL(fd, FS_IOC_FSGETXATTR, &xattr);
+ SAFE_CLOSE(fd);
+ fd = -1;
+}
+
+static void cleanup(void)
+{
+ if (fd != -1)
+ SAFE_CLOSE(fd);
+
+ if (dfd != -1)
+ SAFE_CLOSE(dfd);
+}
+
+static struct tst_test test = {
+ .test_all = run,
+ .setup = setup,
+ .cleanup = cleanup,
+ .mntpoint = MNTPOINT,
+ .needs_root = 1,
+ .mount_device = 1,
+ .filesystems = (struct tst_fs []) {
+ {.type = "xfs"},
+ {}
+ },
+ .bufs = (struct tst_buffers []) {
+ {&attr, .size = sizeof(struct file_attr)},
+ {}
+ }
+};
--
2.50.1
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [LTP] [PATCH v3 6/6] Add file_attr03 test
2025-08-05 7:01 [LTP] [PATCH v3 0/6] file_setattr/file_getattr testing suite Andrea Cervesato
` (4 preceding siblings ...)
2025-08-05 7:01 ` [LTP] [PATCH v3 5/6] Add file_attr02 test Andrea Cervesato
@ 2025-08-05 7:01 ` Andrea Cervesato
2025-08-05 12:22 ` Cyril Hrubis
5 siblings, 1 reply; 10+ messages in thread
From: Andrea Cervesato @ 2025-08-05 7:01 UTC (permalink / raw)
To: ltp
From: Andrea Cervesato <andrea.cervesato@suse.com>
Verify that `file_setattr` is correctly setting filesystems additional
attributes. We are running test on XFS only, since it's the only filesystem
currently implementing the features we need.
Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
---
runtest/syscalls | 1 +
testcases/kernel/syscalls/file_attr/.gitignore | 1 +
testcases/kernel/syscalls/file_attr/file_attr03.c | 81 +++++++++++++++++++++++
3 files changed, 83 insertions(+)
diff --git a/runtest/syscalls b/runtest/syscalls
index b69e474a6a596359bb1ace30312b55d6bf2b65cc..c33987328d3d6ec96660260aaee4f9ca8c4f0aee 100644
--- a/runtest/syscalls
+++ b/runtest/syscalls
@@ -248,6 +248,7 @@ fsetxattr02 fsetxattr02
file_attr01 file_attr01
file_attr02 file_attr02
+file_attr03 file_attr03
#posix_fadvise test cases
posix_fadvise01 posix_fadvise01
diff --git a/testcases/kernel/syscalls/file_attr/.gitignore b/testcases/kernel/syscalls/file_attr/.gitignore
index afe9c2fc9a4218dc032f044c1d317355a784a525..b79a340b733f7407dc135c5c3b0a9cd0e003e6c9 100644
--- a/testcases/kernel/syscalls/file_attr/.gitignore
+++ b/testcases/kernel/syscalls/file_attr/.gitignore
@@ -1,2 +1,3 @@
file_attr01
file_attr02
+file_attr03
diff --git a/testcases/kernel/syscalls/file_attr/file_attr03.c b/testcases/kernel/syscalls/file_attr/file_attr03.c
new file mode 100644
index 0000000000000000000000000000000000000000..3ee97377db402ef09e6bcd04d482428f9f13deb1
--- /dev/null
+++ b/testcases/kernel/syscalls/file_attr/file_attr03.c
@@ -0,0 +1,81 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Copyright (C) 2025 SUSE LLC Andrea Cervesato <andrea.cervesato@suse.com>
+ */
+
+/*\
+ * Verify that `file_setattr` is correctly setting filesystems additional
+ * attributes. We are running test on XFS only, since it's the only filesystem
+ * currently implementing the features we need.
+ */
+
+#include "tst_test.h"
+#include "lapi/fs.h"
+#include <linux/fs.h>
+
+#define MNTPOINT "mntpoint"
+#define FILENAME "ltp_file"
+#define BLOCKS 1024
+#define PROJID 16
+
+static int fd = -1;
+static int dfd = -1;
+static int block_size;
+static struct fsxattr xattr;
+static struct file_attr *attr;
+
+static void run(void)
+{
+ dfd = SAFE_OPEN(MNTPOINT, O_DIRECTORY);
+ fd = SAFE_CREAT(MNTPOINT "/" FILENAME, 0777);
+
+ TST_EXP_PASS(file_setattr(dfd, FILENAME, attr, FILE_ATTR_SIZE_LATEST, 0));
+ SAFE_IOCTL(fd, FS_IOC_FSGETXATTR, &xattr);
+ SAFE_CLOSE(dfd);
+ SAFE_CLOSE(fd);
+
+ TST_EXP_EQ_LI(xattr.fsx_xflags & FS_XFLAG_EXTSIZE, FS_XFLAG_EXTSIZE);
+ TST_EXP_EQ_LI(xattr.fsx_xflags & FS_XFLAG_COWEXTSIZE, FS_XFLAG_COWEXTSIZE);
+ TST_EXP_EQ_LI(xattr.fsx_extsize, BLOCKS * block_size);
+ TST_EXP_EQ_LI(xattr.fsx_cowextsize, BLOCKS * block_size);
+ TST_EXP_EQ_LI(xattr.fsx_projid, PROJID);
+
+ SAFE_UNLINK(MNTPOINT "/" FILENAME);
+}
+
+static void setup(void)
+{
+ block_size = tst_dev_block_size(MNTPOINT);
+
+ attr->fa_xflags |= FS_XFLAG_EXTSIZE;
+ attr->fa_xflags |= FS_XFLAG_COWEXTSIZE;
+ attr->fa_extsize = BLOCKS * block_size;
+ attr->fa_cowextsize = BLOCKS * block_size;
+ attr->fa_projid = PROJID;
+}
+
+static void cleanup(void)
+{
+ if (fd != -1)
+ SAFE_CLOSE(fd);
+
+ if (dfd != -1)
+ SAFE_CLOSE(dfd);
+}
+
+static struct tst_test test = {
+ .test_all = run,
+ .setup = setup,
+ .cleanup = cleanup,
+ .mntpoint = MNTPOINT,
+ .needs_root = 1,
+ .mount_device = 1,
+ .filesystems = (struct tst_fs []) {
+ {.type = "xfs"},
+ {}
+ },
+ .bufs = (struct tst_buffers []) {
+ {&attr, .size = sizeof(struct file_attr)},
+ {}
+ }
+};
--
2.50.1
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [LTP] [PATCH v3 4/6] Add file_attr01 test
2025-08-05 7:01 ` [LTP] [PATCH v3 4/6] Add file_attr01 test Andrea Cervesato
@ 2025-08-05 11:36 ` Cyril Hrubis
0 siblings, 0 replies; 10+ messages in thread
From: Cyril Hrubis @ 2025-08-05 11:36 UTC (permalink / raw)
To: Andrea Cervesato; +Cc: ltp
Hi!
> --- a/runtest/syscalls
> +++ b/runtest/syscalls
> @@ -246,6 +246,8 @@ fallocate06 fallocate06
> fsetxattr01 fsetxattr01
> fsetxattr02 fsetxattr02
>
> +file_attr01 file_attr01
> +
> #posix_fadvise test cases
> posix_fadvise01 posix_fadvise01
> posix_fadvise01_64 posix_fadvise01_64
> diff --git a/testcases/kernel/syscalls/file_attr/.gitignore b/testcases/kernel/syscalls/file_attr/.gitignore
> new file mode 100644
> index 0000000000000000000000000000000000000000..de06f204d34be482a6401f2a5e7931caa5e3ab12
> --- /dev/null
> +++ b/testcases/kernel/syscalls/file_attr/.gitignore
> @@ -0,0 +1 @@
> +file_attr01
> diff --git a/testcases/kernel/syscalls/file_attr/Makefile b/testcases/kernel/syscalls/file_attr/Makefile
> new file mode 100644
> index 0000000000000000000000000000000000000000..3b19b0ce6be00839038c405eea027b0102761e45
> --- /dev/null
> +++ b/testcases/kernel/syscalls/file_attr/Makefile
> @@ -0,0 +1,8 @@
> +# Copyright (c) 2025 - Linaro Limited. All rights reserved.
> +# SPDX-License-Identifier: GPL-2.0-or-later
> +
> +top_srcdir ?= ../../../..
> +
> +include $(top_srcdir)/include/mk/testcases.mk
> +
> +include $(top_srcdir)/include/mk/generic_leaf_target.mk
> diff --git a/testcases/kernel/syscalls/file_attr/file_attr01.c b/testcases/kernel/syscalls/file_attr/file_attr01.c
> new file mode 100644
> index 0000000000000000000000000000000000000000..597ce31fbb11c47754a264eba394be3c233c8663
> --- /dev/null
> +++ b/testcases/kernel/syscalls/file_attr/file_attr01.c
> @@ -0,0 +1,171 @@
> +// SPDX-License-Identifier: GPL-2.0-or-later
> +/*
> + * Copyright (C) 2025 SUSE LLC Andrea Cervesato <andrea.cervesato@suse.com>
> + */
> +
> +/*\
> + * Verify that `file_getattr` and `file_setattr` syscalls are raising the
> + * correct errors according to the invalid input arguments. In particular:
> + *
> + * - EBADFD: Invalid file descriptor.
> + * - ENOENT: File doesn't exist
> + * - EFAULT: File name is NULL
> + * - EFAULT: File attributes is NULL
> + * - EINVAL: File attributes size is zero
> + * - E2BIG: File attributes size is too big
> + * - EINVAL: Invalid AT flags
> + */
> +
> +#include <string.h>
> +#include "tst_test.h"
> +#include "lapi/fs.h"
> +#include "lapi/fcntl.h"
> +
> +#define MNTPOINT "mntpoint"
> +#define FILENAME "ltp_file"
> +#define NO_FILENAME "ltp_file_doesnt_exist"
> +
> +static int valid_dfd = -1;
> +static int invalid_dfd = -1;
> +static char *valid_filename;
> +static char *invalid_filename;
> +static char *null_ptr;
> +static size_t zero;
> +static size_t valid_usize;
> +static size_t big_usize;
> +static struct file_attr *valid_file_attr;
> +
> +static struct tcase {
> + int *dfd;
> + char **filename;
> + struct file_attr **ufattr;
> + size_t *usize;
> + int at_flags;
> + int exp_errno;
> + char *msg;
> +} tcases[] = {
> + {
> + .dfd = &invalid_dfd,
Hmm do we need a tst_fd iterator for this case?
> + .filename = &valid_filename,
> + .ufattr = &valid_file_attr,
> + .usize = &valid_usize,
> + .exp_errno = EBADF,
> + .msg = "Invalid file descriptor",
> + },
> + {
> + .dfd = &valid_dfd,
> + .filename = &invalid_filename,
> + .ufattr = &valid_file_attr,
> + .usize = &valid_usize,
> + .exp_errno = ENOENT,
> + .msg = "File doesn't exist",
> + },
> + {
> + .dfd = &valid_dfd,
> + .filename = &null_ptr,
> + .ufattr = &valid_file_attr,
> + .usize = &valid_usize,
> + .exp_errno = EFAULT,
> + .msg = "Filename is NULL",
> + },
> + {
> + .dfd = &valid_dfd,
> + .filename = &valid_filename,
> + .ufattr = (struct file_attr **)(&null_ptr),
> + .usize = &valid_usize,
> + .exp_errno = EFAULT,
> + .msg = "File attributes is NULL",
> + },
> + {
> + .dfd = &valid_dfd,
> + .filename = &valid_filename,
> + .ufattr = &valid_file_attr,
> + .usize = &zero,
> + .exp_errno = EINVAL,
> + .msg = "File attributes size is zero",
> + },
> + {
> + .dfd = &valid_dfd,
> + .filename = &valid_filename,
> + .ufattr = &valid_file_attr,
> + .usize = &big_usize,
> + .exp_errno = E2BIG,
> + .msg = "File attributes size is too big",
> + },
> + {
> + .dfd = &valid_dfd,
> + .filename = &valid_filename,
> + .ufattr = &valid_file_attr,
> + .usize = &valid_usize,
> + .at_flags = -1,
> + .exp_errno = EINVAL,
> + .msg = "Invalid AT flags",
> + },
> +};
> +
> +static void run(unsigned int i)
> +{
> + struct tcase *tc = &tcases[i];
> +
> + if (tst_variant) {
> + TST_EXP_FAIL(file_getattr(
> + *tc->dfd, *tc->filename,
> + *tc->ufattr, *tc->usize,
> + tc->at_flags),
> + tc->exp_errno,
> + "%s", tc->msg);
> + } else {
> + TST_EXP_FAIL(file_setattr(
> + *tc->dfd, *tc->filename,
> + *tc->ufattr, *tc->usize,
> + tc->at_flags),
> + tc->exp_errno,
> + "%s", tc->msg);
> + }
> +}
> +
> +static void setup(void)
> +{
> + valid_dfd = SAFE_OPEN(MNTPOINT, O_RDONLY);
> +
> + SAFE_CHDIR(MNTPOINT);
> + SAFE_TOUCH(FILENAME, 0777, NULL);
> + SAFE_CHDIR("..");
> +
> + memcpy(valid_filename, FILENAME, strlen(FILENAME));
> + memcpy(invalid_filename, NO_FILENAME, strlen(NO_FILENAME));
The struct tst_buffers have .str member that if set copies the string,
so instead of .size = 32 you need to pass .str = FILENAME and .str
NO_FILENAME there.
> + valid_usize = FILE_ATTR_SIZE_LATEST;
> + big_usize = sysconf(_SC_PAGESIZE) + 100;
Do we need a small_usize that would be one less than smalles
FILE_ATTR_SIZE as well?
> +}
> +
> +static void cleanup(void)
> +{
> + if (valid_dfd != -1)
> + SAFE_CLOSE(valid_dfd);
> +}
> +
> +static struct tst_test test = {
> + .test = run,
> + .setup = setup,
> + .cleanup = cleanup,
> + .tcnt = ARRAY_SIZE(tcases),
> + .mntpoint = MNTPOINT,
> + .needs_root = 1,
> + .mount_device = 1,
> + .all_filesystems = 1,
> + .test_variants = 2,
> + .skip_filesystems = (const char *const []) {
> + "fuse",
> + "ntfs",
> + "vfat",
> + "exfat",
> + NULL
> + },
> + .bufs = (struct tst_buffers []) {
> + {&valid_filename, .size = 32},
> + {&invalid_filename, .size = 32},
> + {&valid_file_attr, .size = sizeof(struct file_attr)},
> + {}
> + }
> +};
>
> --
> 2.50.1
>
>
> --
> Mailing list info: https://lists.linux.it/listinfo/ltp
--
Cyril Hrubis
chrubis@suse.cz
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [LTP] [PATCH v3 5/6] Add file_attr02 test
2025-08-05 7:01 ` [LTP] [PATCH v3 5/6] Add file_attr02 test Andrea Cervesato
@ 2025-08-05 11:41 ` Cyril Hrubis
0 siblings, 0 replies; 10+ messages in thread
From: Cyril Hrubis @ 2025-08-05 11:41 UTC (permalink / raw)
To: Andrea Cervesato; +Cc: ltp
Hi!
> Verify that `file_getattr` is correctly reading filesystems additional
> attributes. We are running test on XFS only, since it's the only filesystem
> currently implementing the features we need.
>
> Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
> ---
> runtest/syscalls | 1 +
> testcases/kernel/syscalls/file_attr/.gitignore | 1 +
> testcases/kernel/syscalls/file_attr/file_attr02.c | 94 +++++++++++++++++++++++
> 3 files changed, 96 insertions(+)
>
> diff --git a/runtest/syscalls b/runtest/syscalls
> index fed17a38baf0586ec886876b58c04158fa11e8e0..b69e474a6a596359bb1ace30312b55d6bf2b65cc 100644
> --- a/runtest/syscalls
> +++ b/runtest/syscalls
> @@ -247,6 +247,7 @@ fsetxattr01 fsetxattr01
> fsetxattr02 fsetxattr02
>
> file_attr01 file_attr01
> +file_attr02 file_attr02
>
> #posix_fadvise test cases
> posix_fadvise01 posix_fadvise01
> diff --git a/testcases/kernel/syscalls/file_attr/.gitignore b/testcases/kernel/syscalls/file_attr/.gitignore
> index de06f204d34be482a6401f2a5e7931caa5e3ab12..afe9c2fc9a4218dc032f044c1d317355a784a525 100644
> --- a/testcases/kernel/syscalls/file_attr/.gitignore
> +++ b/testcases/kernel/syscalls/file_attr/.gitignore
> @@ -1 +1,2 @@
> file_attr01
> +file_attr02
> diff --git a/testcases/kernel/syscalls/file_attr/file_attr02.c b/testcases/kernel/syscalls/file_attr/file_attr02.c
> new file mode 100644
> index 0000000000000000000000000000000000000000..f8ad8a325966a5c64cdaf45b9fc046e72b89b6fe
> --- /dev/null
> +++ b/testcases/kernel/syscalls/file_attr/file_attr02.c
> @@ -0,0 +1,94 @@
> +// SPDX-License-Identifier: GPL-2.0-or-later
> +/*
> + * Copyright (C) 2025 SUSE LLC Andrea Cervesato <andrea.cervesato@suse.com>
> + */
> +
> +/*\
> + * Verify that `file_getattr` is correctly reading filesystems additional
> + * attributes. We are running test on XFS only, since it's the only filesystem
> + * currently implementing the features we need.
> + */
> +
> +#include "tst_test.h"
> +#include "lapi/fs.h"
> +#include <linux/fs.h>
> +
> +#define MNTPOINT "mntpoint"
> +#define FILENAME "ltp_file"
> +#define BLOCKS 1024
> +#define PROJID 16
> +
> +static int fd = -1;
> +static int dfd = -1;
> +static struct fsxattr xattr;
> +static struct file_attr *attr;
> +
> +static void run(void)
> +{
> + memset(attr, 0, sizeof(*attr));
> +
> + TST_EXP_PASS(file_getattr(
> + dfd, FILENAME,
> + attr, FILE_ATTR_SIZE_LATEST,
> + 0));
> +
> + TST_EXP_EQ_LI(attr->fa_xflags, xattr.fsx_xflags);
> + TST_EXP_EQ_LI(attr->fa_extsize, xattr.fsx_extsize);
> + TST_EXP_EQ_LI(attr->fa_cowextsize, xattr.fsx_cowextsize);
> + TST_EXP_EQ_LI(attr->fa_nextents, xattr.fsx_nextents);
> + TST_EXP_EQ_LI(attr->fa_projid, PROJID);
> + TST_EXP_EQ_LI(attr->fa_projid, xattr.fsx_projid);
> +}
> +
> +static void setup(void)
> +{
> + int block_size;
> +
> + block_size = tst_dev_block_size(MNTPOINT);
> +
> + dfd = SAFE_OPEN(MNTPOINT, O_RDONLY);
> + fd = SAFE_CREAT(MNTPOINT "/" FILENAME, 0777);
> +
> + SAFE_IOCTL(fd, FS_IOC_FSGETXATTR, &xattr);
> +
> + xattr.fsx_xflags |= FS_XFLAG_EXTSIZE;
> + xattr.fsx_xflags |= FS_XFLAG_COWEXTSIZE;
> + xattr.fsx_extsize = BLOCKS * block_size;
> + xattr.fsx_cowextsize = BLOCKS * block_size;
> + xattr.fsx_projid = PROJID;
> +
> + SAFE_IOCTL(fd, FS_IOC_FSSETXATTR, &xattr);
> +
> + /* this will force at least one extent to be allocated */
> + SAFE_WRITE(SAFE_WRITE_ALL, fd, "a", 1);
> +
> + SAFE_IOCTL(fd, FS_IOC_FSGETXATTR, &xattr);
> + SAFE_CLOSE(fd);
> + fd = -1;
SAFE_CLOSE() does this for you.
The rest looks fine:
Reviewed-by: Cyril Hrubis <chrubis@suse.cz>
--
Cyril Hrubis
chrubis@suse.cz
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [LTP] [PATCH v3 6/6] Add file_attr03 test
2025-08-05 7:01 ` [LTP] [PATCH v3 6/6] Add file_attr03 test Andrea Cervesato
@ 2025-08-05 12:22 ` Cyril Hrubis
0 siblings, 0 replies; 10+ messages in thread
From: Cyril Hrubis @ 2025-08-05 12:22 UTC (permalink / raw)
To: Andrea Cervesato; +Cc: ltp
Hi!
> +static void run(void)
> +{
> + dfd = SAFE_OPEN(MNTPOINT, O_DIRECTORY);
> + fd = SAFE_CREAT(MNTPOINT "/" FILENAME, 0777);
> +
> + TST_EXP_PASS(file_setattr(dfd, FILENAME, attr, FILE_ATTR_SIZE_LATEST, 0));
^
Just for a completion I would use
AT_FDCWD in this test so that we test
both dirfd (in previous test) and
AT_FDCWD (in this test)
--
Cyril Hrubis
chrubis@suse.cz
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2025-08-05 12:22 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-08-05 7:01 [LTP] [PATCH v3 0/6] file_setattr/file_getattr testing suite Andrea Cervesato
2025-08-05 7:01 ` [LTP] [PATCH v3 1/6] Update LTP to the latest syscalls Andrea Cervesato
2025-08-05 7:01 ` [LTP] [PATCH v3 2/6] fs: add struct fsxattr fallback definitions Andrea Cervesato
2025-08-05 7:01 ` [LTP] [PATCH v3 3/6] fs: add file_setattr/file_getattr " Andrea Cervesato
2025-08-05 7:01 ` [LTP] [PATCH v3 4/6] Add file_attr01 test Andrea Cervesato
2025-08-05 11:36 ` Cyril Hrubis
2025-08-05 7:01 ` [LTP] [PATCH v3 5/6] Add file_attr02 test Andrea Cervesato
2025-08-05 11:41 ` Cyril Hrubis
2025-08-05 7:01 ` [LTP] [PATCH v3 6/6] Add file_attr03 test Andrea Cervesato
2025-08-05 12:22 ` Cyril Hrubis
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.