]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
ext4: Refactor breaking condition for xattr_find_entry()
authorI Hsin Cheng <richard120310@gmail.com>
Tue, 8 Jul 2025 02:00:13 +0000 (10:00 +0800)
committerTheodore Ts'o <tytso@mit.edu>
Thu, 17 Jul 2025 14:41:05 +0000 (10:41 -0400)
Refactor the condition for breaking the loop within xattr_find_entry().
Elimate the usage of "<=" and take condition shortcut when "!cmp" is
true.

Originally, the condition was "(cmp <= 0 && (sorted || cmp == 0))", which
means after it knows "cmp <= 0" is true, it has to check the value of
"sorted" and "cmp". The checking of "cmp" here would be redundant since
it has already checked it.

Observing from the logic, when "cmp == 0" the branch is going to be true,
no need to check "cmp == 0" again, so we only need to take shortcut when
"cmp == 0", on the other hand, we'll check "sorted" when "cmp < 0".

The refactor can shrink the generated code size by 44 bytes. Numerous
instructions can be saved thus should also benefit execution efficiency
as well.

$ ./scripts/bloat-o-meter vmlinux_old vmlinux_new
add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-44 (-44)
Function                                     old     new   delta
xattr_find_entry                             300     256     -44
Total: Before=22989434, After=22989390, chg -0.00%

The test is done on kernel version 6.16 with x86_64 defconfig
and gcc 13.3.0.

Signed-off-by: I Hsin Cheng <richard120310@gmail.com>
Link: https://patch.msgid.link/20250708020013.175728-1-richard120310@gmail.com
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
fs/ext4/xattr.c

index 3fb93247330d10c79ef7fe73d0820664ef8669e2..5a6fe1513fd20522b8f310afa2e78de62d053f12 100644 (file)
@@ -338,7 +338,7 @@ xattr_find_entry(struct inode *inode, struct ext4_xattr_entry **pentry,
                        cmp = name_len - entry->e_name_len;
                if (!cmp)
                        cmp = memcmp(name, entry->e_name, name_len);
-               if (cmp <= 0 && (sorted || cmp == 0))
+               if (!cmp || (cmp < 0 && sorted))
                        break;
        }
        *pentry = entry;