From nobody Fri Dec 19 08:07:54 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 542FCC4167B for ; Wed, 6 Dec 2023 09:11:38 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1346888AbjLFJL3 (ORCPT ); Wed, 6 Dec 2023 04:11:29 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55400 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1346777AbjLFJLN (ORCPT ); Wed, 6 Dec 2023 04:11:13 -0500 Received: from out30-100.freemail.mail.aliyun.com (out30-100.freemail.mail.aliyun.com [115.124.30.100]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D194F10C0 for ; Wed, 6 Dec 2023 01:11:18 -0800 (PST) X-Alimail-AntiSpam: AC=PASS;BC=-1|-1;BR=01201311R291e4;CH=green;DM=||false|;DS=||;FP=0|-1|-1|-1|0|-1|-1|-1;HT=ay29a033018045176;MF=hsiangkao@linux.alibaba.com;NM=1;PH=DS;RN=4;SR=0;TI=SMTPD_---0VxxSRQh_1701853876; Received: from e69b19392.et15sqa.tbsite.net(mailfrom:hsiangkao@linux.alibaba.com fp:SMTPD_---0VxxSRQh_1701853876) by smtp.aliyun-inc.com; Wed, 06 Dec 2023 17:11:16 +0800 From: Gao Xiang To: linux-erofs@lists.ozlabs.org Cc: LKML , dhavale@google.com, Gao Xiang Subject: [PATCH 5/5] erofs: enable sub-page compressed block support Date: Wed, 6 Dec 2023 17:10:57 +0800 Message-Id: <20231206091057.87027-6-hsiangkao@linux.alibaba.com> X-Mailer: git-send-email 2.39.3 In-Reply-To: <20231206091057.87027-1-hsiangkao@linux.alibaba.com> References: <20231206091057.87027-1-hsiangkao@linux.alibaba.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Let's just disable cached decompression and inplace I/Os for partial pages as a first step in order to enable sub-page block initial support. In other words, currently it works primarily based on temporary short-lived pages. Don't expect too much in terms of performance. Signed-off-by: Gao Xiang --- fs/erofs/inode.c | 6 ++++-- fs/erofs/zdata.c | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/fs/erofs/inode.c b/fs/erofs/inode.c index 14a79d3226ab..3d616dea55dc 100644 --- a/fs/erofs/inode.c +++ b/fs/erofs/inode.c @@ -259,8 +259,10 @@ static int erofs_fill_inode(struct inode *inode) =20 if (erofs_inode_is_data_compressed(vi->datalayout)) { #ifdef CONFIG_EROFS_FS_ZIP - if (!erofs_is_fscache_mode(inode->i_sb) && - inode->i_sb->s_blocksize_bits =3D=3D PAGE_SHIFT) { + if (!erofs_is_fscache_mode(inode->i_sb)) { + DO_ONCE_LITE_IF(inode->i_sb->s_blocksize !=3D PAGE_SIZE, + erofs_info, inode->i_sb, + "EXPERIMENTAL EROFS subpage compressed block support in use. Use at = your own risk!"); inode->i_mapping->a_ops =3D &z_erofs_aops; err =3D 0; goto out_unlock; diff --git a/fs/erofs/zdata.c b/fs/erofs/zdata.c index d02989466711..a2c3e87d2f81 100644 --- a/fs/erofs/zdata.c +++ b/fs/erofs/zdata.c @@ -563,6 +563,8 @@ static void z_erofs_bind_cache(struct z_erofs_decompres= s_frontend *fe) __GFP_NOMEMALLOC | __GFP_NORETRY | __GFP_NOWARN; unsigned int i; =20 + if (i_blocksize(fe->inode) !=3D PAGE_SIZE) + return; if (fe->mode < Z_EROFS_PCLUSTER_FOLLOWED) return; =20 @@ -967,12 +969,12 @@ static int z_erofs_do_read_page(struct z_erofs_decomp= ress_frontend *fe, struct inode *const inode =3D fe->inode; struct erofs_map_blocks *const map =3D &fe->map; const loff_t offset =3D page_offset(page); + const unsigned int bs =3D i_blocksize(inode); bool tight =3D true, exclusive; unsigned int cur, end, len, split; int err =3D 0; =20 z_erofs_onlinepage_init(page); - split =3D 0; end =3D PAGE_SIZE; repeat: @@ -1021,7 +1023,7 @@ static int z_erofs_do_read_page(struct z_erofs_decomp= ress_frontend *fe, * for inplace I/O or bvpage (should be processed in a strict order.) */ tight &=3D (fe->mode > Z_EROFS_PCLUSTER_FOLLOWED_NOINPLACE); - exclusive =3D (!cur && ((split <=3D 1) || tight)); + exclusive =3D (!cur && ((split <=3D 1) || (tight && bs =3D=3D PAGE_SIZE))= ); if (cur) tight &=3D (fe->mode >=3D Z_EROFS_PCLUSTER_FOLLOWED); =20 --=20 2.39.3