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

Commit 213e64da authored by Ilya Dryomov's avatar Ilya Dryomov
Browse files

Btrfs: fix infinite loop in btrfs_shrink_device()



If relocate of block group 0 fails with ENOSPC we end up infinitely
looping because key.offset -= 1 statement in that case brings us back to
where we started.

Signed-off-by: default avatarIlya Dryomov <idryomov@gmail.com>
parent 5eb56d25
Loading
Loading
Loading
Loading
+2 −3
Original line number Diff line number Diff line
@@ -2987,7 +2987,7 @@ again:
	key.offset = (u64)-1;
	key.type = BTRFS_DEV_EXTENT_KEY;

	while (1) {
	do {
		ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);
		if (ret < 0)
			goto done;
@@ -3029,8 +3029,7 @@ again:
			goto done;
		if (ret == -ENOSPC)
			failed++;
		key.offset -= 1;
	}
	} while (key.offset-- > 0);

	if (failed && !retried) {
		failed = 0;