* [LTP] [PATCH] syscalls: file_attr05: skip ntfs filesystem
@ 2026-04-08 17:44 Matthew R. Ochs via ltp
2026-04-09 7:53 ` Petr Vorel
2026-04-09 8:27 ` Cyril Hrubis
0 siblings, 2 replies; 8+ messages in thread
From: Matthew R. Ochs via ltp @ 2026-04-08 17:44 UTC (permalink / raw)
To: ltp
LTP mounts ntfs via ntfs-3g (FUSE) rather than the kernel ntfs3
driver. ntfs-3g's ntfs_ioctl() returns EINVAL for any unhandled
ioctl, including FS_IOC_FSSETXATTR, so file_setattr() returns
EINVAL instead of the expected EOPNOTSUPP.
Add "ntfs" to skip_filesystems for the same reason "fuse" is
already skipped.
Signed-off-by: Matthew R. Ochs <mochs@nvidia.com>
---
testcases/kernel/syscalls/file_attr/file_attr05.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/testcases/kernel/syscalls/file_attr/file_attr05.c b/testcases/kernel/syscalls/file_attr/file_attr05.c
index 6c1471da33e7..85b6cafc5f17 100644
--- a/testcases/kernel/syscalls/file_attr/file_attr05.c
+++ b/testcases/kernel/syscalls/file_attr/file_attr05.c
@@ -49,6 +49,7 @@ static struct tst_test test = {
.skip_filesystems = (const char *const []) {
"xfs",
"fuse", /* EINVAL is raised before EOPNOTSUPP */
+ "ntfs", /* mounted via ntfs-3g (FUSE), returns EINVAL */
"vfat", /* vfat is not implementing file_[set|get]attr */
NULL,
},
--
2.50.1
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [LTP] [PATCH] syscalls: file_attr05: skip ntfs filesystem
2026-04-08 17:44 [LTP] [PATCH] syscalls: file_attr05: skip ntfs filesystem Matthew R. Ochs via ltp
@ 2026-04-09 7:53 ` Petr Vorel
2026-04-09 22:55 ` Matt Ochs via ltp
2026-04-09 8:27 ` Cyril Hrubis
1 sibling, 1 reply; 8+ messages in thread
From: Petr Vorel @ 2026-04-09 7:53 UTC (permalink / raw)
To: Matthew R. Ochs; +Cc: ltp
Hi Matthew,
> LTP mounts ntfs via ntfs-3g (FUSE) rather than the kernel ntfs3
> driver. ntfs-3g's ntfs_ioctl() returns EINVAL for any unhandled
> ioctl, including FS_IOC_FSSETXATTR, so file_setattr() returns
> EINVAL instead of the expected EOPNOTSUPP.
> Add "ntfs" to skip_filesystems for the same reason "fuse" is
> already skipped.
Reviewed-by: Petr Vorel <pvorel@suse.cz>
Good catch, thanks!
We did not notice, because we have ntfs3 blacklisted in openSUSE Tumbleweed:
cat /etc/modprobe.d/60-blacklist_fs-ntfs3.conf
# The ntfs3 file system is blacklisted by default because it isn't actively
# supported by SUSE.
blacklist ntfs3
# The filesystem can be un-blacklisted by running "modprobe ntfs3".
# See README.md in the suse-module-tools package for details.
install ntfs3 /usr/lib/module-init-tools/unblacklist ntfs3; /sbin/modprobe --ignore-install ntfs3
Therefore it works:
# ./file_attr05
...
tst_supported_fs_types.c:98: TINFO: Kernel supports ext2
tst_supported_fs_types.c:63: TINFO: mkfs.ext2 does exist
tst_supported_fs_types.c:98: TINFO: Kernel supports ext3
tst_supported_fs_types.c:63: TINFO: mkfs.ext3 does exist
tst_supported_fs_types.c:98: TINFO: Kernel supports ext4
tst_supported_fs_types.c:63: TINFO: mkfs.ext4 does exist
tst_supported_fs_types.c:157: TINFO: Skipping xfs as requested by the test
tst_supported_fs_types.c:98: TINFO: Kernel supports btrfs
tst_supported_fs_types.c:63: TINFO: mkfs.btrfs does exist
tst_supported_fs_types.c:106: TINFO: Skipping bcachefs because of FUSE blacklist
tst_supported_fs_types.c:157: TINFO: Skipping vfat as requested by the test
tst_supported_fs_types.c:98: TINFO: Kernel supports exfat
tst_supported_fs_types.c:63: TINFO: mkfs.exfat does exist
tst_supported_fs_types.c:133: TINFO: FUSE does support ntfs
tst_supported_fs_types.c:63: TINFO: mkfs.ntfs does exist
tst_supported_fs_types.c:165: TINFO: Skipping FUSE based ntfs as requested by the test
...
But if I force ntfs, it really fails due using ntfs3:
# LTP_FORCE_SINGLE_FS_TYPE=ntfs ./file_attr05
...
tst_supported_fs_types.c:199: TINFO: WARNING: force testing only ntfs
tst_test.c:1997: TINFO: === Testing on ntfs ===
tst_test.c:1295: TINFO: Formatting /dev/loop0 with ntfs opts='' extra opts=''
The partition start sector was not specified for /dev/loop0 and it could not be obtained automatically. It has been set to 0.
The number of sectors per track was not specified for /dev/loop0 and it could not be obtained automatically. It has been set to 0.
The number of heads was not specified for /dev/loop0 and it could not be obtained automatically. It has been set to 0.
To boot from a device, Windows needs the 'partition start sector', the 'sectors per track' and the 'number of heads' to be set.
Windows will not be able to boot from this device.
tst_test.c:1307: TINFO: Mounting /dev/loop0 to /tmp/LTP_filWegMd2/mntpoint fstyp=ntfs flags=0
tst_test.c:1307: TINFO: Trying FUSE...
file_attr05.c:23: TFAIL: file_setattr(AT_FDCWD, FILEPATH, attr_set, FILE_ATTR_SIZE_LATEST, 0) expected EOPNOTSUPP: EINVAL (22)
Other way is if I remove blacklist and manually run 'modprobe ntfs3'.
> Signed-off-by: Matthew R. Ochs <mochs@nvidia.com>
> ---
> testcases/kernel/syscalls/file_attr/file_attr05.c | 1 +
> 1 file changed, 1 insertion(+)
> diff --git a/testcases/kernel/syscalls/file_attr/file_attr05.c b/testcases/kernel/syscalls/file_attr/file_attr05.c
> index 6c1471da33e7..85b6cafc5f17 100644
> --- a/testcases/kernel/syscalls/file_attr/file_attr05.c
> +++ b/testcases/kernel/syscalls/file_attr/file_attr05.c
> @@ -49,6 +49,7 @@ static struct tst_test test = {
> .skip_filesystems = (const char *const []) {
> "xfs",
> "fuse", /* EINVAL is raised before EOPNOTSUPP */
> + "ntfs", /* mounted via ntfs-3g (FUSE), returns EINVAL */
For me it'd work to replace "fuse" with "ntfs" (i.e. remove "fuse").
Does it work for you as well, or you need to have blacklisted both?
> "vfat", /* vfat is not implementing file_[set|get]attr */
Also it looks to me that vfat is working.
Kind regards,
Petr
> NULL,
> },
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [LTP] [PATCH] syscalls: file_attr05: skip ntfs filesystem
2026-04-08 17:44 [LTP] [PATCH] syscalls: file_attr05: skip ntfs filesystem Matthew R. Ochs via ltp
2026-04-09 7:53 ` Petr Vorel
@ 2026-04-09 8:27 ` Cyril Hrubis
2026-04-09 22:51 ` Matt Ochs via ltp
1 sibling, 1 reply; 8+ messages in thread
From: Cyril Hrubis @ 2026-04-09 8:27 UTC (permalink / raw)
To: Matthew R. Ochs; +Cc: ltp
Hi!
> LTP mounts ntfs via ntfs-3g (FUSE) rather than the kernel ntfs3
> driver. ntfs-3g's ntfs_ioctl() returns EINVAL for any unhandled
> ioctl, including FS_IOC_FSSETXATTR, so file_setattr() returns
> EINVAL instead of the expected EOPNOTSUPP.
>
> Add "ntfs" to skip_filesystems for the same reason "fuse" is
> already skipped.
The "fuse" in skiplist should match all fuse based filesystems. We pass
the skip_filesystems pointer to tst_get_supported_fs_types() in
lib/tst_supported_fs_types.c. If "fuse" is present there we enable
skip_fuse flag nad pass it to fs_could_be_used() function. In the
fs_could_be_used() we check if filesystem is implemented by fuse and
then skip it accordingly.
When I run the test I see:
...
tst_supported_fs_types.c:165: TINFO: Skipping FUSE based ntfs as requested by the test
...
So likely something else is at play here. Are you sure you are dealing
with a fuse based ntfs or with the kernel based implementation?
--
Cyril Hrubis
chrubis@suse.cz
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [LTP] [PATCH] syscalls: file_attr05: skip ntfs filesystem
2026-04-09 8:27 ` Cyril Hrubis
@ 2026-04-09 22:51 ` Matt Ochs via ltp
2026-04-10 10:04 ` Cyril Hrubis
0 siblings, 1 reply; 8+ messages in thread
From: Matt Ochs via ltp @ 2026-04-09 22:51 UTC (permalink / raw)
To: Cyril Hrubis; +Cc: ltp@lists.linux.it
Hi Cyril,
> On Apr 9, 2026, at 03:27, Cyril Hrubis <chrubis@suse.cz> wrote:
>
> Hi!
>> LTP mounts ntfs via ntfs-3g (FUSE) rather than the kernel ntfs3
>> driver. ntfs-3g's ntfs_ioctl() returns EINVAL for any unhandled
>> ioctl, including FS_IOC_FSSETXATTR, so file_setattr() returns
>> EINVAL instead of the expected EOPNOTSUPP.
>>
>> Add "ntfs" to skip_filesystems for the same reason "fuse" is
>> already skipped.
>
> The "fuse" in skiplist should match all fuse based filesystems. We pass
> the skip_filesystems pointer to tst_get_supported_fs_types() in
> lib/tst_supported_fs_types.c. If "fuse" is present there we enable
> skip_fuse flag nad pass it to fs_could_be_used() function. In the
> fs_could_be_used() we check if filesystem is implemented by fuse and
> then skip it accordingly.
>
> When I run the test I see:
>
> ...
> tst_supported_fs_types.c:165: TINFO: Skipping FUSE based ntfs as requested by the test
> ...
>
> So likely something else is at play here. Are you sure you are dealing
> with a fuse based ntfs or with the kernel based implementation?
>
On Ubuntu, ntfs3 is available as a kernel module, so
has_kernel_support() in tst_supported_fs_types.c probes the kernel
mount, succeeds, and returns TST_FS_KERNEL immediately — never
reaching the FUSE detection path. As a result, the existing "fuse"
skip doesn't fire even though safe_macros always mounts ntfs via
FUSE anyway.
I investigated fixing this in the library by consulting possibly_fuse()
in has_kernel_support() to fall through to FUSE detection when
safe_macros would use FUSE regardless. However, possibly_fuse() covers
both "ntfs" and "exfat", but safe_macros treats them differently —
ntfs always uses FUSE, while exfat tries the kernel driver first and
falls back to FUSE only on failure. The fix would incorrectly mark
exfat as FUSE-based on systems with kernel exfat support, causing
spurious skips in tests that skip "fuse".
Given that, I think the test-level fix is appropriate here. ntfs-3g
returns EINVAL for any unhandled ioctl, so skipping ntfs in file_attr05
is correct and consistent with how "fuse" is already handled in the
same skip list.
-matt
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [LTP] [PATCH] syscalls: file_attr05: skip ntfs filesystem
2026-04-09 7:53 ` Petr Vorel
@ 2026-04-09 22:55 ` Matt Ochs via ltp
2026-04-16 8:50 ` Petr Vorel
0 siblings, 1 reply; 8+ messages in thread
From: Matt Ochs via ltp @ 2026-04-09 22:55 UTC (permalink / raw)
To: Petr Vorel; +Cc: ltp@lists.linux.it
Hi Petr,
> On Apr 9, 2026, at 02:53, Petr Vorel <pvorel@suse.cz> wrote:
>
> Hi Matthew,
>
>> LTP mounts ntfs via ntfs-3g (FUSE) rather than the kernel ntfs3
>> driver. ntfs-3g's ntfs_ioctl() returns EINVAL for any unhandled
>> ioctl, including FS_IOC_FSSETXATTR, so file_setattr() returns
>> EINVAL instead of the expected EOPNOTSUPP.
>
>> Add "ntfs" to skip_filesystems for the same reason "fuse" is
>> already skipped.
>
> Reviewed-by: Petr Vorel <pvorel@suse.cz>
> Good catch, thanks!
I appreciate the review!
>
> We did not notice, because we have ntfs3 blacklisted in openSUSE Tumbleweed:
>
> cat /etc/modprobe.d/60-blacklist_fs-ntfs3.conf
> # The ntfs3 file system is blacklisted by default because it isn't actively
> # supported by SUSE.
> blacklist ntfs3
> # The filesystem can be un-blacklisted by running "modprobe ntfs3".
> # See README.md in the suse-module-tools package for details.
> install ntfs3 /usr/lib/module-init-tools/unblacklist ntfs3; /sbin/modprobe --ignore-install ntfs3
>
> Therefore it works:
> # ./file_attr05
> ...
> tst_supported_fs_types.c:98: TINFO: Kernel supports ext2
> tst_supported_fs_types.c:63: TINFO: mkfs.ext2 does exist
> tst_supported_fs_types.c:98: TINFO: Kernel supports ext3
> tst_supported_fs_types.c:63: TINFO: mkfs.ext3 does exist
> tst_supported_fs_types.c:98: TINFO: Kernel supports ext4
> tst_supported_fs_types.c:63: TINFO: mkfs.ext4 does exist
> tst_supported_fs_types.c:157: TINFO: Skipping xfs as requested by the test
> tst_supported_fs_types.c:98: TINFO: Kernel supports btrfs
> tst_supported_fs_types.c:63: TINFO: mkfs.btrfs does exist
> tst_supported_fs_types.c:106: TINFO: Skipping bcachefs because of FUSE blacklist
> tst_supported_fs_types.c:157: TINFO: Skipping vfat as requested by the test
> tst_supported_fs_types.c:98: TINFO: Kernel supports exfat
> tst_supported_fs_types.c:63: TINFO: mkfs.exfat does exist
> tst_supported_fs_types.c:133: TINFO: FUSE does support ntfs
> tst_supported_fs_types.c:63: TINFO: mkfs.ntfs does exist
> tst_supported_fs_types.c:165: TINFO: Skipping FUSE based ntfs as requested by the test
> ...
>
> But if I force ntfs, it really fails due using ntfs3:
> # LTP_FORCE_SINGLE_FS_TYPE=ntfs ./file_attr05
> ...
> tst_supported_fs_types.c:199: TINFO: WARNING: force testing only ntfs
> tst_test.c:1997: TINFO: === Testing on ntfs ===
> tst_test.c:1295: TINFO: Formatting /dev/loop0 with ntfs opts='' extra opts=''
> The partition start sector was not specified for /dev/loop0 and it could not be obtained automatically. It has been set to 0.
> The number of sectors per track was not specified for /dev/loop0 and it could not be obtained automatically. It has been set to 0.
> The number of heads was not specified for /dev/loop0 and it could not be obtained automatically. It has been set to 0.
> To boot from a device, Windows needs the 'partition start sector', the 'sectors per track' and the 'number of heads' to be set.
> Windows will not be able to boot from this device.
> tst_test.c:1307: TINFO: Mounting /dev/loop0 to /tmp/LTP_filWegMd2/mntpoint fstyp=ntfs flags=0
> tst_test.c:1307: TINFO: Trying FUSE...
> file_attr05.c:23: TFAIL: file_setattr(AT_FDCWD, FILEPATH, attr_set, FILE_ATTR_SIZE_LATEST, 0) expected EOPNOTSUPP: EINVAL (22)
>
> Other way is if I remove blacklist and manually run 'modprobe ntfs3'.
>
>> Signed-off-by: Matthew R. Ochs <mochs@nvidia.com>
>> ---
>> testcases/kernel/syscalls/file_attr/file_attr05.c | 1 +
>> 1 file changed, 1 insertion(+)
>
>> diff --git a/testcases/kernel/syscalls/file_attr/file_attr05.c b/testcases/kernel/syscalls/file_attr/file_attr05.c
>> index 6c1471da33e7..85b6cafc5f17 100644
>> --- a/testcases/kernel/syscalls/file_attr/file_attr05.c
>> +++ b/testcases/kernel/syscalls/file_attr/file_attr05.c
>> @@ -49,6 +49,7 @@ static struct tst_test test = {
>> .skip_filesystems = (const char *const []) {
>> "xfs",
>> "fuse", /* EINVAL is raised before EOPNOTSUPP */
>> + "ntfs", /* mounted via ntfs-3g (FUSE), returns EINVAL */
> For me it'd work to replace "fuse" with "ntfs" (i.e. remove "fuse").
> Does it work for you as well, or you need to have blacklisted both?
Regarding replacing "fuse" with "ntfs": on Ubuntu, ntfs3 is available
as a kernel module, so the detection reports "Kernel supports ntfs”
and the FUSE skip path never fires — meaning "fuse" alone doesn’t
catch it. Removing "fuse" would also drop coverage of other
FUSE-based filesystems, so I'd prefer to keep both entries.
-matt
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [LTP] [PATCH] syscalls: file_attr05: skip ntfs filesystem
2026-04-09 22:51 ` Matt Ochs via ltp
@ 2026-04-10 10:04 ` Cyril Hrubis
2026-04-10 16:42 ` Matt Ochs via ltp
0 siblings, 1 reply; 8+ messages in thread
From: Cyril Hrubis @ 2026-04-10 10:04 UTC (permalink / raw)
To: Matt Ochs; +Cc: ltp@lists.linux.it
Hi!
> > When I run the test I see:
> >
> > ...
> > tst_supported_fs_types.c:165: TINFO: Skipping FUSE based ntfs as requested by the test
> > ...
> >
> > So likely something else is at play here. Are you sure you are dealing
> > with a fuse based ntfs or with the kernel based implementation?
> >
>
> On Ubuntu, ntfs3 is available as a kernel module, so
> has_kernel_support() in tst_supported_fs_types.c probes the kernel
> mount, succeeds, and returns TST_FS_KERNEL immediately — never
> reaching the FUSE detection path. As a result, the existing "fuse"
> skip doesn't fire even though safe_macros always mounts ntfs via FUSE
> anyway.
I think I've figured it out. The ntfs driver in kernel is the old
read-only one and ntfs3 is the new read-write kernel driver.
What we can do in the library is to fix the ntfs driver to be always
handled by fuse and add ntfs3 that is the read-write kernel driver. With
that we will fix this test but also enable more coverage.
This works for me:
diff --git a/lib/tst_mkfs.c b/lib/tst_mkfs.c
index c619a373d..961ffc091 100644
--- a/lib/tst_mkfs.c
+++ b/lib/tst_mkfs.c
@@ -50,6 +50,9 @@ void tst_mkfs_(const char *file, const int lineno, void (cleanup_fn)(void),
return;
}
+ if (!strcmp(fs_type, "ntfs3"))
+ fs_type = "ntfs";
+
snprintf(mkfs, sizeof(mkfs), "mkfs.%s", fs_type);
if (fs_opts) {
diff --git a/lib/tst_supported_fs_types.c b/lib/tst_supported_fs_types.c
index 0c8c8dc50..d3020fc48 100644
--- a/lib/tst_supported_fs_types.c
+++ b/lib/tst_supported_fs_types.c
@@ -30,6 +30,7 @@ static const char *const fs_type_whitelist[] = {
"vfat",
"exfat",
"ntfs",
+ "ntfs3",
"tmpfs",
NULL
};
@@ -51,6 +52,9 @@ static int has_mkfs(const char *fs_type)
return 1;
}
+ if (!strcmp(fs_type, "ntfs3"))
+ fs_type = "ntfs";
+
sprintf(buf, "mkfs.%s >/dev/null 2>&1", fs_type);
ret = tst_system(buf);
@@ -87,6 +91,9 @@ static enum tst_fs_impl has_kernel_support(const char *fs_type)
char template[PATH_MAX];
int ret;
+ if (!strcmp(fs_type, "ntfs"))
+ goto check_fuse;
+
snprintf(template, sizeof(template), "%s/mountXXXXXX", tmpdir);
if (!mkdtemp(template))
tst_brk(TBROK | TERRNO, "mkdtemp(%s) failed", template);
@@ -102,6 +109,7 @@ static enum tst_fs_impl has_kernel_support(const char *fs_type)
SAFE_RMDIR(template);
+check_fuse:
if (tst_fs_in_skiplist(fs_type, fs_type_fuse_blacklist)) {
tst_res(TINFO, "Skipping %s because of FUSE blacklist", fs_type);
return TST_FS_UNSUPPORTED;
--
Cyril Hrubis
chrubis@suse.cz
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [LTP] [PATCH] syscalls: file_attr05: skip ntfs filesystem
2026-04-10 10:04 ` Cyril Hrubis
@ 2026-04-10 16:42 ` Matt Ochs via ltp
0 siblings, 0 replies; 8+ messages in thread
From: Matt Ochs via ltp @ 2026-04-10 16:42 UTC (permalink / raw)
To: Cyril Hrubis; +Cc: ltp@lists.linux.it
> On Apr 10, 2026, at 05:04, Cyril Hrubis <chrubis@suse.cz> wrote:
>
> Hi!
>>> When I run the test I see:
>>>
>>> ...
>>> tst_supported_fs_types.c:165: TINFO: Skipping FUSE based ntfs as requested by the test
>>> ...
>>>
>>> So likely something else is at play here. Are you sure you are dealing
>>> with a fuse based ntfs or with the kernel based implementation?
>>>
>>
>> On Ubuntu, ntfs3 is available as a kernel module, so
>> has_kernel_support() in tst_supported_fs_types.c probes the kernel
>> mount, succeeds, and returns TST_FS_KERNEL immediately — never
>> reaching the FUSE detection path. As a result, the existing "fuse"
>> skip doesn't fire even though safe_macros always mounts ntfs via FUSE
>> anyway.
>
> I think I've figured it out. The ntfs driver in kernel is the old
> read-only one and ntfs3 is the new read-write kernel driver.
>
> What we can do in the library is to fix the ntfs driver to be always
> handled by fuse and add ntfs3 that is the read-write kernel driver. With
> that we will fix this test but also enable more coverage.
>
> This works for me:
>
> diff --git a/lib/tst_mkfs.c b/lib/tst_mkfs.c
> index c619a373d..961ffc091 100644
> --- a/lib/tst_mkfs.c
> +++ b/lib/tst_mkfs.c
> @@ -50,6 +50,9 @@ void tst_mkfs_(const char *file, const int lineno, void (cleanup_fn)(void),
> return;
> }
>
> + if (!strcmp(fs_type, "ntfs3"))
> + fs_type = "ntfs";
> +
> snprintf(mkfs, sizeof(mkfs), "mkfs.%s", fs_type);
>
> if (fs_opts) {
> diff --git a/lib/tst_supported_fs_types.c b/lib/tst_supported_fs_types.c
> index 0c8c8dc50..d3020fc48 100644
> --- a/lib/tst_supported_fs_types.c
> +++ b/lib/tst_supported_fs_types.c
> @@ -30,6 +30,7 @@ static const char *const fs_type_whitelist[] = {
> "vfat",
> "exfat",
> "ntfs",
> + "ntfs3",
> "tmpfs",
> NULL
> };
> @@ -51,6 +52,9 @@ static int has_mkfs(const char *fs_type)
> return 1;
> }
>
> + if (!strcmp(fs_type, "ntfs3"))
> + fs_type = "ntfs";
> +
> sprintf(buf, "mkfs.%s >/dev/null 2>&1", fs_type);
>
> ret = tst_system(buf);
> @@ -87,6 +91,9 @@ static enum tst_fs_impl has_kernel_support(const char *fs_type)
> char template[PATH_MAX];
> int ret;
>
> + if (!strcmp(fs_type, "ntfs"))
> + goto check_fuse;
> +
> snprintf(template, sizeof(template), "%s/mountXXXXXX", tmpdir);
> if (!mkdtemp(template))
> tst_brk(TBROK | TERRNO, "mkdtemp(%s) failed", template);
> @@ -102,6 +109,7 @@ static enum tst_fs_impl has_kernel_support(const char *fs_type)
>
> SAFE_RMDIR(template);
>
> +check_fuse:
> if (tst_fs_in_skiplist(fs_type, fs_type_fuse_blacklist)) {
> tst_res(TINFO, "Skipping %s because of FUSE blacklist", fs_type);
> return TST_FS_UNSUPPORTED;
>
Hi Cyril,
Tested your proposed changes, all scenarios pass:
1. Normal run with ntfs3 loaded — ntfs correctly detected as FUSE-based
and skipped, ntfs3 runs via kernel driver and passes (6/6):
tst_supported_fs_types.c: TINFO: FUSE does support ntfs
tst_supported_fs_types.c: TINFO: Skipping FUSE based ntfs as requested by the test
tst_supported_fs_types.c: TINFO: Kernel supports ntfs3
tst_supported_fs_types.c: TINFO: mkfs.ntfs does exist
...
tst_test.c: TINFO: === Testing on ntfs3 ===
file_attr05.c: TPASS: file_setattr(...) : EOPNOTSUPP (95)
2. Normal run with ntfs3 not loaded — same result, kernel autoloads
ntfs3 on mount (6/6).
3. Force ntfs3 — formats with mkfs.ntfs, mounts as ntfs3, passes.
4. Force ntfs — mounts via FUSE, returns EINVAL as expected, confirming
the "fuse" skip is what protects the normal run.
Are you planning to send this as a formal patch? Happy to defer to
you since it's a cleaner fix at the library level, but want to make
sure it doesn't fall through the cracks.
-matt
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [LTP] [PATCH] syscalls: file_attr05: skip ntfs filesystem
2026-04-09 22:55 ` Matt Ochs via ltp
@ 2026-04-16 8:50 ` Petr Vorel
0 siblings, 0 replies; 8+ messages in thread
From: Petr Vorel @ 2026-04-16 8:50 UTC (permalink / raw)
To: Matt Ochs; +Cc: ltp@lists.linux.it
Hi Matt
> Hi Petr,
> > On Apr 9, 2026, at 02:53, Petr Vorel <pvorel@suse.cz> wrote:
> > Hi Matthew,
> >> LTP mounts ntfs via ntfs-3g (FUSE) rather than the kernel ntfs3
> >> driver. ntfs-3g's ntfs_ioctl() returns EINVAL for any unhandled
> >> ioctl, including FS_IOC_FSSETXATTR, so file_setattr() returns
> >> EINVAL instead of the expected EOPNOTSUPP.
> >> Add "ntfs" to skip_filesystems for the same reason "fuse" is
> >> already skipped.
> > Reviewed-by: Petr Vorel <pvorel@suse.cz>
> > Good catch, thanks!
> I appreciate the review!
You're welcome, thanks for your contributions!
> > We did not notice, because we have ntfs3 blacklisted in openSUSE Tumbleweed:
...
> >> diff --git a/testcases/kernel/syscalls/file_attr/file_attr05.c b/testcases/kernel/syscalls/file_attr/file_attr05.c
> >> index 6c1471da33e7..85b6cafc5f17 100644
> >> --- a/testcases/kernel/syscalls/file_attr/file_attr05.c
> >> +++ b/testcases/kernel/syscalls/file_attr/file_attr05.c
> >> @@ -49,6 +49,7 @@ static struct tst_test test = {
> >> .skip_filesystems = (const char *const []) {
> >> "xfs",
> >> "fuse", /* EINVAL is raised before EOPNOTSUPP */
> >> + "ntfs", /* mounted via ntfs-3g (FUSE), returns EINVAL */
> > For me it'd work to replace "fuse" with "ntfs" (i.e. remove "fuse").
> > Does it work for you as well, or you need to have blacklisted both?
> Regarding replacing "fuse" with "ntfs": on Ubuntu, ntfs3 is available
> as a kernel module, so the detection reports "Kernel supports ntfs”
> and the FUSE skip path never fires — meaning "fuse" alone doesn’t
> catch it. Removing "fuse" would also drop coverage of other
> FUSE-based filesystems, so I'd prefer to keep both entries.
I actually think that other fuse implementations work, fuse was probably added
to fix ntfs. Or am I wrong? But that can be solved as a separate effort, I don't
want to block what you plan to fix.
Kind regards,
Petr
> -matt
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2026-04-16 8:51 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-04-08 17:44 [LTP] [PATCH] syscalls: file_attr05: skip ntfs filesystem Matthew R. Ochs via ltp
2026-04-09 7:53 ` Petr Vorel
2026-04-09 22:55 ` Matt Ochs via ltp
2026-04-16 8:50 ` Petr Vorel
2026-04-09 8:27 ` Cyril Hrubis
2026-04-09 22:51 ` Matt Ochs via ltp
2026-04-10 10:04 ` Cyril Hrubis
2026-04-10 16:42 ` Matt Ochs via ltp
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.