mirror of
https://github.com/torvalds/linux.git
synced 2024-11-24 05:02:12 +00:00
Btrfs: protect the pending_snapshots list with trans_lock
Currently there is nothing protecting the pending_snapshots list on the transaction. We only hold the directory mutex that we are snapshotting and a read lock on the subvol_sem, so we could race with somebody else creating a snapshot in a different directory and end up with list corruption. So protect this list with the trans_lock. Thanks, Signed-off-by: Josef Bacik <josef@redhat.com>
This commit is contained in:
parent
71d7aed014
commit
8351583e3f
@ -482,8 +482,10 @@ static int create_snapshot(struct btrfs_root *root, struct dentry *dentry,
|
||||
ret = btrfs_snap_reserve_metadata(trans, pending_snapshot);
|
||||
BUG_ON(ret);
|
||||
|
||||
spin_lock(&root->fs_info->trans_lock);
|
||||
list_add(&pending_snapshot->list,
|
||||
&trans->transaction->pending_snapshots);
|
||||
spin_unlock(&root->fs_info->trans_lock);
|
||||
if (async_transid) {
|
||||
*async_transid = trans->transid;
|
||||
ret = btrfs_commit_transaction_async(trans,
|
||||
|
Loading…
Reference in New Issue
Block a user