From: Gao Xiang <hsiangkao@linux.alibaba.com>
To: linux-erofs@lists.ozlabs.org
Cc: LKML <linux-kernel@vger.kernel.org>,
Gao Xiang <hsiangkao@linux.alibaba.com>
Subject: [PATCH 4/8] erofs: tidy up z_erofs_do_read_page()
Date: Thu, 17 Aug 2023 16:28:09 +0800 [thread overview]
Message-ID: <20230817082813.81180-4-hsiangkao@linux.alibaba.com> (raw)
In-Reply-To: <20230817082813.81180-1-hsiangkao@linux.alibaba.com>
- Fix a typo: spiltted => split;
- Move !EROFS_MAP_MAPPED and EROFS_MAP_FRAGMENT upwards;
- Increase `split` in advance to avoid unnecessary repeat.
Signed-off-by: Gao Xiang <hsiangkao@linux.alibaba.com>
---
fs/erofs/zdata.c | 53 ++++++++++++++++++++++--------------------------
1 file changed, 24 insertions(+), 29 deletions(-)
diff --git a/fs/erofs/zdata.c b/fs/erofs/zdata.c
index 30ecdfe41836..a200e99f7d4f 100644
--- a/fs/erofs/zdata.c
+++ b/fs/erofs/zdata.c
@@ -980,49 +980,34 @@ static int z_erofs_do_read_page(struct z_erofs_decompress_frontend *fe,
struct erofs_map_blocks *const map = &fe->map;
const loff_t offset = page_offset(page);
bool tight = true, exclusive;
- unsigned int cur, end, len, spiltted;
+ unsigned int cur, end, len, split;
int err = 0;
- /* register locked file pages as online pages in pack */
z_erofs_onlinepage_init(page);
- spiltted = 0;
+ split = 0;
end = PAGE_SIZE;
repeat:
- cur = end - 1;
-
- if (offset + cur < map->m_la ||
- offset + cur >= map->m_la + map->m_llen) {
+ if (offset + end - 1 < map->m_la ||
+ offset + end - 1 >= map->m_la + map->m_llen) {
z_erofs_pcluster_end(fe);
- map->m_la = offset + cur;
+ map->m_la = offset + end - 1;
map->m_llen = 0;
err = z_erofs_map_blocks_iter(inode, map, 0);
if (err)
goto out;
- } else if (fe->pcl) {
- goto hitted;
}
- if ((map->m_flags & EROFS_MAP_MAPPED) &&
- !(map->m_flags & EROFS_MAP_FRAGMENT)) {
- err = z_erofs_pcluster_begin(fe);
- if (err)
- goto out;
- }
-hitted:
- /*
- * Ensure the current partial page belongs to this submit chain rather
- * than other concurrent submit chains or the noio(bypass) chain since
- * those chains are handled asynchronously thus the page cannot be used
- * for inplace I/O or bvpage (should be processed in a strict order.)
- */
- tight &= (fe->mode > Z_EROFS_PCLUSTER_FOLLOWED_NOINPLACE);
+ cur = offset > map->m_la ? 0 : map->m_la - offset;
+ /* bump split parts first to avoid several separate cases */
+ ++split;
- cur = end - min_t(erofs_off_t, offset + end - map->m_la, end);
if (!(map->m_flags & EROFS_MAP_MAPPED)) {
zero_user_segment(page, cur, end);
+ tight = false;
goto next_part;
}
+
if (map->m_flags & EROFS_MAP_FRAGMENT) {
erofs_off_t fpos = offset + cur - map->m_la;
@@ -1031,12 +1016,24 @@ static int z_erofs_do_read_page(struct z_erofs_decompress_frontend *fe,
EROFS_I(inode)->z_fragmentoff + fpos);
if (err)
goto out;
- ++spiltted;
tight = false;
goto next_part;
}
- exclusive = (!cur && (!spiltted || tight));
+ if (!fe->pcl) {
+ err = z_erofs_pcluster_begin(fe);
+ if (err)
+ goto out;
+ }
+
+ /*
+ * Ensure the current partial page belongs to this submit chain rather
+ * than other concurrent submit chains or the noio(bypass) chain since
+ * those chains are handled asynchronously thus the page cannot be used
+ * for inplace I/O or bvpage (should be processed in a strict order.)
+ */
+ tight &= (fe->mode > Z_EROFS_PCLUSTER_FOLLOWED_NOINPLACE);
+ exclusive = (!cur && ((split <= 1) || tight));
if (cur)
tight &= (fe->mode >= Z_EROFS_PCLUSTER_FOLLOWED);
@@ -1049,8 +1046,6 @@ static int z_erofs_do_read_page(struct z_erofs_decompress_frontend *fe,
goto out;
z_erofs_onlinepage_split(page);
- /* bump up the number of spiltted parts of a page */
- ++spiltted;
if (fe->pcl->pageofs_out != (map->m_la & ~PAGE_MASK))
fe->pcl->multibases = true;
if (fe->pcl->length < offset + end - map->m_la) {
--
2.24.4
next prev parent reply other threads:[~2023-08-17 8:29 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-08-17 8:28 [PATCH 1/8] erofs: simplify z_erofs_read_fragment() Gao Xiang
2023-08-17 8:28 ` [PATCH 2/8] erofs: avoid obsolete {collector,collection} terms Gao Xiang
2023-08-18 2:25 ` Yue Hu
2023-08-23 14:58 ` Chao Yu
2023-08-17 8:28 ` [PATCH 3/8] erofs: move preparation logic into z_erofs_pcluster_begin() Gao Xiang
2023-08-18 2:42 ` Yue Hu
2023-08-23 15:05 ` Chao Yu
2023-08-23 15:22 ` Gao Xiang
2023-08-17 8:28 ` Gao Xiang [this message]
2023-08-18 3:12 ` [PATCH 4/8] erofs: tidy up z_erofs_do_read_page() Yue Hu
2023-08-23 15:09 ` Chao Yu
2023-08-17 8:28 ` [PATCH 5/8] erofs: drop z_erofs_page_mark_eio() Gao Xiang
2023-08-18 3:20 ` Yue Hu
2023-08-23 15:19 ` Chao Yu
2023-08-17 8:28 ` [PATCH 6/8] erofs: get rid of fe->backmost for cache decompression Gao Xiang
2023-08-18 5:51 ` Yue Hu
2023-08-18 7:48 ` Gao Xiang
2023-08-18 8:02 ` Yue Hu
2023-08-23 15:19 ` Chao Yu
2023-08-17 8:28 ` [PATCH 7/8] erofs: adapt folios for z_erofs_readahead() Gao Xiang
2023-08-23 15:22 ` Chao Yu
2023-08-17 8:28 ` [PATCH 8/8] erofs: adapt folios for z_erofs_read_folio() Gao Xiang
2023-08-17 8:39 ` [PATCH v2 " Gao Xiang
2023-08-23 15:23 ` [PATCH " Chao Yu
2023-08-18 2:18 ` [PATCH 1/8] erofs: simplify z_erofs_read_fragment() Yue Hu
2023-08-23 14:56 ` Chao Yu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230817082813.81180-4-hsiangkao@linux.alibaba.com \
--to=hsiangkao@linux.alibaba.com \
--cc=linux-erofs@lists.ozlabs.org \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®