I have applied the patchset and run simple test against dCache nfs server: root@anahit xattr-test]# df -h . Filesystem Size Used Avail Use% Mounted on ani:/ 213G 179G 35G 84% /mnt [root@anahit xattr-test]# [root@anahit xattr-test]# touch file.txt [root@anahit xattr-test]# attr -l file.txt [root@anahit xattr-test]# attr -s key1 -V value1 file.txt Attribute "key1" set to a 6 byte value for file.txt: value1 [root@anahit xattr-test]# attr -s key2 -V value2 file.txt Attribute "key2" set to a 6 byte value for file.txt: value2 [root@anahit xattr-test]# attr -l file.txt Attribute "user.key1" has a 6 byte value for file.txt Attribute "user.key2" has a 6 byte value for file.txt [root@anahit xattr-test]# attr -g key1 file.txt Attribute "key1" had a 6 byte value for file.txt: value1 [root@anahit xattr-test]# attr -g key2 file.txt Attribute "key2" had a 6 byte value for file.txt: value2 [root@anahit xattr-test]# getfattr -n user.key1 file.txt # file: file.txt user.key1="value1" [root@anahit xattr-test]# getfattr -n user.key2 file.txt # file: file.txt user.key2="value2" [root@anahit xattr-test]# attr -r key1 file.txt [root@anahit xattr-test]# attr -r key2 file.txt [root@anahit xattr-test]# attr -l file.txt [root@anahit xattr-test]# At lease a dirrerent implementation in addition to linux server works as expected. Tested-by: "Tigran Mkrtchyan" <tigran.mkrtchyan@xxxxxxx> Tigran. ----- Original Message ----- > From: "Frank van der Linden" <fllinden@xxxxxxxxxx> > To: "Trond Myklebust" <trond.myklebust@xxxxxxxxxxxxxxx>, "Anna Schumaker" <anna.schumaker@xxxxxxxxxx>, "linux-nfs" > <linux-nfs@xxxxxxxxxxxxxxx> > Cc: "Frank van der Linden" <fllinden@xxxxxxxxxx> > Sent: Wednesday, March 11, 2020 8:56:00 PM > Subject: [PATCH 00/13] client side user xattr (RFC8276) support > This patchset implements the client side for NFS user extended attributes, > as defined in RFC8726. > > This was originally posted as an RFC in: > > https://patchwork.kernel.org/cover/11143565/ > > Patch 1 is shared with the server side patch, posted > separately. > > Most comments in there still apply, except that: > > 1. Client side caching is now included in this patch set. > 2. As per the discussion, user extended attributes are enabled if > the client and server support them (e.g. they support 4.2 and > advertise the user extended attribute FATTR). There are no longer > options to switch them off on either the client or the server. > 3. The code is no longer conditioned on a config option. > 4. The number of patches has been reduced somewhat by merging > smaller, related ones. > > The client side caching is implemented through a per-inode hash table, > which is allocated on demand. See fs/nfs/nfs42xattr.c for details. > > This has been tested as follows: > > * Linux client and server: > * Test all corner cases (XATTR_SIZE_*) > * Test all failure cases (no xattr, setxattr with different or > invalid flags, etc). > * Verify the content of xattrs across several operations. > * Use KASAN and KMEMLEAK for a longer mix of testruns to verify > that there were no leaks (after unmounting the filesystem). > * Stress tested caching, trying to run the client out of memory. > > * Tested against the FreeBSD-current implementation as well, which works > (after I fixed 2 bugs in that implementation, which I'm sending out to > them too). > > * Not tested: RDMA (I couldn't get a setup going). > > Frank van der Linden (13): > nfs,nfsd: NFSv4.2 extended attribute protocol definitions > nfs: add client side only definitions for user xattrs > NFSv4.2: query the server for extended attribute support > NFSv4.2: define limits and sizes for user xattr handling > NFSv4.2: add client side XDR handling for extended attributes > nfs: define nfs_access_get_cached function > NFSv4.2: query the extended attribute access bits > nfs: modify update_changeattr to deal with regular files > nfs: define and use the NFS_INO_INVALID_XATTR flag > nfs: make the buf_to_pages_noslab function available to the nfs code > NFSv4.2: add the extended attribute proc functions. > NFSv4.2: hook in the user extended attribute handlers > NFSv4.2: add client side xattr caching. > > fs/nfs/Makefile | 1 + > fs/nfs/client.c | 19 +- > fs/nfs/dir.c | 24 +- > fs/nfs/inode.c | 16 +- > fs/nfs/internal.h | 28 ++ > fs/nfs/nfs42.h | 24 + > fs/nfs/nfs42proc.c | 248 ++++++++++ > fs/nfs/nfs42xattr.c | 1083 +++++++++++++++++++++++++++++++++++++++++++ > fs/nfs/nfs42xdr.c | 442 ++++++++++++++++++ > fs/nfs/nfs4_fs.h | 5 + > fs/nfs/nfs4client.c | 31 ++ > fs/nfs/nfs4proc.c | 248 ++++++++-- > fs/nfs/nfs4super.c | 10 + > fs/nfs/nfs4xdr.c | 29 ++ > fs/nfs/nfstrace.h | 3 +- > include/linux/nfs4.h | 25 + > include/linux/nfs_fs.h | 12 + > include/linux/nfs_fs_sb.h | 6 + > include/linux/nfs_xdr.h | 60 ++- > include/uapi/linux/nfs4.h | 3 + > include/uapi/linux/nfs_fs.h | 1 + > 21 files changed, 2276 insertions(+), 42 deletions(-) > create mode 100644 fs/nfs/nfs42xattr.c > > -- > 2.16.6