On 2019/11/25 下午10:40, Josef Bacik wrote: > This is a relic from a time before we had a proper reservation mechanism > and you could end up with really full chunks at chunk allocation time. > This doesn't make sense anymore, so just kill it. > > Signed-off-by: Josef Bacik > --- > fs/btrfs/block-group.c | 22 ++++------------------ > 1 file changed, 4 insertions(+), 18 deletions(-) > > diff --git a/fs/btrfs/block-group.c b/fs/btrfs/block-group.c > index 6934a5b8708f..db539bfc5a52 100644 > --- a/fs/btrfs/block-group.c > +++ b/fs/btrfs/block-group.c > @@ -1185,21 +1185,8 @@ static int inc_block_group_ro(struct btrfs_block_group *cache, int force) > struct btrfs_space_info *sinfo = cache->space_info; > u64 num_bytes; > u64 sinfo_used; > - u64 min_allocable_bytes; > int ret = -ENOSPC; > > - /* > - * We need some metadata space and system metadata space for > - * allocating chunks in some corner cases until we force to set > - * it to be readonly. > - */ > - if ((sinfo->flags & > - (BTRFS_BLOCK_GROUP_SYSTEM | BTRFS_BLOCK_GROUP_METADATA)) && > - !force) > - min_allocable_bytes = SZ_1M; > - else > - min_allocable_bytes = 0; > - > spin_lock(&sinfo->lock); > spin_lock(&cache->lock); > > @@ -1217,10 +1204,9 @@ static int inc_block_group_ro(struct btrfs_block_group *cache, int force) > * sinfo_used + num_bytes should always <= sinfo->total_bytes. > * > * Here we make sure if we mark this bg RO, we still have enough > - * free space as buffer (if min_allocable_bytes is not 0). > + * free space as buffer. > */ > - if (sinfo_used + num_bytes + min_allocable_bytes <= > - sinfo->total_bytes) { > + if (sinfo_used + num_bytes + sinfo->total_bytes) { I guess it's a typo. It should be "if (sinfo_used + num_bytes <= sinfo->total_bytes) {" Although the last patch will remove the check, it's still better to keep each patch works fine to make bisect easier. Thanks, Qu > sinfo->bytes_readonly += num_bytes; > cache->ro++; > list_add_tail(&cache->ro_list, &sinfo->ro_bgs); > @@ -1233,8 +1219,8 @@ static int inc_block_group_ro(struct btrfs_block_group *cache, int force) > btrfs_info(cache->fs_info, > "unable to make block group %llu ro", cache->start); > btrfs_info(cache->fs_info, > - "sinfo_used=%llu bg_num_bytes=%llu min_allocable=%llu", > - sinfo_used, num_bytes, min_allocable_bytes); > + "sinfo_used=%llu bg_num_bytes=%llu", > + sinfo_used, num_bytes); > btrfs_dump_space_info(cache->fs_info, cache->space_info, 0, 0); > } > return ret; >