Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 98c9942a authored by Liu Bo's avatar Liu Bo Committed by Chris Mason
Browse files

Btrfs: fix misuse of trans block rsv



At the beginning of create_pending_snapshot, trans->block_rsv is set
to pending->block_rsv and is used for snapshot things, however, when
it is done, we do not recover it as will.

Signed-off-by: default avatarLiu Bo <liubo2009@cn.fujitsu.com>
Signed-off-by: default avatarChris Mason <chris.mason@oracle.com>
parent 65450aa6
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -884,6 +884,7 @@ static noinline int create_pending_snapshot(struct btrfs_trans_handle *trans,
	struct btrfs_root *tree_root = fs_info->tree_root;
	struct btrfs_root *root = pending->root;
	struct btrfs_root *parent_root;
	struct btrfs_block_rsv *rsv;
	struct inode *parent_inode;
	struct dentry *parent;
	struct dentry *dentry;
@@ -895,6 +896,8 @@ static noinline int create_pending_snapshot(struct btrfs_trans_handle *trans,
	u64 objectid;
	u64 root_flags;

	rsv = trans->block_rsv;

	new_root_item = kmalloc(sizeof(*new_root_item), GFP_NOFS);
	if (!new_root_item) {
		pending->error = -ENOMEM;
@@ -1002,6 +1005,7 @@ static noinline int create_pending_snapshot(struct btrfs_trans_handle *trans,
	btrfs_orphan_post_snapshot(trans, pending);
fail:
	kfree(new_root_item);
	trans->block_rsv = rsv;
	btrfs_block_rsv_release(root, &pending->block_rsv, (u64)-1);
	return 0;
}