summaryrefslogtreecommitdiffstats
path: root/fs/lockd/svclock.c
diff options
context:
space:
mode:
authorAndy Adamson <andros@citi.umich.edu>2006-03-20 13:44:25 -0500
committerTrond Myklebust <Trond.Myklebust@netapp.com>2006-03-20 13:44:25 -0500
commita85f193e2fb7d53e48ae6a9d9ea990bfb4cea555 (patch)
treef992c9b6b0ba6f1726a48af99a0251270d32e821 /fs/lockd/svclock.c
parent5de0e5024a4e21251fd80dbfdb83316ce97086bc (diff)
lockd: make nlmsvc_lock use only posix_lock_file
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>
Diffstat (limited to 'fs/lockd/svclock.c')
-rw-r--r--fs/lockd/svclock.c23
1 files changed, 4 insertions, 19 deletions
diff --git a/fs/lockd/svclock.c b/fs/lockd/svclock.c
index 58bbfede94e..f5398097b84 100644
--- a/fs/lockd/svclock.c
+++ b/fs/lockd/svclock.c
@@ -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);