NFS: Clean up NFSv4.2 xattrs
authorTrond Myklebust <trond.myklebust@hammerspace.com>
Wed, 23 Feb 2022 20:43:26 +0000 (15:43 -0500)
committerTrond Myklebust <trond.myklebust@hammerspace.com>
Fri, 25 Feb 2022 23:50:13 +0000 (18:50 -0500)
Add a helper for the xattr mask so that we can get rid of the inlined
ifdefs.

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
fs/nfs/dir.c
fs/nfs/internal.h
fs/nfs/nfs4proc.c

index 8b190c8..ebddc73 100644 (file)
@@ -2995,11 +2995,8 @@ static int nfs_do_access(struct inode *inode, const struct cred *cred, int mask)
        /*
         * Determine which access bits we want to ask for...
         */
-       cache.mask = NFS_ACCESS_READ | NFS_ACCESS_MODIFY | NFS_ACCESS_EXTEND;
-       if (nfs_server_capable(inode, NFS_CAP_XATTR)) {
-               cache.mask |= NFS_ACCESS_XAREAD | NFS_ACCESS_XAWRITE |
-                   NFS_ACCESS_XALIST;
-       }
+       cache.mask = NFS_ACCESS_READ | NFS_ACCESS_MODIFY | NFS_ACCESS_EXTEND |
+                    nfs_access_xattr_mask(NFS_SERVER(inode));
        if (S_ISDIR(inode->i_mode))
                cache.mask |= NFS_ACCESS_DELETE | NFS_ACCESS_LOOKUP;
        else
index 2de7c56..b5398af 100644 (file)
@@ -388,6 +388,20 @@ int nfs_mknod(struct user_namespace *, struct inode *, struct dentry *, umode_t,
 int nfs_rename(struct user_namespace *, struct inode *, struct dentry *,
               struct inode *, struct dentry *, unsigned int);
 
+#ifdef CONFIG_NFS_V4_2
+static inline __u32 nfs_access_xattr_mask(const struct nfs_server *server)
+{
+       if (!(server->caps & NFS_CAP_XATTR))
+               return 0;
+       return NFS4_ACCESS_XAREAD | NFS4_ACCESS_XAWRITE | NFS4_ACCESS_XALIST;
+}
+#else
+static inline __u32 nfs_access_xattr_mask(const struct nfs_server *server)
+{
+       return 0;
+}
+#endif
+
 /* file.c */
 int nfs_file_fsync(struct file *file, loff_t start, loff_t end, int datasync);
 loff_t nfs_file_llseek(struct file *, loff_t, int);
index 73a9b6d..8b87535 100644 (file)
@@ -1392,13 +1392,8 @@ static struct nfs4_opendata *nfs4_opendata_alloc(struct dentry *dentry,
        case NFS4_OPEN_CLAIM_FH:
                p->o_arg.access = NFS4_ACCESS_READ | NFS4_ACCESS_MODIFY |
                                  NFS4_ACCESS_EXTEND | NFS4_ACCESS_DELETE |
-                                 NFS4_ACCESS_EXECUTE;
-#ifdef CONFIG_NFS_V4_2
-               if (!(server->caps & NFS_CAP_XATTR))
-                       break;
-               p->o_arg.access |= NFS4_ACCESS_XAREAD | NFS4_ACCESS_XAWRITE |
-                                  NFS4_ACCESS_XALIST;
-#endif
+                                 NFS4_ACCESS_EXECUTE |
+                                 nfs_access_xattr_mask(server);
        }
        p->o_arg.clientid = server->nfs_client->cl_clientid;
        p->o_arg.id.create_time = ktime_to_ns(sp->so_seqid.create_time);