aboutsummaryrefslogtreecommitdiffstats
path: root/fs/lockd/svc4proc.c
diff options
context:
space:
mode:
authorJ. Bruce Fields <bfields@citi.umich.edu>2007-09-06 12:34:25 -0400
committerJ. Bruce Fields <bfields@citi.umich.edu>2008-10-03 16:19:02 -0400
commitaf558e33bedab672f5cfd3260bce7445e353fe21 (patch)
treeeb89187b6c12640a00584bd35be035ba332e4af3 /fs/lockd/svc4proc.c
parentd5b337b4877f7c4e1d761434ee04d045b0201e03 (diff)
nfsd: common grace period control
Rewrite grace period code to unify management of grace period across lockd and nfsd. The current code has lockd and nfsd cooperate to compute a grace period which is satisfactory to them both, and then individually enforce it. This creates a slight race condition, since the enforcement is not coordinated. It's also more complicated than necessary. Here instead we have lockd and nfsd each inform common code when they enter the grace period, and when they're ready to leave the grace period, and allow normal locking only after both of them are ready to leave. We also expect the locks_start_grace()/locks_end_grace() interface here to be simpler to build on for future cluster/high-availability work, which may require (for example) putting individual filesystems into grace, or enforcing grace periods across multiple cluster nodes. Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
Diffstat (limited to 'fs/lockd/svc4proc.c')
-rw-r--r--fs/lockd/svc4proc.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/fs/lockd/svc4proc.c b/fs/lockd/svc4proc.c
index 4a714f64515b..7ca617367b3e 100644
--- a/fs/lockd/svc4proc.c
+++ b/fs/lockd/svc4proc.c
@@ -89,7 +89,7 @@ nlm4svc_proc_test(struct svc_rqst *rqstp, struct nlm_args *argp,
89 resp->cookie = argp->cookie; 89 resp->cookie = argp->cookie;
90 90
91 /* Don't accept test requests during grace period */ 91 /* Don't accept test requests during grace period */
92 if (nlmsvc_grace_period) { 92 if (locks_in_grace()) {
93 resp->status = nlm_lck_denied_grace_period; 93 resp->status = nlm_lck_denied_grace_period;
94 return rc; 94 return rc;
95 } 95 }
@@ -123,7 +123,7 @@ nlm4svc_proc_lock(struct svc_rqst *rqstp, struct nlm_args *argp,
123 resp->cookie = argp->cookie; 123 resp->cookie = argp->cookie;
124 124
125 /* Don't accept new lock requests during grace period */ 125 /* Don't accept new lock requests during grace period */
126 if (nlmsvc_grace_period && !argp->reclaim) { 126 if (locks_in_grace() && !argp->reclaim) {
127 resp->status = nlm_lck_denied_grace_period; 127 resp->status = nlm_lck_denied_grace_period;
128 return rc; 128 return rc;
129 } 129 }
@@ -169,7 +169,7 @@ nlm4svc_proc_cancel(struct svc_rqst *rqstp, struct nlm_args *argp,
169 resp->cookie = argp->cookie; 169 resp->cookie = argp->cookie;
170 170
171 /* Don't accept requests during grace period */ 171 /* Don't accept requests during grace period */
172 if (nlmsvc_grace_period) { 172 if (locks_in_grace()) {
173 resp->status = nlm_lck_denied_grace_period; 173 resp->status = nlm_lck_denied_grace_period;
174 return rpc_success; 174 return rpc_success;
175 } 175 }
@@ -202,7 +202,7 @@ nlm4svc_proc_unlock(struct svc_rqst *rqstp, struct nlm_args *argp,
202 resp->cookie = argp->cookie; 202 resp->cookie = argp->cookie;
203 203
204 /* Don't accept new lock requests during grace period */ 204 /* Don't accept new lock requests during grace period */
205 if (nlmsvc_grace_period) { 205 if (locks_in_grace()) {
206 resp->status = nlm_lck_denied_grace_period; 206 resp->status = nlm_lck_denied_grace_period;
207 return rpc_success; 207 return rpc_success;
208 } 208 }
@@ -341,7 +341,7 @@ nlm4svc_proc_share(struct svc_rqst *rqstp, struct nlm_args *argp,
341 resp->cookie = argp->cookie; 341 resp->cookie = argp->cookie;
342 342
343 /* Don't accept new lock requests during grace period */ 343 /* Don't accept new lock requests during grace period */
344 if (nlmsvc_grace_period && !argp->reclaim) { 344 if (locks_in_grace() && !argp->reclaim) {
345 resp->status = nlm_lck_denied_grace_period; 345 resp->status = nlm_lck_denied_grace_period;
346 return rpc_success; 346 return rpc_success;
347 } 347 }
@@ -374,7 +374,7 @@ nlm4svc_proc_unshare(struct svc_rqst *rqstp, struct nlm_args *argp,
374 resp->cookie = argp->cookie; 374 resp->cookie = argp->cookie;
375 375
376 /* Don't accept requests during grace period */ 376 /* Don't accept requests during grace period */
377 if (nlmsvc_grace_period) { 377 if (locks_in_grace()) {
378 resp->status = nlm_lck_denied_grace_period; 378 resp->status = nlm_lck_denied_grace_period;
379 return rpc_success; 379 return rpc_success;
380 } 380 }