Introduce new helper ext2_xattr_cmp_entry() for xattr entry comparison. Signed-off-by: Chengguang Xu <cgxu519@xxxxxxxxxxx> --- fs/ext2/xattr.c | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/fs/ext2/xattr.c b/fs/ext2/xattr.c index 28503979696d..59356cd2a842 100644 --- a/fs/ext2/xattr.c +++ b/fs/ext2/xattr.c @@ -166,6 +166,21 @@ ext2_xattr_entry_valid(struct ext2_xattr_entry *entry, return true; } +static int +ext2_xattr_cmp_entry(int name_index, size_t name_len, const char *name, + struct ext2_xattr_entry *entry) +{ + int cmp; + + cmp = name_index - entry->e_name_index; + if (!cmp) + cmp = name_len - entry->e_name_len; + if (!cmp) + cmp = memcmp(name, entry->e_name, name_len); + + return cmp; +} + /* * ext2_xattr_get() * @@ -452,13 +467,9 @@ ext2_xattr_set(struct inode *inode, int name_index, const char *name, min_offs = offs; } if (not_found > 0) { - not_found = name_index - last->e_name_index; - if (!not_found) - not_found = name_len - last->e_name_len; - if (!not_found) { - not_found = memcmp(name, last->e_name, - name_len); - } + not_found = ext2_xattr_cmp_entry(name_index, + name_len, + name, last); if (not_found <= 0) here = last; } -- 2.20.1