summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSage Weil2011-06-10 20:43:13 +0200
committerChris Mason2011-06-10 22:42:29 +0200
commit38e880540f983045da7a00fbc50daad238207fc5 (patch)
tree3221e77ecf07f3a25037fccc304788aab33e0724
parentBtrfs: make sure to recheck for bitmaps in clusters (diff)
downloadkernel-qcow2-linux-38e880540f983045da7a00fbc50daad238207fc5.tar.gz
kernel-qcow2-linux-38e880540f983045da7a00fbc50daad238207fc5.tar.xz
kernel-qcow2-linux-38e880540f983045da7a00fbc50daad238207fc5.zip
Btrfs: clear current->journal_info on async transaction commit
Normally current->jouranl_info is cleared by commit_transaction. For an async snap or subvol creation, though, it runs in a work queue. Clear it in btrfs_commit_transaction_async() to avoid leaking a non-NULL journal_info when we return to userspace. When the actual commit runs in the other thread it won't care that it's current->journal_info is already NULL. Signed-off-by: Sage Weil <sage@newdream.net> Tested-by: Jim Schutt <jaschut@sandia.gov> Signed-off-by: Chris Mason <chris.mason@oracle.com>
-rw-r--r--fs/btrfs/transaction.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/fs/btrfs/transaction.c b/fs/btrfs/transaction.c
index 6b2e4786d189..2b3590b9fe98 100644
--- a/fs/btrfs/transaction.c
+++ b/fs/btrfs/transaction.c
@@ -1118,8 +1118,11 @@ int btrfs_commit_transaction_async(struct btrfs_trans_handle *trans,
wait_current_trans_commit_start_and_unblock(root, cur_trans);
else
wait_current_trans_commit_start(root, cur_trans);
- put_transaction(cur_trans);
+ if (current->journal_info == trans)
+ current->journal_info = NULL;
+
+ put_transaction(cur_trans);
return 0;
}