[PATCH] erofs: allocate compressed page from reserved buffer pool first if cache decompression is disabled
Chunhai Guo
guochunhai at vivo.com
Tue Aug 13 20:25:30 AEST 2024
When erofs cache decompression is disabled (EROFS_ZIP_CACHE_DISABLED),
pages allocated for compressed clusters are freed soon after
decompression. This can reduce the page allocation time by first
allocating pages from the reserved buffer pool [1].
[1] The reserved buffer pool and its benefits are detailed in
commit 0f6273ab4637 ("erofs: add a reserved buffer pool for lz4
decompression").
Signed-off-by: Chunhai Guo <guochunhai at vivo.com>
---
fs/erofs/internal.h | 5 +++++
fs/erofs/zdata.c | 3 ++-
2 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/fs/erofs/internal.h b/fs/erofs/internal.h
index 45dc15ebd870..e768990bf20f 100644
--- a/fs/erofs/internal.h
+++ b/fs/erofs/internal.h
@@ -201,6 +201,11 @@ enum {
EROFS_ZIP_CACHE_READAROUND
};
+static inline bool erofs_is_cache_disabled(struct erofs_sb_info *sbi)
+{
+ return sbi->opt.cache_strategy == EROFS_ZIP_CACHE_DISABLED;
+}
+
/* basic unit of the workstation of a super_block */
struct erofs_workgroup {
pgoff_t index;
diff --git a/fs/erofs/zdata.c b/fs/erofs/zdata.c
index 424f656cd765..b979529be5ed 100644
--- a/fs/erofs/zdata.c
+++ b/fs/erofs/zdata.c
@@ -1496,7 +1496,8 @@ static void z_erofs_fill_bio_vec(struct bio_vec *bvec,
folio_unlock(folio);
folio_put(folio);
out_allocfolio:
- zbv.page = erofs_allocpage(&f->pagepool, gfp | __GFP_NOFAIL);
+ zbv.page = __erofs_allocpage(&f->pagepool, gfp | __GFP_NOFAIL,
+ erofs_is_cache_disabled(EROFS_I_SB(f->inode)));
spin_lock(&pcl->obj.lockref.lock);
if (pcl->compressed_bvecs[nr].page) {
erofs_pagepool_add(&f->pagepool, zbv.page);
--
2.25.1
More information about the Linux-erofs
mailing list