lockd: make nlmsvc_lock use only posix_lock_file
authorAndy Adamson <andros@citi.umich.edu>
Mon, 20 Mar 2006 18:44:25 +0000 (13:44 -0500)
committerTrond Myklebust <Trond.Myklebust@netapp.com>
Mon, 20 Mar 2006 18:44:25 +0000 (13:44 -0500)
Reorganize nlmsvc_lock() to make full use of posix_lock_file(), which does
eveything nlmsvc_lock() needs - no need to call posix_test_lock(),
posix_locks_deadlock(), or posix_block_lock() separately.

Signed-off-by: Andy Adamson <andros@citi.umich.edu>
Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
fs/lockd/svclock.c

index 58bbfed..f539809 100644 (file)
@@ -297,7 +297,6 @@ u32
 nlmsvc_lock(struct svc_rqst *rqstp, struct nlm_file *file,
                        struct nlm_lock *lock, int wait, struct nlm_cookie *cookie)
 {
-       struct file_lock        *conflock;
        struct nlm_block        *block;
        int                     error;
        u32                     ret;
@@ -320,14 +319,15 @@ again:
        /* Lock file against concurrent access */
        down(&file->f_sema);
 
-       if (!(conflock = posix_test_lock(file->f_file, &lock->fl))) {
-               error = posix_lock_file(file->f_file, &lock->fl);
+       error = posix_lock_file(file->f_file, &lock->fl);
+
+       dprintk("lockd: posix_lock_file returned %d\n", error);
 
+       if (error != -EAGAIN) {
                if (block)
                        nlmsvc_delete_block(block, 0);
                up(&file->f_sema);
 
-               dprintk("lockd: posix_lock_file returned %d\n", -error);
                switch(-error) {
                case 0:
                        ret = nlm_granted;
@@ -335,9 +335,6 @@ again:
                case EDEADLK:
                        ret = nlm_deadlock;
                        goto out;
-               case EAGAIN:
-                       ret = nlm_lck_denied;
-                       goto out;
                default:                        /* includes ENOLCK */
                        ret = nlm_lck_denied_nolocks;
                        goto out;
@@ -349,11 +346,6 @@ again:
                goto out_unlock;
        }
 
-       if (posix_locks_deadlock(&lock->fl, conflock)) {
-               ret = nlm_deadlock;
-               goto out_unlock;
-       }
-
        /* If we don't have a block, create and initialize it. Then
         * retry because we may have slept in kmalloc. */
        /* We have to release f_sema as nlmsvc_create_block may try to
@@ -369,13 +361,6 @@ again:
        /* Append to list of blocked */
        nlmsvc_insert_block(block, NLM_NEVER);
 
-       if (list_empty(&block->b_call.a_args.lock.fl.fl_block)) {
-               /* Now add block to block list of the conflicting lock
-                  if we haven't done so. */
-               dprintk("lockd: blocking on this lock.\n");
-               posix_block_lock(conflock, &block->b_call.a_args.lock.fl);
-       }
-
        ret = nlm_lck_blocked;
 out_unlock:
        up(&file->f_sema);