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

Commit ecbe2402 authored by Chris Mason's avatar Chris Mason
Browse files

Btrfs: Keep fs_mutex during reads done by snapshot deletion



There was an optimization to drop the fs_mutex when doing snapshot deletion
reads, but this can lead to false positives on checksumming errors.  Keep
the lock for now.

Signed-off-by: default avatarChris Mason <chris.mason@oracle.com>
parent 140dfd00
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -2046,11 +2046,12 @@ static int noinline walk_down_tree(struct btrfs_trans_handle *trans,
		if (!next || !btrfs_buffer_uptodate(next)) {
			free_extent_buffer(next);
			reada_walk_down(root, cur, path->slots[*level]);
			mutex_unlock(&root->fs_info->fs_mutex);
			next = read_tree_block(root, bytenr, blocksize);
			mutex_lock(&root->fs_info->fs_mutex);

			/* we dropped the lock, check one more time */
			/* we used to drop the lock above, keep the
			 * code to double check so that we won't forget
			 * when we drop the lock again in the future
			 */
			ret = lookup_extent_ref(trans, root, bytenr,
						blocksize, &refs);
			BUG_ON(ret);