Re: [viro-vfs:work.xattr2] [fs/xattr] 64d47e878a: xfstests.xfs.046.fail

Al Viro <[email protected]>
Newsgroups gmane.linux.kernel.cross-arch,gmane.linux.file-systems,gmane.linux.ports.alpha,gmane.linux.ports.arm.kernel,gmane.linux.kernel,gmane.linux.ports.mips,gmane.linux.ports.parisc,gmane.linux.ports.ppc64.devel,gmane.linux.ports.sh.devel,gmane.linux.ports.sparc,gmane.linux.kernel.api
Message-ID <20241006145904.GE4017910@ZenIV>
On Sun, Oct 06, 2024 at 10:20:57PM +0800, kernel test robot wrote:

> xfs/046       - output mismatch (see /lkp/benchmarks/xfstests/results//xfs/046.out.bad)
>     --- tests/xfs/046.out	2024-09-30 21:13:44.000000000 +0000
>     +++ /lkp/benchmarks/xfstests/results//xfs/046.out.bad	2024-10-06 05:31:50.379495110 +0000
>     @@ -34,4 +34,8 @@
>      xfsrestore: restore complete: SECS seconds elapsed
>      xfsrestore: Restore Status: SUCCESS
>      Comparing listing of dump directory with restore directory
>     +ls: /fs/scratch/dumpdir/sub/a-link: No such file or directory
>     +ls: /fs/scratch/dumpdir/sub/b-link: No such file or directory
>     +ls: /fs/scratch/restoredir/dumpdir/sub/a-link: No such file or directory
>     +ls: /fs/scratch/restoredir/dumpdir/sub/b-link: No such file or directory
>     ...
>     (Run 'diff -u /lkp/benchmarks/xfstests/tests/xfs/046.out /lkp/benchmarks/xfstests/results//xfs/046.out.bad'  to see the entire diff)
> Ran: xfs/046
> Failures: xfs/046
> Failed 1 of 1 tests

*stares*

D'oh...  Inverted sense for AT_SYMLINK_NOFOLLOW => LOOKUP_FLAGS...

Try this:

diff --git a/fs/xattr.c b/fs/xattr.c
index 0b506b6565b7..b96cca3f4bf8 100644
--- a/fs/xattr.c
+++ b/fs/xattr.c
@@ -721,7 +721,7 @@ static int path_setxattrat(int dfd, const char __user *pathname,
 	if ((at_flags & ~(AT_SYMLINK_NOFOLLOW | AT_EMPTY_PATH)) != 0)
 		return -EINVAL;
 
-	if (at_flags & AT_SYMLINK_NOFOLLOW)
+	if (!(at_flags & AT_SYMLINK_NOFOLLOW))
 		lookup_flags = LOOKUP_FOLLOW;
 
 	error = setxattr_copy(name, &ctx);
@@ -880,7 +880,7 @@ static ssize_t path_getxattrat(int dfd, const char __user *pathname,
 		return file_getxattr(fd_file(f), &ctx);
 	} else {
 		int lookup_flags = 0;
-		if (at_flags & AT_SYMLINK_NOFOLLOW)
+		if (!(at_flags & AT_SYMLINK_NOFOLLOW))
 			lookup_flags = LOOKUP_FOLLOW;
 		return filename_getxattr(dfd, filename, lookup_flags, &ctx);
 	}
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.