mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-07 13:57:54 -04:00
Merge tag 'for-5.7-rc1-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux
Pull btrfs fix from David Sterba: "A regression fix for a warning caused by running balance and snapshot creation in parallel" * tag 'for-5.7-rc1-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux: btrfs: fix setting last_trans for reloc roots
This commit is contained in:
@@ -1527,8 +1527,7 @@ int btrfs_init_reloc_root(struct btrfs_trans_handle *trans,
|
||||
int clear_rsv = 0;
|
||||
int ret;
|
||||
|
||||
if (!rc || !rc->create_reloc_tree ||
|
||||
root->root_key.objectid == BTRFS_TREE_RELOC_OBJECTID)
|
||||
if (!rc)
|
||||
return 0;
|
||||
|
||||
/*
|
||||
@@ -1538,12 +1537,28 @@ int btrfs_init_reloc_root(struct btrfs_trans_handle *trans,
|
||||
if (reloc_root_is_dead(root))
|
||||
return 0;
|
||||
|
||||
/*
|
||||
* This is subtle but important. We do not do
|
||||
* record_root_in_transaction for reloc roots, instead we record their
|
||||
* corresponding fs root, and then here we update the last trans for the
|
||||
* reloc root. This means that we have to do this for the entire life
|
||||
* of the reloc root, regardless of which stage of the relocation we are
|
||||
* in.
|
||||
*/
|
||||
if (root->reloc_root) {
|
||||
reloc_root = root->reloc_root;
|
||||
reloc_root->last_trans = trans->transid;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* We are merging reloc roots, we do not need new reloc trees. Also
|
||||
* reloc trees never need their own reloc tree.
|
||||
*/
|
||||
if (!rc->create_reloc_tree ||
|
||||
root->root_key.objectid == BTRFS_TREE_RELOC_OBJECTID)
|
||||
return 0;
|
||||
|
||||
if (!trans->reloc_reserved) {
|
||||
rsv = trans->block_rsv;
|
||||
trans->block_rsv = rc->block_rsv;
|
||||
|
||||
Reference in New Issue
Block a user