[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <20260105153101.152892-1-nzzhao@126.com>
Date: Mon, 5 Jan 2026 23:30:56 +0800
From: Nanzhe Zhao <nzzhao@....com>
To: Kim Jaegeuk <jaegeuk@...nel.org>
Cc: Chao Yu <chao@...nel.org>,
linux-f2fs-devel@...ts.sourceforge.net,
linux-kernel@...r.kernel.org,
Nanzhe Zhao <nzzhao@....com>
Subject: [PATCH v1 0/5] f2fs: fix large folio read corner cases for immutable files
When reading immutable, non-compressed files with large folios enabled,
I was able to reproduce readahead hangs while reading sparse files with
holes and heavily fragmented files. The problems were caused by a few
corner cases in the large-folio read loop:
- f2fs_folio_state could be observed with uninitialized field
read_pages_pending
- subpage accounting could become inconsistent with BIO completion,
leading to folios being prematurely unlocked/marked uptodate.
- NULL_ADDR/NEW_ADDR blocks can carry F2FS_MAP_MAPPED, causing the
large-folio read path to treat hole blocks as mapped and to account
them in read_pages_pending.
- in readahead, a folio that never had any subpage queued to a BIO
would not be seen by f2fs_finish_read_bio(), leaving it locked.
- the zeroing path did not advance index/offset before continuing.
This patch series fixes the above issues in f2fs_read_data_large_folio()
introduced by commit 05e65c14ea59 ("f2fs: support large folio for
immutable non-compressed case").
Testing
-------
All patches pass scripts/checkpatch.pl.
I tested the basic large-folio immutable read case described in the
original thread (create a large file, set immutable, drop caches to
reload the inode, then read it), and additionally verified:
- sparse file
- heavily fragmented file
In all cases, reads completed without hangs and data was verified against
the expected contents.
Nanzhe Zhao (5):
f2fs: Zero f2fs_folio_state on allocation
f2fs: Accounting large folio subpages before bio submission
f2fs: add f2fs_block_needs_zeroing() to handle hole blocks
f2fs: add 'folio_in_bio' to handle readahead folios with no BIO
submission
f2fs: advance index and offset after zeroing in large folio read
fs/f2fs/data.c | 54 +++++++++++++++++++++++++++++++++-----------------
1 file changed, 36 insertions(+), 18 deletions(-)
base-commit: 48b5439e04ddf4508ecaf588219012dc81d947c0
--
2.34.1
Powered by blists - more mailing lists