diff options
Diffstat (limited to 'fs/nfs/callback_proc.c')
| -rw-r--r-- | fs/nfs/callback_proc.c | 26 | 
1 files changed, 13 insertions, 13 deletions
diff --git a/fs/nfs/callback_proc.c b/fs/nfs/callback_proc.c index fa515d5ea5ba..315967354954 100644 --- a/fs/nfs/callback_proc.c +++ b/fs/nfs/callback_proc.c @@ -66,7 +66,7 @@ __be32 nfs4_callback_getattr(void *argp, void *resp,  out_iput:  	rcu_read_unlock();  	trace_nfs4_cb_getattr(cps->clp, &args->fh, inode, -ntohl(res->status)); -	iput(inode); +	nfs_iput_and_deactive(inode);  out:  	dprintk("%s: exit with status = %d\n", __func__, ntohl(res->status));  	return res->status; @@ -108,7 +108,7 @@ __be32 nfs4_callback_recall(void *argp, void *resp,  	}  	trace_nfs4_cb_recall(cps->clp, &args->fh, inode,  			&args->stateid, -ntohl(res)); -	iput(inode); +	nfs_iput_and_deactive(inode);  out:  	dprintk("%s: exit with status = %d\n", __func__, ntohl(res));  	return res; @@ -686,20 +686,24 @@ __be32 nfs4_callback_offload(void *data, void *dummy,  {  	struct cb_offloadargs *args = data;  	struct nfs_server *server; -	struct nfs4_copy_state *copy; +	struct nfs4_copy_state *copy, *tmp_copy;  	bool found = false; +	copy = kzalloc(sizeof(struct nfs4_copy_state), GFP_NOFS); +	if (!copy) +		return htonl(NFS4ERR_SERVERFAULT); +  	spin_lock(&cps->clp->cl_lock);  	rcu_read_lock();  	list_for_each_entry_rcu(server, &cps->clp->cl_superblocks,  				client_link) { -		list_for_each_entry(copy, &server->ss_copies, copies) { +		list_for_each_entry(tmp_copy, &server->ss_copies, copies) {  			if (memcmp(args->coa_stateid.other, -					copy->stateid.other, +					tmp_copy->stateid.other,  					sizeof(args->coa_stateid.other)))  				continue; -			nfs4_copy_cb_args(copy, args); -			complete(©->completion); +			nfs4_copy_cb_args(tmp_copy, args); +			complete(&tmp_copy->completion);  			found = true;  			goto out;  		} @@ -707,15 +711,11 @@ __be32 nfs4_callback_offload(void *data, void *dummy,  out:  	rcu_read_unlock();  	if (!found) { -		copy = kzalloc(sizeof(struct nfs4_copy_state), GFP_NOFS); -		if (!copy) { -			spin_unlock(&cps->clp->cl_lock); -			return htonl(NFS4ERR_SERVERFAULT); -		}  		memcpy(©->stateid, &args->coa_stateid, NFS4_STATEID_SIZE);  		nfs4_copy_cb_args(copy, args);  		list_add_tail(©->copies, &cps->clp->pending_cb_stateids); -	} +	} else +		kfree(copy);  	spin_unlock(&cps->clp->cl_lock);  	return 0;  | 
