From: Zhang Yi <yi.zhang@huaweicloud.com>
To: linux-xfs@vger.kernel.org, linux-fsdevel@vger.kernel.org
Cc: linux-kernel@vger.kernel.org, djwong@kernel.org,
hch@infradead.org, brauner@kernel.org, david@fromorbit.com,
chandanbabu@kernel.org, jack@suse.cz, willy@infradead.org,
yi.zhang@huawei.com, yi.zhang@huaweicloud.com,
chengzhihao1@huawei.com, yukuai3@huawei.com
Subject: [RFC PATCH v4 0/8] iomap/xfs: fix stale data exposure when truncating realtime inodes
Date: Wed, 29 May 2024 17:51:58 +0800 [thread overview]
Message-ID: <20240529095206.2568162-1-yi.zhang@huaweicloud.com> (raw)
From: Zhang Yi <yi.zhang@huawei.com>
Changes since v3:
- Factor out a new helper to get the remainder in math64.h as Darrick
suggested.
- Adjust the truncating order to prevent too much redundant blocking
writes as Dave suggested.
- Improve to convert the tail extent to unwritten when truncating down
an inode with large rtextsize as Darrick and Dave suggested.
This series fix a stale data exposure issue reported by Chandan when
running fstests generic/561 on xfs with realtime device[1]. The real
problem is xfs_setattr_size() doesn't zero out enough range when
truncating a realtime inode, please see the patch 6 or [1] for
details.
Patch 1 is from Dave, it improves truncate down performace by changing
iomap_zero_iter() to aware dirty pages on unwritten extents, but for the
case of the zeroing range that contains a cow mapping over a hole still
needs to be handled.
Patch 3-5 modify iomap_truncate_page() and dax_truncate_page() to pass
filesystem identified blocksize, and drop the assumption of
i_blocksize() as Dave suggested.
Patch 6-7 adjust the truncating down processing order to first zero out
the tail aligned blocks, then write back, update i_size and finally drop
cache beyond aligned EOF. Fix the data exposure issue by zeroing out the
entire EOF extent.
Patch 8-9 add a rtextsize threshold (64k), improves truncate down performace
on realtime inode with large rtextsize (beyonds this threshold) by
converting the tail unaligned extent to unwritten.
I've tested this series on fstests (1) with reflink=0, (2) with 28K RT
device and (3) with 96K RT device (beyonds rtextsize threshold), no new
failures detected. This series still needs to do furtuer tests with
reflink=1 after Patch 1 covers the cow mapping over a hole case.
[1] https://lore.kernel.org/linux-xfs/87ttj8ircu.fsf@debian-BULLSEYE-live-builder-AMD64/
Thanks,
Yi.
Dave Chinner (1):
iomap: zeroing needs to be pagecache aware
Zhang Yi (7):
math64: add rem_u64() to just return the remainder
iomap: pass blocksize to iomap_truncate_page()
fsdax: pass blocksize to dax_truncate_page()
xfs: refactor the truncating order
xfs: correct the truncate blocksize of realtime inode
xfs: reserve blocks for truncating realtime inode
xfs: improve truncate on a realtime inode with huge extsize
fs/dax.c | 8 +--
fs/ext2/inode.c | 4 +-
fs/iomap/buffered-io.c | 50 ++++++++++++++--
fs/xfs/xfs_inode.c | 3 +
fs/xfs/xfs_inode.h | 12 ++++
fs/xfs/xfs_iomap.c | 5 +-
fs/xfs/xfs_iomap.h | 3 +-
fs/xfs/xfs_iops.c | 133 +++++++++++++++++++++++++----------------
include/linux/dax.h | 4 +-
include/linux/iomap.h | 4 +-
include/linux/math64.h | 24 ++++++++
11 files changed, 179 insertions(+), 71 deletions(-)
--
2.39.2
next reply other threads:[~2024-05-29 1:59 UTC|newest]
Thread overview: 47+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-05-29 9:51 Zhang Yi [this message]
2024-05-29 9:51 ` [RFC PATCH v4 1/8] iomap: zeroing needs to be pagecache aware Zhang Yi
2024-05-31 13:11 ` Christoph Hellwig
2024-05-31 14:03 ` Darrick J. Wong
2024-05-31 14:05 ` Christoph Hellwig
2024-05-31 15:44 ` Brian Foster
2024-05-31 15:43 ` Brian Foster
2024-06-02 22:22 ` Dave Chinner
2024-06-02 11:04 ` Brian Foster
2024-06-03 9:07 ` Zhang Yi
2024-06-03 14:37 ` Brian Foster
2024-06-04 23:38 ` Dave Chinner
2024-05-29 9:52 ` [RFC PATCH v4 2/8] math64: add rem_u64() to just return the remainder Zhang Yi
2024-05-31 12:35 ` Christoph Hellwig
2024-05-31 14:04 ` Darrick J. Wong
2024-05-29 9:52 ` [RFC PATCH v4 3/8] iomap: pass blocksize to iomap_truncate_page() Zhang Yi
2024-05-31 12:39 ` Christoph Hellwig
2024-06-02 11:16 ` Brian Foster
2024-06-03 13:23 ` Zhang Yi
2024-05-29 9:52 ` [RFC PATCH v4 4/8] fsdax: pass blocksize to dax_truncate_page() Zhang Yi
2024-05-29 9:52 ` [RFC PATCH v4 5/8] xfs: refactor the truncating order Zhang Yi
2024-05-31 13:31 ` Christoph Hellwig
2024-05-31 15:27 ` Darrick J. Wong
2024-05-31 16:17 ` Christoph Hellwig
2024-06-03 13:51 ` Zhang Yi
2024-05-31 15:44 ` Darrick J. Wong
2024-06-03 14:15 ` Zhang Yi
2024-06-02 22:46 ` Dave Chinner
2024-06-03 14:18 ` Zhang Yi
2024-05-29 9:52 ` [RFC PATCH v4 6/8] xfs: correct the truncate blocksize of realtime inode Zhang Yi
2024-05-31 13:36 ` Christoph Hellwig
2024-06-03 14:35 ` Zhang Yi
2024-05-29 9:52 ` [RFC PATCH v4 7/8] xfs: reserve blocks for truncating " Zhang Yi
2024-05-31 12:42 ` Christoph Hellwig
2024-05-31 14:10 ` Darrick J. Wong
2024-05-31 14:13 ` Christoph Hellwig
2024-05-31 15:29 ` Darrick J. Wong
2024-05-31 16:17 ` Christoph Hellwig
2024-05-29 9:52 ` [RFC PATCH v4 8/8] xfs: improve truncate on a realtime inode with huge extsize Zhang Yi
2024-05-31 13:46 ` Christoph Hellwig
2024-05-31 14:12 ` Darrick J. Wong
2024-05-31 14:15 ` Christoph Hellwig
2024-05-31 15:00 ` Darrick J. Wong
2024-06-04 7:09 ` Zhang Yi
2024-05-31 12:26 ` [RFC PATCH v4 0/8] iomap/xfs: fix stale data exposure when truncating realtime inodes Christoph Hellwig
2024-06-01 7:38 ` Zhang Yi
2024-06-01 7:40 ` Christoph Hellwig
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=20240529095206.2568162-1-yi.zhang@huaweicloud.com \
--to=yi.zhang@huaweicloud.com \
--cc=brauner@kernel.org \
--cc=chandanbabu@kernel.org \
--cc=chengzhihao1@huawei.com \
--cc=david@fromorbit.com \
--cc=djwong@kernel.org \
--cc=hch@infradead.org \
--cc=jack@suse.cz \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-xfs@vger.kernel.org \
--cc=willy@infradead.org \
--cc=yi.zhang@huawei.com \
--cc=yukuai3@huawei.com \
/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;
as well as URLs for NNTP newsgroup(s).