diff options
Diffstat (limited to 'fs/nfs/nfs4proc.c')
| -rw-r--r-- | fs/nfs/nfs4proc.c | 21 | 
1 files changed, 15 insertions, 6 deletions
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c index e7f8d5ff2581..c347705b0161 100644 --- a/fs/nfs/nfs4proc.c +++ b/fs/nfs/nfs4proc.c @@ -1117,8 +1117,6 @@ static int can_open_delegated(struct nfs_delegation *delegation, fmode_t fmode)  		return 0;  	if ((delegation->type & fmode) != fmode)  		return 0; -	if (test_bit(NFS_DELEGATION_NEED_RECLAIM, &delegation->flags)) -		return 0;  	if (test_bit(NFS_DELEGATION_RETURNING, &delegation->flags))  		return 0;  	nfs_mark_delegation_referenced(delegation); @@ -4917,11 +4915,14 @@ static void nfs4_init_boot_verifier(const struct nfs_client *clp,  }  static unsigned int -nfs4_init_nonuniform_client_string(const struct nfs_client *clp, +nfs4_init_nonuniform_client_string(struct nfs_client *clp,  				   char *buf, size_t len)  {  	unsigned int result; +	if (clp->cl_owner_id != NULL) +		return strlcpy(buf, clp->cl_owner_id, len); +  	rcu_read_lock();  	result = scnprintf(buf, len, "Linux NFSv4.0 %s/%s %s",  				clp->cl_ipaddr, @@ -4930,24 +4931,32 @@ nfs4_init_nonuniform_client_string(const struct nfs_client *clp,  				rpc_peeraddr2str(clp->cl_rpcclient,  							RPC_DISPLAY_PROTO));  	rcu_read_unlock(); +	clp->cl_owner_id = kstrdup(buf, GFP_KERNEL);  	return result;  }  static unsigned int -nfs4_init_uniform_client_string(const struct nfs_client *clp, +nfs4_init_uniform_client_string(struct nfs_client *clp,  				char *buf, size_t len)  {  	const char *nodename = clp->cl_rpcclient->cl_nodename; +	unsigned int result; + +	if (clp->cl_owner_id != NULL) +		return strlcpy(buf, clp->cl_owner_id, len);  	if (nfs4_client_id_uniquifier[0] != '\0') -		return scnprintf(buf, len, "Linux NFSv%u.%u %s/%s", +		result = scnprintf(buf, len, "Linux NFSv%u.%u %s/%s",  				clp->rpc_ops->version,  				clp->cl_minorversion,  				nfs4_client_id_uniquifier,  				nodename); -	return scnprintf(buf, len, "Linux NFSv%u.%u %s", +	else +		result = scnprintf(buf, len, "Linux NFSv%u.%u %s",  				clp->rpc_ops->version, clp->cl_minorversion,  				nodename); +	clp->cl_owner_id = kstrdup(buf, GFP_KERNEL); +	return result;  }  /*  | 
