diff options
Diffstat (limited to 'fs/btrfs/async-thread.c')
| -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 42704149b723..58b7d14b08ee 100644 --- a/fs/btrfs/async-thread.c +++ b/fs/btrfs/async-thread.c | |||
| @@ -206,10 +206,17 @@ static noinline void run_ordered_completions(struct btrfs_workers *workers, | |||
| 206 | 206 | ||
| 207 | work->ordered_func(work); | 207 | work->ordered_func(work); |
| 208 | 208 | ||
| 209 | /* now take the lock again and call the freeing code */ | 209 | /* now take the lock again and drop our item from the list */ |
| 210 | spin_lock(&workers->order_lock); | 210 | spin_lock(&workers->order_lock); |
| 211 | list_del(&work->order_list); | 211 | list_del(&work->order_list); |
| 212 | spin_unlock(&workers->order_lock); | ||
| 213 | |||
| 214 | /* | ||
| 215 | * we don't want to call the ordered free functions | ||
| 216 | * with the lock held though | ||
| 217 | */ | ||
| 212 | work->ordered_free(work); | 218 | work->ordered_free(work); |
| 219 | spin_lock(&workers->order_lock); | ||
| 213 | } | 220 | } |
| 214 | 221 | ||
| 215 | spin_unlock(&workers->order_lock); | 222 | spin_unlock(&workers->order_lock); |
