diff options
author | J. Bruce Fields <bfields@citi.umich.edu> | 2007-09-06 12:34:25 -0400 |
---|---|---|
committer | J. Bruce Fields <bfields@citi.umich.edu> | 2008-10-03 16:19:02 -0400 |
commit | af558e33bedab672f5cfd3260bce7445e353fe21 (patch) | |
tree | eb89187b6c12640a00584bd35be035ba332e4af3 /fs/lockd/svc4proc.c | |
parent | d5b337b4877f7c4e1d761434ee04d045b0201e03 (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.c | 12 |
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 | } |