summaryrefslogtreecommitdiffstats
path: root/fs/nfs/nfs4proc.c
diff options
context:
space:
mode:
authorTrond Myklebust <Trond.Myklebust@netapp.com>2008-12-23 15:21:52 -0500
committerTrond Myklebust <Trond.Myklebust@netapp.com>2008-12-23 15:21:52 -0500
commitb7391f44f26b17ad25c7183a3d6ad50f0a9305ff (patch)
tree8e09a5714587a8bde2a805819501d10bae4787b7 /fs/nfs/nfs4proc.c
parent6411bd4a471893ab2af103d96253ba97c92d4777 (diff)
downloadlinux-b7391f44f26b17ad25c7183a3d6ad50f0a9305ff.tar.gz
linux-b7391f44f26b17ad25c7183a3d6ad50f0a9305ff.tar.bz2
linux-b7391f44f26b17ad25c7183a3d6ad50f0a9305ff.zip
NFSv4: Return unreferenced delegations more promptly
If the client is not using a delegation, the right thing to do is to return it as soon as possible. This helps reduce the amount of state the server has to track, as well as reducing the potential for conflicts with other clients. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'fs/nfs/nfs4proc.c')
-rw-r--r--fs/nfs/nfs4proc.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
index 2a347d47e38c..fc0c9d255cf7 100644
--- a/fs/nfs/nfs4proc.c
+++ b/fs/nfs/nfs4proc.c
@@ -421,6 +421,7 @@ static int can_open_delegated(struct nfs_delegation *delegation, mode_t open_fla
return 0;
if (test_bit(NFS_DELEGATION_NEED_RECLAIM, &delegation->flags))
return 0;
+ nfs_mark_delegation_referenced(delegation);
return 1;
}
@@ -505,6 +506,7 @@ static int update_open_stateid(struct nfs4_state *state, nfs4_stateid *open_stat
else if (memcmp(deleg_cur->stateid.data, delegation->data, NFS4_STATEID_SIZE) != 0)
goto no_delegation_unlock;
+ nfs_mark_delegation_referenced(deleg_cur);
__update_open_stateid(state, open_stateid, &deleg_cur->stateid, open_flags);
ret = 1;
no_delegation_unlock: