Re: [PATCH] ext4: optimize the implementation of ext4_mb_good_group()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 





On 8/7/20 7:31 PM, brookxu wrote:
It might be better to adjust the code in two places:
1. Determine whether grp is currupt or not should be placed first.
2. (cr<=2 && free <ac->ac_g_ex.fe_len)should may belong to the crx
    strategy, and it may be more appropriate to put it in the
    subsequent switch statement block. For cr1, cr2, the conditions
    in switch potentially realize the above judgment. For cr0, we
    should add (free <ac->ac_g_ex.fe_len) judgment, and then delete
    (free / fragments) >= ac->ac_g_ex.fe_len), because cr0 returns
    true by default.

Signed-off-by: Chunguang Xu <brookxu@xxxxxxxxxxx>


Nice cleanup. This makes it less confusing :)

Logic looks fine to me.
Reviewed-by: Ritesh Harjani <riteshh@xxxxxxxxxxxxx>


---
  fs/ext4/mballoc.c | 14 +++++++-------
  1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c
index 28a139f..4304113 100644
--- a/fs/ext4/mballoc.c
+++ b/fs/ext4/mballoc.c
@@ -2119,13 +2119,11 @@ static bool ext4_mb_good_group(struct ext4_allocation_context *ac,

  	BUG_ON(cr < 0 || cr >= 4);

-	free = grp->bb_free;
-	if (free == 0)
-		return false;
-	if (cr <= 2 && free < ac->ac_g_ex.fe_len)
+	if (unlikely(EXT4_MB_GRP_BBITMAP_CORRUPT(grp)))
  		return false;

-	if (unlikely(EXT4_MB_GRP_BBITMAP_CORRUPT(grp)))
+	free = grp->bb_free;
+	if (free == 0)
  		return false;

  	fragments = grp->bb_fragments;
@@ -2142,8 +2140,10 @@ static bool ext4_mb_good_group(struct ext4_allocation_context *ac,
  		    ((group % flex_size) == 0))
  			return false;

-		if ((ac->ac_2order > ac->ac_sb->s_blocksize_bits+1) ||
-		    (free / fragments) >= ac->ac_g_ex.fe_len)
+		if (free < ac->ac_g_ex.fe_len)
+			return false;
+
+		if (ac->ac_2order > ac->ac_sb->s_blocksize_bits+1)
  			return true;

  		if (grp->bb_largest_free_order < ac->ac_2order)




[Index of Archives]     [Reiser Filesystem Development]     [Ceph FS]     [Kernel Newbies]     [Security]     [Netfilter]     [Bugtraq]     [Linux FS]     [Yosemite National Park]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Device Mapper]     [Linux Media]

  Powered by Linux