diff options
author | J. Bruce Fields <bfields@citi.umich.edu> | 2008-02-06 13:59:23 -0500 |
---|---|---|
committer | J. Bruce Fields <bfields@citi.umich.edu> | 2008-10-03 16:19:19 -0400 |
commit | b2b5028905226f85075a408b1118857c9aa48bb3 (patch) | |
tree | 79d4e32fe7b0f4f12282282f0b0147ca2b438171 /fs/lockd/svclock.c | |
parent | af558e33bedab672f5cfd3260bce7445e353fe21 (diff) |
lockd: move grace period checks to common code
Do all the grace period checks in svclock.c. This simplifies the code a
bit, and will ease some later changes.
Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
Diffstat (limited to 'fs/lockd/svclock.c')
-rw-r--r-- | fs/lockd/svclock.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/fs/lockd/svclock.c b/fs/lockd/svclock.c index cf0d5c2c318d..808d246ada4d 100644 --- a/fs/lockd/svclock.c +++ b/fs/lockd/svclock.c | |||
@@ -360,7 +360,7 @@ nlmsvc_defer_lock_rqst(struct svc_rqst *rqstp, struct nlm_block *block) | |||
360 | __be32 | 360 | __be32 |
361 | nlmsvc_lock(struct svc_rqst *rqstp, struct nlm_file *file, | 361 | nlmsvc_lock(struct svc_rqst *rqstp, struct nlm_file *file, |
362 | struct nlm_host *host, struct nlm_lock *lock, int wait, | 362 | struct nlm_host *host, struct nlm_lock *lock, int wait, |
363 | struct nlm_cookie *cookie) | 363 | struct nlm_cookie *cookie, int reclaim) |
364 | { | 364 | { |
365 | struct nlm_block *block = NULL; | 365 | struct nlm_block *block = NULL; |
366 | int error; | 366 | int error; |
@@ -406,6 +406,11 @@ nlmsvc_lock(struct svc_rqst *rqstp, struct nlm_file *file, | |||
406 | goto out; | 406 | goto out; |
407 | } | 407 | } |
408 | 408 | ||
409 | if (locks_in_grace() && !reclaim) { | ||
410 | ret = nlm_lck_denied_grace_period; | ||
411 | goto out; | ||
412 | } | ||
413 | |||
409 | if (!wait) | 414 | if (!wait) |
410 | lock->fl.fl_flags &= ~FL_SLEEP; | 415 | lock->fl.fl_flags &= ~FL_SLEEP; |
411 | error = vfs_lock_file(file->f_file, F_SETLK, &lock->fl, NULL); | 416 | error = vfs_lock_file(file->f_file, F_SETLK, &lock->fl, NULL); |
@@ -502,6 +507,10 @@ nlmsvc_testlock(struct svc_rqst *rqstp, struct nlm_file *file, | |||
502 | goto out; | 507 | goto out; |
503 | } | 508 | } |
504 | 509 | ||
510 | if (locks_in_grace()) { | ||
511 | ret = nlm_lck_denied_grace_period; | ||
512 | goto out; | ||
513 | } | ||
505 | error = vfs_test_lock(file->f_file, &lock->fl); | 514 | error = vfs_test_lock(file->f_file, &lock->fl); |
506 | if (error == FILE_LOCK_DEFERRED) { | 515 | if (error == FILE_LOCK_DEFERRED) { |
507 | ret = nlmsvc_defer_lock_rqst(rqstp, block); | 516 | ret = nlmsvc_defer_lock_rqst(rqstp, block); |
@@ -582,6 +591,9 @@ nlmsvc_cancel_blocked(struct nlm_file *file, struct nlm_lock *lock) | |||
582 | (long long)lock->fl.fl_start, | 591 | (long long)lock->fl.fl_start, |
583 | (long long)lock->fl.fl_end); | 592 | (long long)lock->fl.fl_end); |
584 | 593 | ||
594 | if (locks_in_grace()) | ||
595 | return nlm_lck_denied_grace_period; | ||
596 | |||
585 | mutex_lock(&file->f_mutex); | 597 | mutex_lock(&file->f_mutex); |
586 | block = nlmsvc_lookup_block(file, lock); | 598 | block = nlmsvc_lookup_block(file, lock); |
587 | mutex_unlock(&file->f_mutex); | 599 | mutex_unlock(&file->f_mutex); |