Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 23890
b: refs/heads/master
c: 15dadef
h: refs/heads/master
v: v3
  • Loading branch information
Andy Adamson authored and Trond Myklebust committed Mar 20, 2006
1 parent 911f807 commit 4bf3e05
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 14 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 1e7cb3dc12dbbac690d78c84f9c7cb11132ed121
refs/heads/master: 15dadef9460ad8d3b1d5ede1c1697dc79af44a72
34 changes: 21 additions & 13 deletions trunk/fs/lockd/svclock.c
Original file line number Diff line number Diff line change
Expand Up @@ -300,6 +300,7 @@ nlmsvc_lock(struct svc_rqst *rqstp, struct nlm_file *file,
struct file_lock *conflock;
struct nlm_block *block;
int error;
u32 ret;

dprintk("lockd: nlmsvc_lock(%s/%ld, ty=%d, pi=%d, %Ld-%Ld, bl=%d)\n",
file->f_file->f_dentry->d_inode->i_sb->s_id,
Expand Down Expand Up @@ -329,24 +330,28 @@ nlmsvc_lock(struct svc_rqst *rqstp, struct nlm_file *file,
dprintk("lockd: posix_lock_file returned %d\n", -error);
switch(-error) {
case 0:
return nlm_granted;
ret = nlm_granted;
goto out;
case EDEADLK:
return nlm_deadlock;
ret = nlm_deadlock;
goto out;
case EAGAIN:
return nlm_lck_denied;
ret = nlm_lck_denied;
goto out;
default: /* includes ENOLCK */
return nlm_lck_denied_nolocks;
ret = nlm_lck_denied_nolocks;
goto out;
}
}

if (!wait) {
up(&file->f_sema);
return nlm_lck_denied;
ret = nlm_lck_denied;
goto out_unlock;
}

if (posix_locks_deadlock(&lock->fl, conflock)) {
up(&file->f_sema);
return nlm_deadlock;
ret = nlm_deadlock;
goto out_unlock;
}

/* If we don't have a block, create and initialize it. Then
Expand All @@ -371,8 +376,12 @@ nlmsvc_lock(struct svc_rqst *rqstp, struct nlm_file *file,
posix_block_lock(conflock, &block->b_call.a_args.lock.fl);
}

ret = nlm_lck_blocked;
out_unlock:
up(&file->f_sema);
return nlm_lck_blocked;
out:
dprintk("lockd: nlmsvc_lock returned %u\n", ret);
return ret;
}

/*
Expand Down Expand Up @@ -535,8 +544,7 @@ nlmsvc_grant_blocked(struct nlm_block *block)
dprintk("lockd: lock still blocked\n");
nlmsvc_insert_block(block, NLM_NEVER);
posix_block_lock(conflock, &lock->fl);
up(&file->f_sema);
return;
goto out_unlock;
}

/* Alright, no conflicting lock. Now lock it for real. If the
Expand All @@ -547,8 +555,7 @@ nlmsvc_grant_blocked(struct nlm_block *block)
printk(KERN_WARNING "lockd: unexpected error %d in %s!\n",
-error, __FUNCTION__);
nlmsvc_insert_block(block, 10 * HZ);
up(&file->f_sema);
return;
goto out_unlock;
}

callback:
Expand All @@ -565,6 +572,7 @@ nlmsvc_grant_blocked(struct nlm_block *block)
if (nlmsvc_async_call(&block->b_call, NLMPROC_GRANTED_MSG,
&nlmsvc_grant_ops) < 0)
nlm_release_host(block->b_call.a_host);
out_unlock:
up(&file->f_sema);
}

Expand Down

0 comments on commit 4bf3e05

Please sign in to comment.