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: Ilya Dryomov <idryomov@gmail.com>
This commit is contained in:
Ilya Dryomov 2012-03-27 17:09:18 +03:00
parent 5eb56d2520
commit 213e64da90

View File

@ -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;