diff options
-rw-r--r-- | fs/lockd/svclock.c | 23 |
1 files changed, 4 insertions, 19 deletions
diff --git a/fs/lockd/svclock.c b/fs/lockd/svclock.c index 58bbfede94ec..f5398097b84b 100644 --- a/fs/lockd/svclock.c +++ b/fs/lockd/svclock.c | |||
@@ -297,7 +297,6 @@ u32 | |||
297 | nlmsvc_lock(struct svc_rqst *rqstp, struct nlm_file *file, | 297 | nlmsvc_lock(struct svc_rqst *rqstp, struct nlm_file *file, |
298 | struct nlm_lock *lock, int wait, struct nlm_cookie *cookie) | 298 | struct nlm_lock *lock, int wait, struct nlm_cookie *cookie) |
299 | { | 299 | { |
300 | struct file_lock *conflock; | ||
301 | struct nlm_block *block; | 300 | struct nlm_block *block; |
302 | int error; | 301 | int error; |
303 | u32 ret; | 302 | u32 ret; |
@@ -320,14 +319,15 @@ again: | |||
320 | /* Lock file against concurrent access */ | 319 | /* Lock file against concurrent access */ |
321 | down(&file->f_sema); | 320 | down(&file->f_sema); |
322 | 321 | ||
323 | if (!(conflock = posix_test_lock(file->f_file, &lock->fl))) { | 322 | error = posix_lock_file(file->f_file, &lock->fl); |
324 | error = posix_lock_file(file->f_file, &lock->fl); | 323 | |
324 | dprintk("lockd: posix_lock_file returned %d\n", error); | ||
325 | 325 | ||
326 | if (error != -EAGAIN) { | ||
326 | if (block) | 327 | if (block) |
327 | nlmsvc_delete_block(block, 0); | 328 | nlmsvc_delete_block(block, 0); |
328 | up(&file->f_sema); | 329 | up(&file->f_sema); |
329 | 330 | ||
330 | dprintk("lockd: posix_lock_file returned %d\n", -error); | ||
331 | switch(-error) { | 331 | switch(-error) { |
332 | case 0: | 332 | case 0: |
333 | ret = nlm_granted; | 333 | ret = nlm_granted; |
@@ -335,9 +335,6 @@ again: | |||
335 | case EDEADLK: | 335 | case EDEADLK: |
336 | ret = nlm_deadlock; | 336 | ret = nlm_deadlock; |
337 | goto out; | 337 | goto out; |
338 | case EAGAIN: | ||
339 | ret = nlm_lck_denied; | ||
340 | goto out; | ||
341 | default: /* includes ENOLCK */ | 338 | default: /* includes ENOLCK */ |
342 | ret = nlm_lck_denied_nolocks; | 339 | ret = nlm_lck_denied_nolocks; |
343 | goto out; | 340 | goto out; |
@@ -349,11 +346,6 @@ again: | |||
349 | goto out_unlock; | 346 | goto out_unlock; |
350 | } | 347 | } |
351 | 348 | ||
352 | if (posix_locks_deadlock(&lock->fl, conflock)) { | ||
353 | ret = nlm_deadlock; | ||
354 | goto out_unlock; | ||
355 | } | ||
356 | |||
357 | /* If we don't have a block, create and initialize it. Then | 349 | /* If we don't have a block, create and initialize it. Then |
358 | * retry because we may have slept in kmalloc. */ | 350 | * retry because we may have slept in kmalloc. */ |
359 | /* We have to release f_sema as nlmsvc_create_block may try to | 351 | /* We have to release f_sema as nlmsvc_create_block may try to |
@@ -369,13 +361,6 @@ again: | |||
369 | /* Append to list of blocked */ | 361 | /* Append to list of blocked */ |
370 | nlmsvc_insert_block(block, NLM_NEVER); | 362 | nlmsvc_insert_block(block, NLM_NEVER); |
371 | 363 | ||
372 | if (list_empty(&block->b_call.a_args.lock.fl.fl_block)) { | ||
373 | /* Now add block to block list of the conflicting lock | ||
374 | if we haven't done so. */ | ||
375 | dprintk("lockd: blocking on this lock.\n"); | ||
376 | posix_block_lock(conflock, &block->b_call.a_args.lock.fl); | ||
377 | } | ||
378 | |||
379 | ret = nlm_lck_blocked; | 364 | ret = nlm_lck_blocked; |
380 | out_unlock: | 365 | out_unlock: |
381 | up(&file->f_sema); | 366 | up(&file->f_sema); |