NFS: Remove the nfs4_label from the nfs4_getattr_res
authorAnna Schumaker <Anna.Schumaker@Netapp.com>
Fri, 22 Oct 2021 17:11:07 +0000 (13:11 -0400)
committerTrond Myklebust <trond.myklebust@hammerspace.com>
Fri, 5 Nov 2021 18:54:39 +0000 (14:54 -0400)
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
fs/nfs/client.c
fs/nfs/dir.c
fs/nfs/export.c
fs/nfs/inode.c
fs/nfs/nfs3proc.c
fs/nfs/nfs4_fs.h
fs/nfs/nfs4file.c
fs/nfs/nfs4proc.c
fs/nfs/nfs4xdr.c
fs/nfs/proc.c
include/linux/nfs_xdr.h

index 960b9d87648e031fa3fc4a16c38e6591ea894e63..1e4dc1ab9312cd31ddf6f6cecb9a3e1d2df2b358 100644 (file)
@@ -1048,7 +1048,7 @@ struct nfs_server *nfs_create_server(struct fs_context *fc)
 
        if (!(fattr->valid & NFS_ATTR_FATTR)) {
                error = ctx->nfs_mod->rpc_ops->getattr(server, ctx->mntfh,
-                                                      fattr, NULL, NULL);
+                                                      fattr, NULL);
                if (error < 0) {
                        dprintk("nfs_create_server: getattr error = %d\n", -error);
                        goto error;
index 8a327971d4858dc0424f2ec09bdd59b091b14cb0..aa95a898ad0fec753254bee76cd6cfcdb1ba833b 100644 (file)
@@ -2056,7 +2056,7 @@ nfs_add_or_obtain(struct dentry *dentry, struct nfs_fh *fhandle,
        if (!(fattr->valid & NFS_ATTR_FATTR)) {
                struct nfs_server *server = NFS_SB(dentry->d_sb);
                error = server->nfs_client->rpc_ops->getattr(server, fhandle,
-                               fattr, NULL, NULL);
+                               fattr, NULL);
                if (error < 0)
                        goto out_error;
        }
index 895b404888dde90e445c61d70f859390d90c4134..a0462f7e7e3538698d94e94738198229aa75d7b9 100644 (file)
@@ -64,7 +64,6 @@ static struct dentry *
 nfs_fh_to_dentry(struct super_block *sb, struct fid *fid,
                 int fh_len, int fh_type)
 {
-       struct nfs4_label *label = NULL;
        struct nfs_fattr *fattr = NULL;
        struct nfs_fh *server_fh = nfs_exp_embedfh(fid->raw);
        size_t fh_size = offsetof(struct nfs_fh, data) + server_fh->size;
@@ -79,7 +78,7 @@ nfs_fh_to_dentry(struct super_block *sb, struct fid *fid,
        if (fh_len < len || fh_type != len)
                return NULL;
 
-       fattr = nfs_alloc_fattr();
+       fattr = nfs_alloc_fattr_with_label(NFS_SB(sb));
        if (fattr == NULL) {
                dentry = ERR_PTR(-ENOMEM);
                goto out;
@@ -95,28 +94,19 @@ nfs_fh_to_dentry(struct super_block *sb, struct fid *fid,
        if (inode)
                goto out_found;
 
-       label = nfs4_label_alloc(NFS_SB(sb), GFP_KERNEL);
-       if (IS_ERR(label)) {
-               dentry = ERR_CAST(label);
-               goto out_free_fattr;
-       }
-
        rpc_ops = NFS_SB(sb)->nfs_client->rpc_ops;
-       ret = rpc_ops->getattr(NFS_SB(sb), server_fh, fattr, label, NULL);
+       ret = rpc_ops->getattr(NFS_SB(sb), server_fh, fattr, NULL);
        if (ret) {
                dprintk("%s: getattr failed %d\n", __func__, ret);
                trace_nfs_fh_to_dentry(sb, server_fh, fattr->fileid, ret);
                dentry = ERR_PTR(ret);
-               goto out_free_label;
+               goto out_free_fattr;
        }
 
-       inode = nfs_fhget(sb, server_fh, fattr, label);
+       inode = nfs_fhget(sb, server_fh, fattr, fattr->label);
 
 out_found:
        dentry = d_obtain_alias(inode);
-
-out_free_label:
-       nfs4_label_free(label);
 out_free_fattr:
        nfs_free_fattr(fattr);
 out:
index 84c7efa2ea87402ff1a33a04c8f42286aeef8661..7d9dca781956d91a4f8d38eb622cb436f96aeb30 100644 (file)
@@ -1194,7 +1194,6 @@ int
 __nfs_revalidate_inode(struct nfs_server *server, struct inode *inode)
 {
        int              status = -ESTALE;
-       struct nfs4_label *label = NULL;
        struct nfs_fattr *fattr = NULL;
        struct nfs_inode *nfsi = NFS_I(inode);
 
@@ -1216,20 +1215,13 @@ __nfs_revalidate_inode(struct nfs_server *server, struct inode *inode)
        }
 
        status = -ENOMEM;
-       fattr = nfs_alloc_fattr();
+       fattr = nfs_alloc_fattr_with_label(NFS_SERVER(inode));
        if (fattr == NULL)
                goto out;
 
        nfs_inc_stats(inode, NFSIOS_INODEREVALIDATE);
 
-       label = nfs4_label_alloc(NFS_SERVER(inode), GFP_KERNEL);
-       if (IS_ERR(label)) {
-               status = PTR_ERR(label);
-               goto out;
-       }
-
-       status = NFS_PROTO(inode)->getattr(server, NFS_FH(inode), fattr,
-                       label, inode);
+       status = NFS_PROTO(inode)->getattr(server, NFS_FH(inode), fattr, inode);
        if (status != 0) {
                dfprintk(PAGECACHE, "nfs_revalidate_inode: (%s/%Lu) getattr failed, error=%d\n",
                         inode->i_sb->s_id,
@@ -1246,7 +1238,7 @@ __nfs_revalidate_inode(struct nfs_server *server, struct inode *inode)
                        else
                                nfs_zap_caches(inode);
                }
-               goto err_out;
+               goto out;
        }
 
        status = nfs_refresh_inode(inode, fattr);
@@ -1254,20 +1246,18 @@ __nfs_revalidate_inode(struct nfs_server *server, struct inode *inode)
                dfprintk(PAGECACHE, "nfs_revalidate_inode: (%s/%Lu) refresh failed, error=%d\n",
                         inode->i_sb->s_id,
                         (unsigned long long)NFS_FILEID(inode), status);
-               goto err_out;
+               goto out;
        }
 
        if (nfsi->cache_validity & NFS_INO_INVALID_ACL)
                nfs_zap_acl_cache(inode);
 
-       nfs_setsecurity(inode, fattr, label);
+       nfs_setsecurity(inode, fattr, fattr->label);
 
        dfprintk(PAGECACHE, "NFS: (%s/%Lu) revalidation complete\n",
                inode->i_sb->s_id,
                (unsigned long long)NFS_FILEID(inode));
 
-err_out:
-       nfs4_label_free(label);
 out:
        nfs_free_fattr(fattr);
        trace_nfs_revalidate_inode_exit(inode, status);
index 516f3340b2268ac396bf552f75d20ab748c8db60..7bae21a2ba05d1b61c667f92778182525887dfff 100644 (file)
@@ -100,8 +100,7 @@ nfs3_proc_get_root(struct nfs_server *server, struct nfs_fh *fhandle,
  */
 static int
 nfs3_proc_getattr(struct nfs_server *server, struct nfs_fh *fhandle,
-               struct nfs_fattr *fattr, struct nfs4_label *label,
-               struct inode *inode)
+               struct nfs_fattr *fattr, struct inode *inode)
 {
        struct rpc_message msg = {
                .rpc_proc       = &nfs3_procedures[NFS3PROC_GETATTR],
index b621e29e61878356453aaeb2bc5a8a403bae6b5b..ed5eaca6801ee4d831595893221b7e7b9d22e289 100644 (file)
@@ -316,8 +316,7 @@ extern int nfs4_set_rw_stateid(nfs4_stateid *stateid,
                const struct nfs_lock_context *l_ctx,
                fmode_t fmode);
 extern int nfs4_proc_getattr(struct nfs_server *server, struct nfs_fh *fhandle,
-                            struct nfs_fattr *fattr, struct nfs4_label *label,
-                            struct inode *inode);
+                            struct nfs_fattr *fattr, struct inode *inode);
 extern int update_open_stateid(struct nfs4_state *state,
                                const nfs4_stateid *open_stateid,
                                const nfs4_stateid *deleg_stateid,
index 92a1b992a141eee57635cd536f5195d9e0d588e3..e2451f66024c1a650b39f63d0b28d078116e1f00 100644 (file)
@@ -331,7 +331,7 @@ static struct file *__nfs42_ssc_open(struct vfsmount *ss_mnt,
        if (!fattr)
                return ERR_PTR(-ENOMEM);
 
-       status = nfs4_proc_getattr(server, src_fh, fattr, NULL, NULL);
+       status = nfs4_proc_getattr(server, src_fh, fattr, NULL);
        if (status < 0) {
                res = ERR_PTR(status);
                goto out;
index cb0613e0ef8f380e8bca10f8fce3131d8c48c5c7..f0262397faeca1c23c28aa327cde27371f504104 100644 (file)
@@ -93,7 +93,8 @@ struct nfs4_opendata;
 static int _nfs4_recover_proc_open(struct nfs4_opendata *data);
 static int nfs4_do_fsinfo(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *);
 static void nfs_fixup_referral_attributes(struct nfs_fattr *fattr);
-static int _nfs4_proc_getattr(struct nfs_server *server, struct nfs_fh *fhandle, struct nfs_fattr *fattr, struct nfs4_label *label, struct inode *inode);
+static int _nfs4_proc_getattr(struct nfs_server *server, struct nfs_fh *fhandle,
+                             struct nfs_fattr *fattr, struct inode *inode);
 static int nfs4_do_setattr(struct inode *inode, const struct cred *cred,
                            struct nfs_fattr *fattr, struct iattr *sattr,
                            struct nfs_open_context *ctx, struct nfs4_label *ilabel,
@@ -2707,8 +2708,7 @@ static int _nfs4_proc_open(struct nfs4_opendata *data,
        }
        if (!(o_res->f_attr->valid & NFS_ATTR_FATTR)) {
                nfs4_sequence_free_slot(&o_res->seq_res);
-               nfs4_proc_getattr(server, &o_res->fh, o_res->f_attr,
-                               o_res->f_attr->label, NULL);
+               nfs4_proc_getattr(server, &o_res->fh, o_res->f_attr, NULL);
        }
        return 0;
 }
@@ -4090,7 +4090,6 @@ static int nfs4_proc_get_root(struct nfs_server *server, struct nfs_fh *mntfh,
 {
        int error;
        struct nfs_fattr *fattr = info->fattr;
-       struct nfs4_label *label = fattr->label;
 
        error = nfs4_server_capabilities(server, mntfh);
        if (error < 0) {
@@ -4098,7 +4097,7 @@ static int nfs4_proc_get_root(struct nfs_server *server, struct nfs_fh *mntfh,
                return error;
        }
 
-       error = nfs4_proc_getattr(server, mntfh, fattr, label, NULL);
+       error = nfs4_proc_getattr(server, mntfh, fattr, NULL);
        if (error < 0) {
                dprintk("nfs4_get_root: getattr error = %d\n", -error);
                goto out;
@@ -4161,8 +4160,7 @@ out:
 }
 
 static int _nfs4_proc_getattr(struct nfs_server *server, struct nfs_fh *fhandle,
-                               struct nfs_fattr *fattr, struct nfs4_label *label,
-                               struct inode *inode)
+                               struct nfs_fattr *fattr, struct inode *inode)
 {
        __u32 bitmask[NFS4_BITMASK_SZ];
        struct nfs4_getattr_arg args = {
@@ -4171,7 +4169,6 @@ static int _nfs4_proc_getattr(struct nfs_server *server, struct nfs_fh *fhandle,
        };
        struct nfs4_getattr_res res = {
                .fattr = fattr,
-               .label = label,
                .server = server,
        };
        struct rpc_message msg = {
@@ -4188,7 +4185,7 @@ static int _nfs4_proc_getattr(struct nfs_server *server, struct nfs_fh *fhandle,
        if (inode && (server->flags & NFS_MOUNT_SOFTREVAL))
                task_flags |= RPC_TASK_TIMEOUT;
 
-       nfs4_bitmap_copy_adjust(bitmask, nfs4_bitmask(server, label), inode, 0);
+       nfs4_bitmap_copy_adjust(bitmask, nfs4_bitmask(server, fattr->label), inode, 0);
        nfs_fattr_init(fattr);
        nfs4_init_sequence(&args.seq_args, &res.seq_res, 0, 0);
        return nfs4_do_call_sync(server->client, server, &msg,
@@ -4196,15 +4193,14 @@ static int _nfs4_proc_getattr(struct nfs_server *server, struct nfs_fh *fhandle,
 }
 
 int nfs4_proc_getattr(struct nfs_server *server, struct nfs_fh *fhandle,
-                               struct nfs_fattr *fattr, struct nfs4_label *label,
-                               struct inode *inode)
+                               struct nfs_fattr *fattr, struct inode *inode)
 {
        struct nfs4_exception exception = {
                .interruptible = true,
        };
        int err;
        do {
-               err = _nfs4_proc_getattr(server, fhandle, fattr, label, inode);
+               err = _nfs4_proc_getattr(server, fhandle, fattr, inode);
                trace_nfs4_getattr(server, fhandle, fattr, err);
                err = nfs4_handle_exception(server, err,
                                &exception);
@@ -5972,17 +5968,18 @@ static int _nfs4_get_security_label(struct inode *inode, void *buf,
                                        size_t buflen)
 {
        struct nfs_server *server = NFS_SERVER(inode);
-       struct nfs_fattr fattr;
        struct nfs4_label label = {0, 0, buflen, buf};
 
        u32 bitmask[3] = { 0, 0, FATTR4_WORD2_SECURITY_LABEL };
+       struct nfs_fattr fattr = {
+               .label = &label,
+       };
        struct nfs4_getattr_arg arg = {
                .fh             = NFS_FH(inode),
                .bitmask        = bitmask,
        };
        struct nfs4_getattr_res res = {
                .fattr          = &fattr,
-               .label          = &label,
                .server         = server,
        };
        struct rpc_message msg = {
index 09bd1d121318e21326a6a9ca6140816804f5b785..d1b61b76bc82ce76e497337049e510733b6f4c9d 100644 (file)
@@ -6386,7 +6386,7 @@ static int nfs4_xdr_dec_getattr(struct rpc_rqst *rqstp, struct xdr_stream *xdr,
        status = decode_putfh(xdr);
        if (status)
                goto out;
-       status = decode_getfattr_label(xdr, res->fattr, res->label, res->server);
+       status = decode_getfattr_label(xdr, res->fattr, res->fattr->label, res->server);
 out:
        return status;
 }
index 98a8901ede2ea5a3abb51f749646ab917504d050..baee21c2c091a7296ecc7c399d6756bc8e7c3174 100644 (file)
@@ -100,8 +100,7 @@ nfs_proc_get_root(struct nfs_server *server, struct nfs_fh *fhandle,
  */
 static int
 nfs_proc_getattr(struct nfs_server *server, struct nfs_fh *fhandle,
-               struct nfs_fattr *fattr, struct nfs4_label *label,
-               struct inode *inode)
+               struct nfs_fattr *fattr, struct inode *inode)
 {
        struct rpc_message msg = {
                .rpc_proc       = &nfs_procedures[NFSPROC_GETATTR],
index cb28e01ea41edf050e0d17c3357a4c384e04d9b9..817f1bf5f187248b7f4d3ac3ff2c601d37efad93 100644 (file)
@@ -1063,7 +1063,6 @@ struct nfs4_getattr_res {
        struct nfs4_sequence_res        seq_res;
        const struct nfs_server *       server;
        struct nfs_fattr *              fattr;
-       struct nfs4_label               *label;
 };
 
 struct nfs4_link_arg {
@@ -1732,8 +1731,7 @@ struct nfs_rpc_ops {
        int     (*submount) (struct fs_context *, struct nfs_server *);
        int     (*try_get_tree) (struct fs_context *);
        int     (*getattr) (struct nfs_server *, struct nfs_fh *,
-                           struct nfs_fattr *, struct nfs4_label *,
-                           struct inode *);
+                           struct nfs_fattr *, struct inode *);
        int     (*setattr) (struct dentry *, struct nfs_fattr *,
                            struct iattr *);
        int     (*lookup)  (struct inode *, struct dentry *,