forked from Minki/linux
btrfs: hold a ref on the root in create_pending_snapshot
We create the snapshot and then use it for a bunch of things, we need to hold a ref on it while we're messing with it. Signed-off-by: Josef Bacik <josef@toxicpanda.com> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
5168489a07
commit
5119cfc36f
@ -875,6 +875,7 @@ static int create_snapshot(struct btrfs_root *root, struct inode *dir,
|
||||
d_instantiate(dentry, inode);
|
||||
ret = 0;
|
||||
fail:
|
||||
btrfs_put_fs_root(pending_snapshot->snap);
|
||||
btrfs_subvolume_release_metadata(fs_info, &pending_snapshot->block_rsv);
|
||||
dec_and_free:
|
||||
if (snapshot_force_cow)
|
||||
|
@ -1639,6 +1639,12 @@ static noinline int create_pending_snapshot(struct btrfs_trans_handle *trans,
|
||||
btrfs_abort_transaction(trans, ret);
|
||||
goto fail;
|
||||
}
|
||||
if (!btrfs_grab_fs_root(pending->snap)) {
|
||||
ret = -ENOENT;
|
||||
pending->snap = NULL;
|
||||
btrfs_abort_transaction(trans, ret);
|
||||
goto fail;
|
||||
}
|
||||
|
||||
ret = btrfs_reloc_post_snapshot(trans, pending);
|
||||
if (ret) {
|
||||
|
Loading…
Reference in New Issue
Block a user