aboutsummaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
Diffstat (limited to 'fs')
-rw-r--r--fs/btrfs/async-thread.c9
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);