NFS: Create a new nfs_alloc_fattr_with_label() function
[ Upstream commit d755ad8dc7
]
For creating fattrs with the label field already allocated for us. I
also update nfs_free_fattr() to free the label in the end.
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
00fa80189c
commit
29b51ae02d
@ -80,18 +80,15 @@ int nfs_get_root(struct super_block *s, struct fs_context *fc)
|
||||
goto out;
|
||||
|
||||
/* get the actual root for this mount */
|
||||
fsinfo.fattr = nfs_alloc_fattr();
|
||||
fsinfo.fattr = nfs_alloc_fattr_with_label(server);
|
||||
if (fsinfo.fattr == NULL)
|
||||
goto out_name;
|
||||
|
||||
fsinfo.fattr->label = nfs4_label_alloc(server, GFP_KERNEL);
|
||||
if (IS_ERR(fsinfo.fattr->label))
|
||||
goto out_fattr;
|
||||
error = server->nfs_client->rpc_ops->getroot(server, ctx->mntfh, &fsinfo);
|
||||
if (error < 0) {
|
||||
dprintk("nfs_get_root: getattr error = %d\n", -error);
|
||||
nfs_errorf(fc, "NFS: Couldn't getattr on root");
|
||||
goto out_label;
|
||||
goto out_fattr;
|
||||
}
|
||||
|
||||
inode = nfs_fhget(s, ctx->mntfh, fsinfo.fattr, NULL);
|
||||
@ -99,12 +96,12 @@ int nfs_get_root(struct super_block *s, struct fs_context *fc)
|
||||
dprintk("nfs_get_root: get root inode failed\n");
|
||||
error = PTR_ERR(inode);
|
||||
nfs_errorf(fc, "NFS: Couldn't get root inode");
|
||||
goto out_label;
|
||||
goto out_fattr;
|
||||
}
|
||||
|
||||
error = nfs_superblock_set_dummy_root(s, inode);
|
||||
if (error != 0)
|
||||
goto out_label;
|
||||
goto out_fattr;
|
||||
|
||||
/* root dentries normally start off anonymous and get spliced in later
|
||||
* if the dentry tree reaches them; however if the dentry already
|
||||
@ -115,7 +112,7 @@ int nfs_get_root(struct super_block *s, struct fs_context *fc)
|
||||
dprintk("nfs_get_root: get root dentry failed\n");
|
||||
error = PTR_ERR(root);
|
||||
nfs_errorf(fc, "NFS: Couldn't get root dentry");
|
||||
goto out_label;
|
||||
goto out_fattr;
|
||||
}
|
||||
|
||||
security_d_instantiate(root, inode);
|
||||
@ -154,8 +151,6 @@ int nfs_get_root(struct super_block *s, struct fs_context *fc)
|
||||
nfs_setsecurity(inode, fsinfo.fattr, fsinfo.fattr->label);
|
||||
error = 0;
|
||||
|
||||
out_label:
|
||||
nfs4_label_free(fsinfo.fattr->label);
|
||||
out_fattr:
|
||||
nfs_free_fattr(fsinfo.fattr);
|
||||
out_name:
|
||||
@ -165,5 +160,5 @@ out:
|
||||
error_splat_root:
|
||||
dput(fc->root);
|
||||
fc->root = NULL;
|
||||
goto out_label;
|
||||
goto out_fattr;
|
||||
}
|
||||
|
Reference in New Issue
Block a user