aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/lockd/svclock.c17
1 files changed, 6 insertions, 11 deletions
diff --git a/fs/lockd/svclock.c b/fs/lockd/svclock.c
index 42dd105456c5..58bbfede94ec 100644
--- a/fs/lockd/svclock.c
+++ b/fs/lockd/svclock.c
@@ -519,7 +519,6 @@ nlmsvc_grant_blocked(struct nlm_block *block)
519{ 519{
520 struct nlm_file *file = block->b_file; 520 struct nlm_file *file = block->b_file;
521 struct nlm_lock *lock = &block->b_call.a_args.lock; 521 struct nlm_lock *lock = &block->b_call.a_args.lock;
522 struct file_lock *conflock;
523 int error; 522 int error;
524 523
525 dprintk("lockd: grant blocked lock %p\n", block); 524 dprintk("lockd: grant blocked lock %p\n", block);
@@ -539,19 +538,15 @@ nlmsvc_grant_blocked(struct nlm_block *block)
539 } 538 }
540 539
541 /* Try the lock operation again */ 540 /* Try the lock operation again */
542 if ((conflock = posix_test_lock(file->f_file, &lock->fl)) != NULL) { 541 error = posix_lock_file(file->f_file, &lock->fl);
543 /* Bummer, we blocked again */ 542 switch (error) {
543 case 0:
544 break;
545 case -EAGAIN:
544 dprintk("lockd: lock still blocked\n"); 546 dprintk("lockd: lock still blocked\n");
545 nlmsvc_insert_block(block, NLM_NEVER); 547 nlmsvc_insert_block(block, NLM_NEVER);
546 posix_block_lock(conflock, &lock->fl);
547 goto out_unlock; 548 goto out_unlock;
548 } 549 default:
549
550 /* Alright, no conflicting lock. Now lock it for real. If the
551 * following yields an error, this is most probably due to low
552 * memory. Retry the lock in a few seconds.
553 */
554 if ((error = posix_lock_file(file->f_file, &lock->fl)) < 0) {
555 printk(KERN_WARNING "lockd: unexpected error %d in %s!\n", 550 printk(KERN_WARNING "lockd: unexpected error %d in %s!\n",
556 -error, __FUNCTION__); 551 -error, __FUNCTION__);
557 nlmsvc_insert_block(block, 10 * HZ); 552 nlmsvc_insert_block(block, 10 * HZ);