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

Commit e8916699 authored by Liu Bo's avatar Liu Bo Committed by David Sterba
Browse files

Btrfs: fix deadlock in run_delalloc_nocow



@cur_offset is not set back to what it should be (@cow_start) if
btrfs_next_leaf() returns something wrong, and the range [cow_start,
cur_offset) remains locked forever.

cc: <stable@vger.kernel.org>
Signed-off-by: default avatarLiu Bo <bo.li.liu@oracle.com>
Reviewed-by: default avatarJosef Bacik <jbacik@fb.com>
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent 3acbcbfc
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -1334,8 +1334,11 @@ static noinline int run_delalloc_nocow(struct inode *inode,
		leaf = path->nodes[0];
		if (path->slots[0] >= btrfs_header_nritems(leaf)) {
			ret = btrfs_next_leaf(root, path);
			if (ret < 0)
			if (ret < 0) {
				if (cow_start != (u64)-1)
					cur_offset = cow_start;
				goto error;
			}
			if (ret > 0)
				break;
			leaf = path->nodes[0];