diff options
author | NeilBrown <neilb@suse.com> | 2018-11-29 18:04:08 -0500 |
---|---|---|
committer | Jeff Layton <jlayton@kernel.org> | 2018-11-30 11:26:12 -0500 |
commit | ad6bbd8b18dad182a7e91d7826e27e9a64d935f9 (patch) | |
tree | dd243c664f70c1293013824b8557595aa91409ed /fs | |
parent | ada5c1da8660ecae24b3e75c18ee77d79e099fee (diff) |
fs/locks: split out __locks_wake_up_blocks().
This functionality will be useful in future patches, so
split it out from locks_wake_up_blocks().
Signed-off-by: NeilBrown <neilb@suse.com>
Reviewed-by: J. Bruce Fields <bfields@redhat.com>
Signed-off-by: Jeff Layton <jlayton@kernel.org>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/locks.c | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/fs/locks.c b/fs/locks.c index c6df0c8b3d13..6adb22a21a92 100644 --- a/fs/locks.c +++ b/fs/locks.c | |||
@@ -672,6 +672,21 @@ static void __locks_delete_block(struct file_lock *waiter) | |||
672 | waiter->fl_blocker = NULL; | 672 | waiter->fl_blocker = NULL; |
673 | } | 673 | } |
674 | 674 | ||
675 | static void __locks_wake_up_blocks(struct file_lock *blocker) | ||
676 | { | ||
677 | while (!list_empty(&blocker->fl_blocked_requests)) { | ||
678 | struct file_lock *waiter; | ||
679 | |||
680 | waiter = list_first_entry(&blocker->fl_blocked_requests, | ||
681 | struct file_lock, fl_blocked_member); | ||
682 | __locks_delete_block(waiter); | ||
683 | if (waiter->fl_lmops && waiter->fl_lmops->lm_notify) | ||
684 | waiter->fl_lmops->lm_notify(waiter); | ||
685 | else | ||
686 | wake_up(&waiter->fl_wait); | ||
687 | } | ||
688 | } | ||
689 | |||
675 | static void locks_delete_block(struct file_lock *waiter) | 690 | static void locks_delete_block(struct file_lock *waiter) |
676 | { | 691 | { |
677 | spin_lock(&blocked_lock_lock); | 692 | spin_lock(&blocked_lock_lock); |
@@ -727,17 +742,7 @@ static void locks_wake_up_blocks(struct file_lock *blocker) | |||
727 | return; | 742 | return; |
728 | 743 | ||
729 | spin_lock(&blocked_lock_lock); | 744 | spin_lock(&blocked_lock_lock); |
730 | while (!list_empty(&blocker->fl_blocked_requests)) { | 745 | __locks_wake_up_blocks(blocker); |
731 | struct file_lock *waiter; | ||
732 | |||
733 | waiter = list_first_entry(&blocker->fl_blocked_requests, | ||
734 | struct file_lock, fl_blocked_member); | ||
735 | __locks_delete_block(waiter); | ||
736 | if (waiter->fl_lmops && waiter->fl_lmops->lm_notify) | ||
737 | waiter->fl_lmops->lm_notify(waiter); | ||
738 | else | ||
739 | wake_up(&waiter->fl_wait); | ||
740 | } | ||
741 | spin_unlock(&blocked_lock_lock); | 746 | spin_unlock(&blocked_lock_lock); |
742 | } | 747 | } |
743 | 748 | ||