diff options
Diffstat (limited to 'fs')
-rw-r--r-- | fs/btrfs/async-thread.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/fs/btrfs/async-thread.c b/fs/btrfs/async-thread.c index 7ec14097fef..8006a28390f 100644 --- a/fs/btrfs/async-thread.c +++ b/fs/btrfs/async-thread.c | |||
@@ -212,10 +212,17 @@ static noinline int run_ordered_completions(struct btrfs_workers *workers, | |||
212 | 212 | ||
213 | work->ordered_func(work); | 213 | work->ordered_func(work); |
214 | 214 | ||
215 | /* now take the lock again and call the freeing code */ | 215 | /* now take the lock again and drop our item from the list */ |
216 | spin_lock(&workers->order_lock); | 216 | spin_lock(&workers->order_lock); |
217 | list_del(&work->order_list); | 217 | list_del(&work->order_list); |
218 | spin_unlock(&workers->order_lock); | ||
219 | |||
220 | /* | ||
221 | * we don't want to call the ordered free functions | ||
222 | * with the lock held though | ||
223 | */ | ||
218 | work->ordered_free(work); | 224 | work->ordered_free(work); |
225 | spin_lock(&workers->order_lock); | ||
219 | } | 226 | } |
220 | 227 | ||
221 | spin_unlock(&workers->order_lock); | 228 | spin_unlock(&workers->order_lock); |