|
@@ -5414,12 +5414,24 @@ int btrfs_compare_trees(struct btrfs_root *left_root,
|
|
|
down_read(&fs_info->commit_root_sem);
|
|
|
left_level = btrfs_header_level(left_root->commit_root);
|
|
|
left_root_level = left_level;
|
|
|
- left_path->nodes[left_level] = left_root->commit_root;
|
|
|
+ left_path->nodes[left_level] =
|
|
|
+ btrfs_clone_extent_buffer(left_root->commit_root);
|
|
|
+ if (!left_path->nodes[left_level]) {
|
|
|
+ up_read(&fs_info->commit_root_sem);
|
|
|
+ ret = -ENOMEM;
|
|
|
+ goto out;
|
|
|
+ }
|
|
|
extent_buffer_get(left_path->nodes[left_level]);
|
|
|
|
|
|
right_level = btrfs_header_level(right_root->commit_root);
|
|
|
right_root_level = right_level;
|
|
|
- right_path->nodes[right_level] = right_root->commit_root;
|
|
|
+ right_path->nodes[right_level] =
|
|
|
+ btrfs_clone_extent_buffer(right_root->commit_root);
|
|
|
+ if (!right_path->nodes[right_level]) {
|
|
|
+ up_read(&fs_info->commit_root_sem);
|
|
|
+ ret = -ENOMEM;
|
|
|
+ goto out;
|
|
|
+ }
|
|
|
extent_buffer_get(right_path->nodes[right_level]);
|
|
|
up_read(&fs_info->commit_root_sem);
|
|
|
|