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;
        /* 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;
                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;
                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
        /* 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);