mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-16 09:13:55 +08:00
Btrfs: fix regression in raid level conversion
Commit2f0810880f
changed btrfs_set_block_group_ro to avoid trying to allocate new chunks with the new raid profile during conversion. This fixed failures when there was no space on the drive to allocate a new chunk, but the metadata reserves were sufficient to continue the conversion. But this ended up causing a regression when the drive had plenty of space to allocate new chunks, mostly because reduce_alloc_profile isn't using the new raid profile. Fixing btrfs_reduce_alloc_profile is a bigger patch. For now, do a partial revert of2f0810880
, and don't error out if we hit ENOSPC. Signed-off-by: Chris Mason <clm@fb.com> Tested-by: Dave Sterba <dsterba@suse.cz> Reported-by: Holger Hoffstaette <holger.hoffstaette@googlemail.com>
This commit is contained in:
parent
a96295965b
commit
153c35b6cc
@ -8829,6 +8829,24 @@ again:
|
||||
goto again;
|
||||
}
|
||||
|
||||
/*
|
||||
* if we are changing raid levels, try to allocate a corresponding
|
||||
* block group with the new raid level.
|
||||
*/
|
||||
alloc_flags = update_block_group_flags(root, cache->flags);
|
||||
if (alloc_flags != cache->flags) {
|
||||
ret = do_chunk_alloc(trans, root, alloc_flags,
|
||||
CHUNK_ALLOC_FORCE);
|
||||
/*
|
||||
* ENOSPC is allowed here, we may have enough space
|
||||
* already allocated at the new raid level to
|
||||
* carry on
|
||||
*/
|
||||
if (ret == -ENOSPC)
|
||||
ret = 0;
|
||||
if (ret < 0)
|
||||
goto out;
|
||||
}
|
||||
|
||||
ret = set_block_group_ro(cache, 0);
|
||||
if (!ret)
|
||||
|
Loading…
Reference in New Issue
Block a user