mirror of
https://github.com/torvalds/linux.git
synced 2024-11-22 20:22:09 +00:00
NFS: Remove the label from the nfs4_lookup_res struct
And usethe fattr's label field instead. I also adjust function calls to remove labels along the way. Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com> Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
This commit is contained in:
parent
aa7ca3b2de
commit
9558a007db
34
fs/nfs/dir.c
34
fs/nfs/dir.c
@ -1494,19 +1494,17 @@ nfs_lookup_revalidate_dentry(struct inode *dir, struct dentry *dentry,
|
||||
{
|
||||
struct nfs_fh *fhandle;
|
||||
struct nfs_fattr *fattr;
|
||||
struct nfs4_label *label;
|
||||
unsigned long dir_verifier;
|
||||
int ret;
|
||||
|
||||
ret = -ENOMEM;
|
||||
fhandle = nfs_alloc_fhandle();
|
||||
fattr = nfs_alloc_fattr();
|
||||
label = nfs4_label_alloc(NFS_SERVER(inode), GFP_KERNEL);
|
||||
if (fhandle == NULL || fattr == NULL || IS_ERR(label))
|
||||
fattr = nfs_alloc_fattr_with_label(NFS_SERVER(inode));
|
||||
if (fhandle == NULL || fattr == NULL)
|
||||
goto out;
|
||||
|
||||
dir_verifier = nfs_save_change_attribute(dir);
|
||||
ret = NFS_PROTO(dir)->lookup(dir, dentry, fhandle, fattr, label);
|
||||
ret = NFS_PROTO(dir)->lookup(dir, dentry, fhandle, fattr);
|
||||
if (ret < 0) {
|
||||
switch (ret) {
|
||||
case -ESTALE:
|
||||
@ -1525,7 +1523,7 @@ nfs_lookup_revalidate_dentry(struct inode *dir, struct dentry *dentry,
|
||||
if (nfs_refresh_inode(inode, fattr) < 0)
|
||||
goto out;
|
||||
|
||||
nfs_setsecurity(inode, fattr, label);
|
||||
nfs_setsecurity(inode, fattr, fattr->label);
|
||||
nfs_set_verifier(dentry, dir_verifier);
|
||||
|
||||
/* set a readdirplus hint that we had a cache miss */
|
||||
@ -1534,7 +1532,6 @@ nfs_lookup_revalidate_dentry(struct inode *dir, struct dentry *dentry,
|
||||
out:
|
||||
nfs_free_fattr(fattr);
|
||||
nfs_free_fhandle(fhandle);
|
||||
nfs4_label_free(label);
|
||||
|
||||
/*
|
||||
* If the lookup failed despite the dentry change attribute being
|
||||
@ -1754,7 +1751,6 @@ struct dentry *nfs_lookup(struct inode *dir, struct dentry * dentry, unsigned in
|
||||
struct inode *inode = NULL;
|
||||
struct nfs_fh *fhandle = NULL;
|
||||
struct nfs_fattr *fattr = NULL;
|
||||
struct nfs4_label *label = NULL;
|
||||
unsigned long dir_verifier;
|
||||
int error;
|
||||
|
||||
@ -1773,27 +1769,23 @@ struct dentry *nfs_lookup(struct inode *dir, struct dentry * dentry, unsigned in
|
||||
|
||||
res = ERR_PTR(-ENOMEM);
|
||||
fhandle = nfs_alloc_fhandle();
|
||||
fattr = nfs_alloc_fattr();
|
||||
fattr = nfs_alloc_fattr_with_label(NFS_SERVER(dir));
|
||||
if (fhandle == NULL || fattr == NULL)
|
||||
goto out;
|
||||
|
||||
label = nfs4_label_alloc(NFS_SERVER(dir), GFP_NOWAIT);
|
||||
if (IS_ERR(label))
|
||||
goto out;
|
||||
|
||||
dir_verifier = nfs_save_change_attribute(dir);
|
||||
trace_nfs_lookup_enter(dir, dentry, flags);
|
||||
error = NFS_PROTO(dir)->lookup(dir, dentry, fhandle, fattr, label);
|
||||
error = NFS_PROTO(dir)->lookup(dir, dentry, fhandle, fattr);
|
||||
if (error == -ENOENT)
|
||||
goto no_entry;
|
||||
if (error < 0) {
|
||||
res = ERR_PTR(error);
|
||||
goto out_label;
|
||||
goto out;
|
||||
}
|
||||
inode = nfs_fhget(dentry->d_sb, fhandle, fattr, label);
|
||||
inode = nfs_fhget(dentry->d_sb, fhandle, fattr, fattr->label);
|
||||
res = ERR_CAST(inode);
|
||||
if (IS_ERR(res))
|
||||
goto out_label;
|
||||
goto out;
|
||||
|
||||
/* Notify readdir to use READDIRPLUS */
|
||||
nfs_force_use_readdirplus(dir);
|
||||
@ -1802,14 +1794,12 @@ no_entry:
|
||||
res = d_splice_alias(inode, dentry);
|
||||
if (res != NULL) {
|
||||
if (IS_ERR(res))
|
||||
goto out_label;
|
||||
goto out;
|
||||
dentry = res;
|
||||
}
|
||||
nfs_set_verifier(dentry, dir_verifier);
|
||||
out_label:
|
||||
trace_nfs_lookup_exit(dir, dentry, flags, PTR_ERR_OR_ZERO(res));
|
||||
nfs4_label_free(label);
|
||||
out:
|
||||
trace_nfs_lookup_exit(dir, dentry, flags, PTR_ERR_OR_ZERO(res));
|
||||
nfs_free_fattr(fattr);
|
||||
nfs_free_fhandle(fhandle);
|
||||
return res;
|
||||
@ -2058,7 +2048,7 @@ nfs_add_or_obtain(struct dentry *dentry, struct nfs_fh *fhandle,
|
||||
d_drop(dentry);
|
||||
|
||||
if (fhandle->size == 0) {
|
||||
error = NFS_PROTO(dir)->lookup(dir, dentry, fhandle, fattr, NULL);
|
||||
error = NFS_PROTO(dir)->lookup(dir, dentry, fhandle, fattr);
|
||||
if (error)
|
||||
goto out_error;
|
||||
}
|
||||
|
@ -308,8 +308,7 @@ int nfs_submount(struct fs_context *fc, struct nfs_server *server)
|
||||
|
||||
/* Look it up again to get its attributes */
|
||||
err = server->nfs_client->rpc_ops->lookup(d_inode(parent), dentry,
|
||||
ctx->mntfh, ctx->clone_data.fattr,
|
||||
NULL);
|
||||
ctx->mntfh, ctx->clone_data.fattr);
|
||||
dput(parent);
|
||||
if (err != 0)
|
||||
return err;
|
||||
|
@ -193,8 +193,7 @@ __nfs3_proc_lookup(struct inode *dir, const char *name, size_t len,
|
||||
|
||||
static int
|
||||
nfs3_proc_lookup(struct inode *dir, struct dentry *dentry,
|
||||
struct nfs_fh *fhandle, struct nfs_fattr *fattr,
|
||||
struct nfs4_label *label)
|
||||
struct nfs_fh *fhandle, struct nfs_fattr *fattr)
|
||||
{
|
||||
unsigned short task_flags = 0;
|
||||
|
||||
|
@ -4294,7 +4294,7 @@ nfs4_proc_setattr(struct dentry *dentry, struct nfs_fattr *fattr,
|
||||
|
||||
static int _nfs4_proc_lookup(struct rpc_clnt *clnt, struct inode *dir,
|
||||
struct dentry *dentry, struct nfs_fh *fhandle,
|
||||
struct nfs_fattr *fattr, struct nfs4_label *label)
|
||||
struct nfs_fattr *fattr)
|
||||
{
|
||||
struct nfs_server *server = NFS_SERVER(dir);
|
||||
int status;
|
||||
@ -4306,7 +4306,6 @@ static int _nfs4_proc_lookup(struct rpc_clnt *clnt, struct inode *dir,
|
||||
struct nfs4_lookup_res res = {
|
||||
.server = server,
|
||||
.fattr = fattr,
|
||||
.label = label,
|
||||
.fh = fhandle,
|
||||
};
|
||||
struct rpc_message msg = {
|
||||
@ -4323,7 +4322,7 @@ static int _nfs4_proc_lookup(struct rpc_clnt *clnt, struct inode *dir,
|
||||
if (nfs_lookup_is_soft_revalidate(dentry))
|
||||
task_flags |= RPC_TASK_TIMEOUT;
|
||||
|
||||
args.bitmask = nfs4_bitmask(server, label);
|
||||
args.bitmask = nfs4_bitmask(server, fattr->label);
|
||||
|
||||
nfs_fattr_init(fattr);
|
||||
|
||||
@ -4345,7 +4344,7 @@ static void nfs_fixup_secinfo_attributes(struct nfs_fattr *fattr)
|
||||
|
||||
static int nfs4_proc_lookup_common(struct rpc_clnt **clnt, struct inode *dir,
|
||||
struct dentry *dentry, struct nfs_fh *fhandle,
|
||||
struct nfs_fattr *fattr, struct nfs4_label *label)
|
||||
struct nfs_fattr *fattr)
|
||||
{
|
||||
struct nfs4_exception exception = {
|
||||
.interruptible = true,
|
||||
@ -4354,7 +4353,7 @@ static int nfs4_proc_lookup_common(struct rpc_clnt **clnt, struct inode *dir,
|
||||
const struct qstr *name = &dentry->d_name;
|
||||
int err;
|
||||
do {
|
||||
err = _nfs4_proc_lookup(client, dir, dentry, fhandle, fattr, label);
|
||||
err = _nfs4_proc_lookup(client, dir, dentry, fhandle, fattr);
|
||||
trace_nfs4_lookup(dir, name, err);
|
||||
switch (err) {
|
||||
case -NFS4ERR_BADNAME:
|
||||
@ -4390,13 +4389,12 @@ out:
|
||||
}
|
||||
|
||||
static int nfs4_proc_lookup(struct inode *dir, struct dentry *dentry,
|
||||
struct nfs_fh *fhandle, struct nfs_fattr *fattr,
|
||||
struct nfs4_label *label)
|
||||
struct nfs_fh *fhandle, struct nfs_fattr *fattr)
|
||||
{
|
||||
int status;
|
||||
struct rpc_clnt *client = NFS_CLIENT(dir);
|
||||
|
||||
status = nfs4_proc_lookup_common(&client, dir, dentry, fhandle, fattr, label);
|
||||
status = nfs4_proc_lookup_common(&client, dir, dentry, fhandle, fattr);
|
||||
if (client != NFS_CLIENT(dir)) {
|
||||
rpc_shutdown_client(client);
|
||||
nfs_fixup_secinfo_attributes(fattr);
|
||||
@ -4411,7 +4409,7 @@ nfs4_proc_lookup_mountpoint(struct inode *dir, struct dentry *dentry,
|
||||
struct rpc_clnt *client = NFS_CLIENT(dir);
|
||||
int status;
|
||||
|
||||
status = nfs4_proc_lookup_common(&client, dir, dentry, fhandle, fattr, NULL);
|
||||
status = nfs4_proc_lookup_common(&client, dir, dentry, fhandle, fattr);
|
||||
if (status < 0)
|
||||
return ERR_PTR(status);
|
||||
return (client == NFS_CLIENT(dir)) ? rpc_clone_client(client) : client;
|
||||
|
@ -6171,7 +6171,7 @@ static int nfs4_xdr_dec_lookup(struct rpc_rqst *rqstp, struct xdr_stream *xdr,
|
||||
status = decode_getfh(xdr, res->fh);
|
||||
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;
|
||||
}
|
||||
@ -6229,7 +6229,7 @@ static int nfs4_xdr_dec_lookup_root(struct rpc_rqst *rqstp,
|
||||
status = decode_getfh(xdr, res->fh);
|
||||
if (status == 0)
|
||||
status = decode_getfattr_label(xdr, res->fattr,
|
||||
res->label, res->server);
|
||||
res->fattr->label, res->server);
|
||||
out:
|
||||
return status;
|
||||
}
|
||||
|
@ -154,8 +154,7 @@ nfs_proc_setattr(struct dentry *dentry, struct nfs_fattr *fattr,
|
||||
|
||||
static int
|
||||
nfs_proc_lookup(struct inode *dir, struct dentry *dentry,
|
||||
struct nfs_fh *fhandle, struct nfs_fattr *fattr,
|
||||
struct nfs4_label *label)
|
||||
struct nfs_fh *fhandle, struct nfs_fattr *fattr)
|
||||
{
|
||||
struct nfs_diropargs arg = {
|
||||
.fh = NFS_FH(dir),
|
||||
|
@ -1095,7 +1095,6 @@ struct nfs4_lookup_res {
|
||||
const struct nfs_server * server;
|
||||
struct nfs_fattr * fattr;
|
||||
struct nfs_fh * fh;
|
||||
struct nfs4_label *label;
|
||||
};
|
||||
|
||||
struct nfs4_lookupp_arg {
|
||||
@ -1740,8 +1739,7 @@ struct nfs_rpc_ops {
|
||||
int (*setattr) (struct dentry *, struct nfs_fattr *,
|
||||
struct iattr *);
|
||||
int (*lookup) (struct inode *, struct dentry *,
|
||||
struct nfs_fh *, struct nfs_fattr *,
|
||||
struct nfs4_label *);
|
||||
struct nfs_fh *, struct nfs_fattr *);
|
||||
int (*lookupp) (struct inode *, struct nfs_fh *,
|
||||
struct nfs_fattr *, struct nfs4_label *);
|
||||
int (*access) (struct inode *, struct nfs_access_entry *);
|
||||
|
Loading…
Reference in New Issue
Block a user