diff options
Diffstat (limited to 'fs/nfs/delegation.c')
| -rw-r--r-- | fs/nfs/delegation.c | 19 | 
1 files changed, 19 insertions, 0 deletions
| diff --git a/fs/nfs/delegation.c b/fs/nfs/delegation.c index c6f07c1c71e..d3be923d4e4 100644 --- a/fs/nfs/delegation.c +++ b/fs/nfs/delegation.c @@ -421,3 +421,22 @@ void nfs_delegation_reap_unclaimed(struct nfs4_client *clp)  		nfs_free_delegation(delegation);  	}  } + +int nfs4_copy_delegation_stateid(nfs4_stateid *dst, struct inode *inode) +{ +	struct nfs4_client *clp = NFS_SERVER(inode)->nfs4_state; +	struct nfs_inode *nfsi = NFS_I(inode); +	struct nfs_delegation *delegation; +	int res = 0; + +	if (nfsi->delegation_state == 0) +		return 0; +	spin_lock(&clp->cl_lock); +	delegation = nfsi->delegation; +	if (delegation != NULL) { +		memcpy(dst->data, delegation->stateid.data, sizeof(dst->data)); +		res = 1; +	} +	spin_unlock(&clp->cl_lock); +	return res; +} | 
