diff options
author | Sage Weil <sage@newdream.net> | 2011-06-10 22:43:13 +0400 |
---|---|---|
committer | Chris Mason <chris.mason@oracle.com> | 2011-06-11 00:42:29 +0400 |
commit | 38e880540f983045da7a00fbc50daad238207fc5 (patch) | |
tree | 3221e77ecf07f3a25037fccc304788aab33e0724 /fs/btrfs/transaction.c | |
parent | 38e87880666091fe9c572a7a2ed2e771d97ca5aa (diff) | |
download | linux-38e880540f983045da7a00fbc50daad238207fc5.tar.xz |
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>
Diffstat (limited to 'fs/btrfs/transaction.c')
-rw-r--r-- | fs/btrfs/transaction.c | 5 |
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; } |