Hi,Xiang

On 2026/1/14 22:51, Gao Xiang wrote:


On 2026/1/9 18:28, Hongbo Li wrote:
This patch adds inode page cache sharing functionality for unencoded
files.

I conducted experiments in the container environment. Below is the

...
              iomap->inline_data = ptr;
@@ -383,11 +385,16 @@ static int erofs_read_folio(struct file *file, struct folio *folio)
          .ops        = &iomap_bio_read_ops,
          .cur_folio    = folio,
      };
-    struct erofs_iomap_iter_ctx iter_ctx = {};
+    bool need_iput;
+    struct erofs_iomap_iter_ctx iter_ctx = {
+        .realinode = erofs_real_inode(folio_inode(folio), &need_iput),
+    };
-    trace_erofs_read_folio(folio, true);
+    trace_erofs_read_folio(iter_ctx.realinode, folio, true);
      iomap_read_folio(&erofs_iomap_ops, &read_ctx, &iter_ctx);
+    if (need_iput)
+        iput(iter_ctx.realinode);
      return 0;
  }
@@ -397,12 +404,17 @@ static void erofs_readahead(struct readahead_control *rac)
          .ops        = &iomap_bio_read_ops,
          .rac        = rac,
      };
-    struct erofs_iomap_iter_ctx iter_ctx = {};
+    bool need_iput;
+    struct erofs_iomap_iter_ctx iter_ctx = {
+        .realinode = erofs_real_inode(rac->mapping->host, &need_iput),
+    };
-    trace_erofs_readahead(rac->mapping->host, readahead_index(rac),
+    trace_erofs_readahead(iter_ctx.realinode, readahead_index(rac),
                      readahead_count(rac), true);

Is it possible to add a commit to update the tracepoints
to add the new realinode first?

Yeah, so should we put the update on trace_erofs_read_folio and trace_erofs_readahead in a single patch after "[PATCH v14 03/10] fs: Export alloc_empty_backing_file"?

Since the first two patches in this series has merged in vfs tree (thanks Christian), should we reorder the left patches?

Thanks,
Hongbo



Also please fix the indentation in that commit together.

      iomap_readahead(&erofs_iomap_ops, &read_ctx, &iter_ctx);
+    if (need_iput)
+        iput(iter_ctx.realinode);
  }
  static sector_t erofs_bmap(struct address_space *mapping, sector_t block) @@ -423,7 +435,9 @@ static ssize_t erofs_file_read_iter(struct kiocb

...
  }
  const struct address_space_operations erofs_fileio_aops = {
diff --git a/fs/erofs/inode.c b/fs/erofs/inode.c
index bce98c845a18..52179b706b5b 100644
--- a/fs/erofs/inode.c
+++ b/fs/erofs/inode.c
@@ -215,6 +215,8 @@ static int erofs_fill_inode(struct inode *inode)
      case S_IFREG:
          inode->i_op = &erofs_generic_iops;
          inode->i_fop = &erofs_file_fops;
+        if (erofs_ishare_fill_inode(inode))
+            inode->i_fop = &erofs_ishare_fops;

         inode->i_fop = erofs_ishare_fill_inode(inode) ?
             &erofs_ishare_fops : &erofs_file_fops;

Ok, will update.


Otherwise it looks good to me.

Thanks,
Gao Xiang

Reply via email to