diff options
Diffstat (limited to 'fs/lockd')
-rw-r--r-- | fs/lockd/svclock.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/fs/lockd/svclock.c b/fs/lockd/svclock.c index 067778b0ccc9..e066a3902973 100644 --- a/fs/lockd/svclock.c +++ b/fs/lockd/svclock.c | |||
@@ -951,6 +951,7 @@ nlmsvc_retry_blocked(void) | |||
951 | unsigned long timeout = MAX_SCHEDULE_TIMEOUT; | 951 | unsigned long timeout = MAX_SCHEDULE_TIMEOUT; |
952 | struct nlm_block *block; | 952 | struct nlm_block *block; |
953 | 953 | ||
954 | spin_lock(&nlm_blocked_lock); | ||
954 | while (!list_empty(&nlm_blocked) && !kthread_should_stop()) { | 955 | while (!list_empty(&nlm_blocked) && !kthread_should_stop()) { |
955 | block = list_entry(nlm_blocked.next, struct nlm_block, b_list); | 956 | block = list_entry(nlm_blocked.next, struct nlm_block, b_list); |
956 | 957 | ||
@@ -960,6 +961,7 @@ nlmsvc_retry_blocked(void) | |||
960 | timeout = block->b_when - jiffies; | 961 | timeout = block->b_when - jiffies; |
961 | break; | 962 | break; |
962 | } | 963 | } |
964 | spin_unlock(&nlm_blocked_lock); | ||
963 | 965 | ||
964 | dprintk("nlmsvc_retry_blocked(%p, when=%ld)\n", | 966 | dprintk("nlmsvc_retry_blocked(%p, when=%ld)\n", |
965 | block, block->b_when); | 967 | block, block->b_when); |
@@ -969,7 +971,9 @@ nlmsvc_retry_blocked(void) | |||
969 | retry_deferred_block(block); | 971 | retry_deferred_block(block); |
970 | } else | 972 | } else |
971 | nlmsvc_grant_blocked(block); | 973 | nlmsvc_grant_blocked(block); |
974 | spin_lock(&nlm_blocked_lock); | ||
972 | } | 975 | } |
976 | spin_unlock(&nlm_blocked_lock); | ||
973 | 977 | ||
974 | return timeout; | 978 | return timeout; |
975 | } | 979 | } |