From: "Darrick J. Wong" <darrick.wong@oracle.com>
To: Eric Sandeen <sandeen@redhat.com>
Cc: xfs <linux-xfs@vger.kernel.org>,
stable@vger.kernel.org, Christoph Hellwig <hch@lst.de>
Subject: Re: [PATCH STABLE] xfs: trim IO to found COW exent limit
Date: Wed, 23 Sep 2020 15:58:48 -0700 [thread overview]
Message-ID: <20200923225848.GX7955@magnolia> (raw)
In-Reply-To: <e7fe7225-4f2b-d13e-bb4b-c7db68f63124@redhat.com>
On Wed, Sep 23, 2020 at 05:35:44PM -0500, Eric Sandeen wrote:
> A bug existed in the XFS reflink code between v5.1 and v5.5 in which
> the mapping for a COW IO was not trimmed to the mapping of the COW
> extent that was found. This resulted in a too-short copy, and
> corruption of other files which shared the original extent.
>
> (This happened only when extent size hints were set, which bypasses
> delalloc and led to this code path.)
>
> This was (inadvertently) fixed upstream with
>
> 36adcbace24e "xfs: fill out the srcmap in iomap_begin"
>
> and related patches which moved lots of this functionality to
> the iomap subsystem.
>
> Hence, this is a -stable only patch, targeted to fix this
> corruption vector without other major code changes.
>
> Fixes: 78f0cc9d55cb ("xfs: don't use delalloc extents for COW on files with extsize hints")
> Cc: <stable@vger.kernel.org> # 5.4.x
> Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Looks good to me,
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
(Note: Someone please fix the typo "exent" in the subject line.)
--D
> ---
>
> I've tested this with a targeted reproducer (in next email) as well as
> with xfstests.
>
> Stable folk, not sure how to send a "stable only" patch, or if that's even
> valid. Assuming you're willing to accept it, I would still like to have
> some formal Reviewed-by's from the xfs developer community before it gets
> merged.
>
> Big thanks to Darrick & Dave for letting me whine about this bug and
> offering suggestions for testing and ultimately, a patch to test.
>
> diff --git a/fs/xfs/xfs_iomap.c b/fs/xfs/xfs_iomap.c
> index 06b9e0aacf54..3289d0f4bb03 100644
> --- a/fs/xfs/xfs_iomap.c
> +++ b/fs/xfs/xfs_iomap.c
> @@ -1002,9 +1002,15 @@ xfs_file_iomap_begin(
> * I/O, which must be block aligned, we need to report the
> * newly allocated address. If the data fork has a hole, copy
> * the COW fork mapping to avoid allocating to the data fork.
> + *
> + * Otherwise, ensure that the imap range does not extend past
> + * the range allocated/found in cmap.
> */
> if (directio || imap.br_startblock == HOLESTARTBLOCK)
> imap = cmap;
> + else
> + xfs_trim_extent(&imap, cmap.br_startoff,
> + cmap.br_blockcount);
>
> end_fsb = imap.br_startoff + imap.br_blockcount;
> length = XFS_FSB_TO_B(mp, end_fsb) - offset;
>
next prev parent reply other threads:[~2020-09-23 22:59 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-09-23 22:35 [PATCH STABLE] xfs: trim IO to found COW exent limit Eric Sandeen
2020-09-23 22:37 ` Eric Sandeen
2020-09-23 22:59 ` Darrick J. Wong
2020-09-23 23:53 ` Eric Sandeen
2020-09-23 22:58 ` Darrick J. Wong [this message]
2020-09-24 4:03 ` 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=20200923225848.GX7955@magnolia \
--to=darrick.wong@oracle.com \
--cc=hch@lst.de \
--cc=linux-xfs@vger.kernel.org \
--cc=sandeen@redhat.com \
--cc=stable@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