mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02: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
					
				
					 7 changed files with 25 additions and 42 deletions
				
			
		
							
								
								
									
										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 @@ struct dentry *nfs_lookup(struct inode *dir, struct dentry * dentry, unsigned in
 | 
			
		|||
	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 @@ static int nfs4_proc_lookup_common(struct rpc_clnt **clnt, struct inode *dir,
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
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 a new issue