aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/fs/btrfs/async-thread.c
diff options
context:
space:
mode:
authorDmitry Torokhov <dmitry.torokhov@gmail.com>2012-09-19 10:21:21 -0700
committerDmitry Torokhov <dmitry.torokhov@gmail.com>2012-09-19 10:21:21 -0700
commit0b6c404a07e3240b95aa5682fb8fd57c41609d7a (patch)
treec4d410b0ec7044922b73c39ecfb3fbb620c29282 /fs/btrfs/async-thread.c
parentInput: imx_keypad - fix missing clk conversions (diff)
parentLinux 3.6-rc5 (diff)
downloadwireguard-linux-0b6c404a07e3240b95aa5682fb8fd57c41609d7a.tar.xz
wireguard-linux-0b6c404a07e3240b95aa5682fb8fd57c41609d7a.zip
Merge tag 'v3.6-rc5' into for-linus
Sync with mainline so that I can revert an input patch that came in through another subsystem tree.
Diffstat (limited to '')
-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 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,
work->ordered_func(work);
- /* now take the lock again and call the freeing code */
+ /* now take the lock again and drop our item from the list */
spin_lock(&workers->order_lock);
list_del(&work->order_list);
+ spin_unlock(&workers->order_lock);
+
+ /*
+ * we don't want to call the ordered free functions
+ * with the lock held though
+ */
work->ordered_free(work);
+ spin_lock(&workers->order_lock);
}
spin_unlock(&workers->order_lock);