From: Li Chen <me@linux.beauty>
To: Theodore Ts'o <tytso@mit.edu>, Jan Kara <jack@suse.cz>,
Mark Fasheh <mark@fasheh.com>,
linux-ext4@vger.kernel.org, ocfs2-devel@lists.linux.dev
Cc: Andreas Dilger <adilger@dilger.ca>,
Joel Becker <jlbec@evilplan.org>,
Joseph Qi <joseph.qi@linux.alibaba.com>,
linux-kernel@vger.kernel.org
Subject: [PATCH v4 0/4] jbd2/ext4/ocfs2: lockless jinode dirty range
Date: Fri, 6 Mar 2026 16:56:38 +0800 [thread overview]
Message-ID: <20260306085643.465275-1-me@linux.beauty> (raw)
This series makes the jbd2_inode dirty range tracking safe for lockless
reads in jbd2 and filesystem callbacks used by ext4 and ocfs2.
Some paths access jinode fields without holding journal->j_list_lock
(e.g. fast commit helpers and ordered truncate helpers). v1 used READ_ONCE()
on i_dirty_start/end, but Matthew pointed out that loff_t can be torn on
32-bit platforms, and Jan suggested storing the dirty range in PAGE_SIZE
units as pgoff_t.
With this series, jbd2 stores the dirty range as page indexes and uses
READ_ONCE()/WRITE_ONCE() for lockless access. ext4 and ocfs2 use the new
jbd2_jinode_get_dirty_range() accessor which converts the page-based range
back to byte offsets for writeback.
This is based on Jan's suggestion in the review of the ext4 jinode
publication race fix. [1]
Changes since v3:
- Store i_dirty_end_page as an exclusive end page and drop the sentinel.
- Publish end_page before start_page and treat start_page >= end_page as
empty.
Changes since v2:
- Add jbd2_jinode_get_dirty_range() accessor and convert ext4/ocfs2 to use it
before switching the underlying representation (per Andreas).
- Rename the dirty range fields to i_dirty_start_page/end_page to make the
PAGE_SIZE units explicit and avoid silent unit mismatches when bisecting.
Changes since v1:
- Store i_dirty_start/end in PAGE_SIZE units (pgoff_t) to avoid torn loads on
32-bit (pointed out by Matthew, suggested by Jan).
- Use WRITE_ONCE() for i_dirty_* / i_flags updates in jbd2 (per Jan).
- Drop pointless READ_ONCE() on i_vfs_inode in jbd2_wait_inode_data (per Jan).
- Convert ext4/ocfs2 callbacks to translate page range to byte offsets.
[1]: https://lore.kernel.org/all/4jxwogttddiaoqbstlgou5ox6zs27ngjjz5ukrxafm2z5ijxod@so4eqnykiegj/
v3: https://lore.kernel.org/all/20260224092434.202122-1-me@linux.beauty/
v2: https://lore.kernel.org/all/20260219114645.778338-1-me@linux.beauty/
v1: https://lore.kernel.org/all/20260130031232.60780-1-me@linux.beauty/
Li Chen (4):
jbd2: add jinode dirty range accessors
ext4: use jbd2 jinode dirty range accessor
ocfs2: use jbd2 jinode dirty range accessor
jbd2: store jinode dirty range in PAGE_SIZE units
fs/ext4/inode.c | 10 ++++++--
fs/ext4/super.c | 16 +++++++++----
fs/jbd2/commit.c | 55 +++++++++++++++++++++++++++++++++----------
fs/jbd2/journal.c | 5 ++--
fs/jbd2/transaction.c | 21 +++++++++++------
fs/ocfs2/journal.c | 9 +++++--
include/linux/jbd2.h | 38 ++++++++++++++++++++++++------
7 files changed, 115 insertions(+), 39 deletions(-)
--
2.53.0
next reply other threads:[~2026-03-06 8:59 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-06 8:56 Li Chen [this message]
2026-03-06 8:56 ` [PATCH v4 1/4] jbd2: add jinode dirty range accessors Li Chen
2026-03-06 8:56 ` [PATCH v4 2/4] ext4: use jbd2 jinode dirty range accessor Li Chen
2026-03-06 8:56 ` [PATCH v4 3/4] ocfs2: " Li Chen
2026-03-06 8:56 ` [PATCH v4 4/4] jbd2: store jinode dirty range in PAGE_SIZE units Li Chen
2026-04-08 2:12 ` [PATCH v4 0/4] jbd2/ext4/ocfs2: lockless jinode dirty range Li Chen
2026-04-08 2:26 ` Li Chen
2026-04-10 15:18 ` Theodore Ts'o
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=20260306085643.465275-1-me@linux.beauty \
--to=me@linux.beauty \
--cc=adilger@dilger.ca \
--cc=jack@suse.cz \
--cc=jlbec@evilplan.org \
--cc=joseph.qi@linux.alibaba.com \
--cc=linux-ext4@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mark@fasheh.com \
--cc=ocfs2-devel@lists.linux.dev \
--cc=tytso@mit.edu \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.