Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

fs/locks: merge posix_unblock_lock() and locks_delete_block()

posix_unblock_lock() is not specific to posix locks, and behaves
nearly identically to locks_delete_block() - the former returning a
status while the later doesn't.

So discard posix_unblock_lock() and use locks_delete_block() instead,
after giving that function an appropriate return value.

Signed-off-by: NeilBrown <neilb@suse.com>
Reviewed-by: J. Bruce Fields <bfields@redhat.com>
Signed-off-by: Jeff Layton <jlayton@kernel.org>

authored by

NeilBrown and committed by
Jeff Layton
cb03f94f fd7732e0

+21 -31
+1 -1
fs/cifs/file.c
··· 1106 1106 rc = wait_event_interruptible(flock->fl_wait, !flock->fl_blocker); 1107 1107 if (!rc) 1108 1108 goto try_again; 1109 - posix_unblock_lock(flock); 1109 + locks_delete_block(flock); 1110 1110 } 1111 1111 return rc; 1112 1112 }
+1 -1
fs/lockd/svclock.c
··· 276 276 dprintk("lockd: unlinking block %p...\n", block); 277 277 278 278 /* Remove block from list */ 279 - status = posix_unblock_lock(&block->b_call->a_args.lock.fl); 279 + status = locks_delete_block(&block->b_call->a_args.lock.fl); 280 280 nlmsvc_remove_block(block); 281 281 return status; 282 282 }
+14 -24
fs/locks.c
··· 748 748 } 749 749 } 750 750 751 - static void locks_delete_block(struct file_lock *waiter) 751 + /** 752 + * locks_delete_lock - stop waiting for a file lock 753 + * @waiter: the lock which was waiting 754 + * 755 + * lockd/nfsd need to disconnect the lock while working on it. 756 + */ 757 + int locks_delete_block(struct file_lock *waiter) 752 758 { 759 + int status = -ENOENT; 760 + 753 761 /* 754 762 * If fl_blocker is NULL, it won't be set again as this thread 755 763 * "owns" the lock and is the only one that might try to claim ··· 771 763 */ 772 764 if (waiter->fl_blocker == NULL && 773 765 list_empty(&waiter->fl_blocked_requests)) 774 - return; 766 + return status; 775 767 spin_lock(&blocked_lock_lock); 768 + if (waiter->fl_blocker) 769 + status = 0; 776 770 __locks_wake_up_blocks(waiter); 777 771 __locks_delete_block(waiter); 778 772 spin_unlock(&blocked_lock_lock); 773 + return status; 779 774 } 775 + EXPORT_SYMBOL(locks_delete_block); 780 776 781 777 /* Insert waiter into blocker's block list. 782 778 * We use a circular list so that processes can be easily woken up in ··· 2686 2674 locks_check_ctx_file_list(filp, &ctx->flc_lease, "LEASE"); 2687 2675 spin_unlock(&ctx->flc_lock); 2688 2676 } 2689 - 2690 - /** 2691 - * posix_unblock_lock - stop waiting for a file lock 2692 - * @waiter: the lock which was waiting 2693 - * 2694 - * lockd needs to block waiting for locks. 2695 - */ 2696 - int 2697 - posix_unblock_lock(struct file_lock *waiter) 2698 - { 2699 - int status = -ENOENT; 2700 - 2701 - spin_lock(&blocked_lock_lock); 2702 - if (waiter->fl_blocker) { 2703 - __locks_wake_up_blocks(waiter); 2704 - __locks_delete_block(waiter); 2705 - status = 0; 2706 - } 2707 - spin_unlock(&blocked_lock_lock); 2708 - return status; 2709 - } 2710 - EXPORT_SYMBOL(posix_unblock_lock); 2711 2677 2712 2678 /** 2713 2679 * vfs_cancel_lock - file byte range unblock lock
+3 -3
fs/nfsd/nfs4state.c
··· 238 238 } 239 239 spin_unlock(&nn->blocked_locks_lock); 240 240 if (found) 241 - posix_unblock_lock(&found->nbl_lock); 241 + locks_delete_block(&found->nbl_lock); 242 242 return found; 243 243 } 244 244 ··· 293 293 nbl = list_first_entry(&reaplist, struct nfsd4_blocked_lock, 294 294 nbl_lru); 295 295 list_del_init(&nbl->nbl_lru); 296 - posix_unblock_lock(&nbl->nbl_lock); 296 + locks_delete_block(&nbl->nbl_lock); 297 297 free_blocked_lock(nbl); 298 298 } 299 299 } ··· 4863 4863 nbl = list_first_entry(&reaplist, 4864 4864 struct nfsd4_blocked_lock, nbl_lru); 4865 4865 list_del_init(&nbl->nbl_lru); 4866 - posix_unblock_lock(&nbl->nbl_lock); 4866 + locks_delete_block(&nbl->nbl_lock); 4867 4867 free_blocked_lock(nbl); 4868 4868 } 4869 4869 out:
+2 -2
include/linux/fs.h
··· 1124 1124 extern void locks_release_private(struct file_lock *); 1125 1125 extern void posix_test_lock(struct file *, struct file_lock *); 1126 1126 extern int posix_lock_file(struct file *, struct file_lock *, struct file_lock *); 1127 - extern int posix_unblock_lock(struct file_lock *); 1127 + extern int locks_delete_block(struct file_lock *); 1128 1128 extern int vfs_test_lock(struct file *, struct file_lock *); 1129 1129 extern int vfs_lock_file(struct file *, unsigned int, struct file_lock *, struct file_lock *); 1130 1130 extern int vfs_cancel_lock(struct file *filp, struct file_lock *fl); ··· 1214 1214 return -ENOLCK; 1215 1215 } 1216 1216 1217 - static inline int posix_unblock_lock(struct file_lock *waiter) 1217 + static inline int locks_delete_block(struct file_lock *waiter) 1218 1218 { 1219 1219 return -ENOENT; 1220 1220 }