On 2026/1/22 21:37, Hongbo Li wrote:
From: Hongzhen Luo <[email protected]>

Currently, reading files with different paths (or names) but the same
content will consume multiple copies of the page cache, even if the
content of these page caches is the same. For example, reading
identical files (e.g., *.so files) from two different minor versions of
container images will cost multiple copies of the same page cache,
since different containers have different mount points. Therefore,
sharing the page cache for files with the same content can save memory.

This introduces the page cache share feature in erofs. It allocate a
shared inode and use its page cache as shared. Reads for files
with identical content will ultimately be routed to the page cache of
the shared inode. In this way, a single page cache satisfies
multiple read requests for different files with the same contents.

We introduce new mount option `inode_share` to enable the page
sharing mode during mounting. This option is used in conjunction
with `domain_id` to share the page cache within the same trusted
domain.

Signed-off-by: Hongzhen Luo <[email protected]>
Signed-off-by: Hongbo Li <[email protected]>
---
  Documentation/filesystems/erofs.rst |   5 +
  fs/erofs/Makefile                   |   1 +
  fs/erofs/inode.c                    |   1 -
  fs/erofs/internal.h                 |  31 ++++++
  fs/erofs/ishare.c                   | 167 ++++++++++++++++++++++++++++
  fs/erofs/super.c                    |  62 ++++++++++-
  fs/erofs/xattr.c                    |  34 ++++++
  fs/erofs/xattr.h                    |   3 +
  8 files changed, 301 insertions(+), 3 deletions(-)
  create mode 100644 fs/erofs/ishare.c

diff --git a/Documentation/filesystems/erofs.rst 
b/Documentation/filesystems/erofs.rst
index 40dbf3b6a35f..bfef8e87f299 100644
--- a/Documentation/filesystems/erofs.rst
+++ b/Documentation/filesystems/erofs.rst
@@ -129,7 +129,12 @@ fsid=%s                Specify a filesystem image ID for 
Fscache back-end.
  domain_id=%s           Specify a trusted domain ID for fscache mode so that
                         different images with the same blobs, identified by 
blob IDs,
                         can share storage within the same trusted domain.
+                       Also used for different filesystems with inode page 
sharing
+                       enabled to share page cache within the trusted domain.
  fsoffset=%llu          Specify block-aligned filesystem offset for the 
primary device.
+inode_share            Enable inode page sharing for this filesystem.  Inodes 
with
+                       identical content within the same domain ID can share 
the
+                       page cache.
  ===================    
=========================================================
Sysfs Entries
diff --git a/fs/erofs/Makefile b/fs/erofs/Makefile
index 549abc424763..a80e1762b607 100644
--- a/fs/erofs/Makefile
+++ b/fs/erofs/Makefile
@@ -10,3 +10,4 @@ erofs-$(CONFIG_EROFS_FS_ZIP_ZSTD) += decompressor_zstd.o
  erofs-$(CONFIG_EROFS_FS_ZIP_ACCEL) += decompressor_crypto.o
  erofs-$(CONFIG_EROFS_FS_BACKED_BY_FILE) += fileio.o
  erofs-$(CONFIG_EROFS_FS_ONDEMAND) += fscache.o
+erofs-$(CONFIG_EROFS_FS_PAGE_CACHE_SHARE) += ishare.o
diff --git a/fs/erofs/inode.c b/fs/erofs/inode.c
index 389632bb46c4..202cbbb4eada 100644
--- a/fs/erofs/inode.c
+++ b/fs/erofs/inode.c
@@ -203,7 +203,6 @@ static int erofs_read_inode(struct inode *inode)
static int erofs_fill_inode(struct inode *inode)
  {
-       struct erofs_inode *vi = EROFS_I(inode);

Why this line is in this patch other than
"erofs: add erofs_inode_set_aops helper to set the aops[.]"

And there is an unneeded dot at the end of the subject.

Could you check the patches carefully before sending
out the next version?

Thanks,
Gao Xiang

Reply via email to