]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
erofs: clean up erofs_ishare_fill_inode()
authorGao Xiang <hsiangkao@linux.alibaba.com>
Sun, 7 Jun 2026 17:21:32 +0000 (01:21 +0800)
committerGao Xiang <hsiangkao@linux.alibaba.com>
Wed, 17 Jun 2026 03:19:51 +0000 (11:19 +0800)
 - Use the shorthand `si` to replace the overly long `sharedinode`;

 - Introduce erofs_warn() and get rid of barely-used _erofs_printk();

 - Get rid of the variable `hash`;

 - Simplify error paths.

Reviewed-by: Hongbo Li <lihongbo22@huawei.com>
Reviewed-by: Chao Yu <chao@kernel.org>
Signed-off-by: Gao Xiang <hsiangkao@linux.alibaba.com>
fs/erofs/internal.h
fs/erofs/ishare.c

index 4792490161ec9e7c86951c8d1dda98b0b2774789..9e2ae7b619773b801a29249a160aa3cc5f41f2bc 100644 (file)
@@ -23,6 +23,8 @@
 __printf(2, 3) void _erofs_printk(struct super_block *sb, const char *fmt, ...);
 #define erofs_err(sb, fmt, ...)        \
        _erofs_printk(sb, KERN_ERR fmt "\n", ##__VA_ARGS__)
+#define erofs_warn(sb, fmt, ...) \
+       _erofs_printk(sb, KERN_WARNING fmt "\n", ##__VA_ARGS__)
 #define erofs_info(sb, fmt, ...) \
        _erofs_printk(sb, KERN_INFO fmt "\n", ##__VA_ARGS__)
 
index 6ed66b17359ba1d0e57528e35221409e334663a3..35cbd0bc04d7de48ce8ba5ea9dc052c9fca4df9c 100644 (file)
@@ -40,49 +40,42 @@ static int erofs_ishare_iget5_set(struct inode *inode, void *data)
 bool erofs_ishare_fill_inode(struct inode *inode)
 {
        struct erofs_sb_info *sbi = EROFS_SB(inode->i_sb);
-       struct erofs_inode *vi = EROFS_I(inode);
        const struct address_space_operations *aops;
+       struct erofs_inode *vi = EROFS_I(inode);
        struct erofs_inode_fingerprint fp;
-       struct inode *sharedinode;
-       unsigned long hash;
+       struct inode *si;
 
        aops = erofs_get_aops(inode, true);
        if (IS_ERR(aops))
                return false;
        if (erofs_xattr_fill_inode_fingerprint(&fp, inode, sbi->domain_id))
                return false;
-       hash = xxh32(fp.opaque, fp.size, 0);
-       sharedinode = iget5_locked(erofs_ishare_mnt->mnt_sb, hash,
-                                  erofs_ishare_iget5_eq, erofs_ishare_iget5_set,
-                                  &fp);
-       if (!sharedinode) {
-               kfree(fp.opaque);
-               return false;
-       }
 
-       if (inode_state_read_once(sharedinode) & I_NEW) {
-               sharedinode->i_mapping->a_ops = aops;
-               sharedinode->i_size = vi->vfs_inode.i_size;
-               unlock_new_inode(sharedinode);
+       si = iget5_locked(erofs_ishare_mnt->mnt_sb,
+                         xxh32(fp.opaque, fp.size, 0),
+                         erofs_ishare_iget5_eq, erofs_ishare_iget5_set, &fp);
+       if (si && (inode_state_read_once(si) & I_NEW)) {
+               si->i_mapping->a_ops = aops;
+               si->i_size = inode->i_size;
+               unlock_new_inode(si);
        } else {
                kfree(fp.opaque);
-               if (aops != sharedinode->i_mapping->a_ops) {
-                       iput(sharedinode);
+               if (!si || aops != si->i_mapping->a_ops) {
+                       iput(si);
                        return false;
                }
-               if (sharedinode->i_size != vi->vfs_inode.i_size) {
-                       _erofs_printk(inode->i_sb, KERN_WARNING
-                               "size(%lld:%lld) not matches for the same fingerprint\n",
-                               vi->vfs_inode.i_size, sharedinode->i_size);
-                       iput(sharedinode);
+               if (si->i_size != inode->i_size) {
+                       erofs_warn(inode->i_sb, "i_size mismatch (%lld != %lld) for the same fingerprint",
+                                  inode->i_size, si->i_size);
+                       iput(si);
                        return false;
                }
        }
-       vi->sharedinode = sharedinode;
+       vi->sharedinode = si;
        INIT_LIST_HEAD(&vi->ishare_list);
-       spin_lock(&EROFS_I(sharedinode)->ishare_lock);
-       list_add(&vi->ishare_list, &EROFS_I(sharedinode)->ishare_list);
-       spin_unlock(&EROFS_I(sharedinode)->ishare_lock);
+       spin_lock(&EROFS_I(si)->ishare_lock);
+       list_add(&vi->ishare_list, &EROFS_I(si)->ishare_list);
+       spin_unlock(&EROFS_I(si)->ishare_lock);
        return true;
 }