From: "Darrick J. Wong" <djwong@kernel.org>
To: Dave Chinner <david@fromorbit.com>
Cc: linux-xfs@vger.kernel.org, linux-fsdevel@vger.kernel.org
Subject: Re: [PATCH 6/9] xfs: xfs_bmap_punch_delalloc_range() should take a byte range
Date: Thu, 17 Nov 2022 10:37:54 -0800 [thread overview]
Message-ID: <Y3Z/gqw9BvAe5kjt@magnolia> (raw)
In-Reply-To: <20221117055810.498014-7-david@fromorbit.com>
On Thu, Nov 17, 2022 at 04:58:07PM +1100, Dave Chinner wrote:
> From: Dave Chinner <dchinner@redhat.com>
>
> All the callers of xfs_bmap_punch_delalloc_range() jump through
> hoops to convert a byte range to filesystem blocks before calling
> xfs_bmap_punch_delalloc_range(). Instead, pass the byte range to
> xfs_bmap_punch_delalloc_range() and have it do the conversion to
> filesystem blocks internally.
>
> Signed-off-by: Dave Chinner <dchinner@redhat.com>
Looks fine to me,
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
--D
> ---
> fs/xfs/xfs_aops.c | 16 ++++++----------
> fs/xfs/xfs_bmap_util.c | 10 ++++++----
> fs/xfs/xfs_bmap_util.h | 2 +-
> fs/xfs/xfs_iomap.c | 8 ++------
> 4 files changed, 15 insertions(+), 21 deletions(-)
>
> diff --git a/fs/xfs/xfs_aops.c b/fs/xfs/xfs_aops.c
> index 5d1a995b15f8..6aadc5815068 100644
> --- a/fs/xfs/xfs_aops.c
> +++ b/fs/xfs/xfs_aops.c
> @@ -114,9 +114,8 @@ xfs_end_ioend(
> if (unlikely(error)) {
> if (ioend->io_flags & IOMAP_F_SHARED) {
> xfs_reflink_cancel_cow_range(ip, offset, size, true);
> - xfs_bmap_punch_delalloc_range(ip,
> - XFS_B_TO_FSBT(mp, offset),
> - XFS_B_TO_FSB(mp, size));
> + xfs_bmap_punch_delalloc_range(ip, offset,
> + offset + size);
> }
> goto done;
> }
> @@ -455,12 +454,8 @@ xfs_discard_folio(
> struct folio *folio,
> loff_t pos)
> {
> - struct inode *inode = folio->mapping->host;
> - struct xfs_inode *ip = XFS_I(inode);
> + struct xfs_inode *ip = XFS_I(folio->mapping->host);
> struct xfs_mount *mp = ip->i_mount;
> - size_t offset = offset_in_folio(folio, pos);
> - xfs_fileoff_t start_fsb = XFS_B_TO_FSBT(mp, pos);
> - xfs_fileoff_t pageoff_fsb = XFS_B_TO_FSBT(mp, offset);
> int error;
>
> if (xfs_is_shutdown(mp))
> @@ -470,8 +465,9 @@ xfs_discard_folio(
> "page discard on page "PTR_FMT", inode 0x%llx, pos %llu.",
> folio, ip->i_ino, pos);
>
> - error = xfs_bmap_punch_delalloc_range(ip, start_fsb,
> - i_blocks_per_folio(inode, folio) - pageoff_fsb);
> + error = xfs_bmap_punch_delalloc_range(ip, pos,
> + round_up(pos, folio_size(folio)));
> +
> if (error && !xfs_is_shutdown(mp))
> xfs_alert(mp, "page discard unable to remove delalloc mapping.");
> }
> diff --git a/fs/xfs/xfs_bmap_util.c b/fs/xfs/xfs_bmap_util.c
> index 04d0c2bff67c..867645b74d88 100644
> --- a/fs/xfs/xfs_bmap_util.c
> +++ b/fs/xfs/xfs_bmap_util.c
> @@ -590,11 +590,13 @@ xfs_getbmap(
> int
> xfs_bmap_punch_delalloc_range(
> struct xfs_inode *ip,
> - xfs_fileoff_t start_fsb,
> - xfs_fileoff_t length)
> + xfs_off_t start_byte,
> + xfs_off_t end_byte)
> {
> + struct xfs_mount *mp = ip->i_mount;
> struct xfs_ifork *ifp = &ip->i_df;
> - xfs_fileoff_t end_fsb = start_fsb + length;
> + xfs_fileoff_t start_fsb = XFS_B_TO_FSBT(mp, start_byte);
> + xfs_fileoff_t end_fsb = XFS_B_TO_FSB(mp, end_byte);
> struct xfs_bmbt_irec got, del;
> struct xfs_iext_cursor icur;
> int error = 0;
> @@ -607,7 +609,7 @@ xfs_bmap_punch_delalloc_range(
>
> while (got.br_startoff + got.br_blockcount > start_fsb) {
> del = got;
> - xfs_trim_extent(&del, start_fsb, length);
> + xfs_trim_extent(&del, start_fsb, end_fsb - start_fsb);
>
> /*
> * A delete can push the cursor forward. Step back to the
> diff --git a/fs/xfs/xfs_bmap_util.h b/fs/xfs/xfs_bmap_util.h
> index 24b37d211f1d..6888078f5c31 100644
> --- a/fs/xfs/xfs_bmap_util.h
> +++ b/fs/xfs/xfs_bmap_util.h
> @@ -31,7 +31,7 @@ xfs_bmap_rtalloc(struct xfs_bmalloca *ap)
> #endif /* CONFIG_XFS_RT */
>
> int xfs_bmap_punch_delalloc_range(struct xfs_inode *ip,
> - xfs_fileoff_t start_fsb, xfs_fileoff_t length);
> + xfs_off_t start_byte, xfs_off_t end_byte);
>
> struct kgetbmap {
> __s64 bmv_offset; /* file offset of segment in blocks */
> diff --git a/fs/xfs/xfs_iomap.c b/fs/xfs/xfs_iomap.c
> index ea96e8a34868..09676ff6940e 100644
> --- a/fs/xfs/xfs_iomap.c
> +++ b/fs/xfs/xfs_iomap.c
> @@ -1126,12 +1126,8 @@ xfs_buffered_write_delalloc_punch(
> loff_t offset,
> loff_t length)
> {
> - struct xfs_mount *mp = XFS_M(inode->i_sb);
> - xfs_fileoff_t start_fsb = XFS_B_TO_FSBT(mp, offset);
> - xfs_fileoff_t end_fsb = XFS_B_TO_FSB(mp, offset + length);
> -
> - return xfs_bmap_punch_delalloc_range(XFS_I(inode), start_fsb,
> - end_fsb - start_fsb);
> + return xfs_bmap_punch_delalloc_range(XFS_I(inode), offset,
> + offset + length);
> }
>
> static int
> --
> 2.37.2
>
next prev parent reply other threads:[~2022-11-17 18:38 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-11-17 5:58 [PATCH 0/8 v3] xfs, iomap: fix data corrupton due to stale cached iomaps Dave Chinner
2022-11-17 5:58 ` [PATCH 1/9] xfs: write page faults in iomap are not buffered writes Dave Chinner
2022-11-17 5:58 ` [PATCH 2/9] xfs: punching delalloc extents on write failure is racy Dave Chinner
2022-11-17 17:50 ` Darrick J. Wong
2022-11-17 5:58 ` [PATCH 3/9] xfs: use byte ranges for write cleanup ranges Dave Chinner
2022-11-17 5:58 ` [PATCH 4/9] xfs,iomap: move delalloc punching to iomap Dave Chinner
2022-11-17 17:57 ` Darrick J. Wong
2022-11-17 5:58 ` [PATCH 5/9] iomap: buffered write failure should not truncate the page cache Dave Chinner
2022-11-17 18:36 ` Darrick J. Wong
2022-11-17 5:58 ` [PATCH 6/9] xfs: xfs_bmap_punch_delalloc_range() should take a byte range Dave Chinner
2022-11-17 18:37 ` Darrick J. Wong [this message]
2022-11-17 5:58 ` [PATCH 7/9] iomap: write iomap validity checks Dave Chinner
2022-11-17 18:40 ` Darrick J. Wong
2022-11-17 5:58 ` [PATCH 8/9] xfs: use iomap_valid method to detect stale cached iomaps Dave Chinner
2022-11-17 18:59 ` Darrick J. Wong
2022-11-17 21:36 ` Dave Chinner
2022-11-17 5:58 ` [PATCH 9/9] xfs: drop write error injection is unfixable, remove it Dave Chinner
2022-11-17 18:01 ` Darrick J. Wong
-- strict thread matches above, loose matches on Subject: below --
2022-11-23 5:58 [PATCH 0/9 V4] xfs, iomap: fix data corrupton due to stale cached iomaps Dave Chinner
2022-11-23 5:58 ` [PATCH 6/9] xfs: xfs_bmap_punch_delalloc_range() should take a byte range Dave Chinner
2022-11-15 1:30 [PATCH v2 0/9] xfs, iomap: fix data corrupton due to stale cached iomaps Dave Chinner
2022-11-15 1:30 ` [PATCH 6/9] xfs: xfs_bmap_punch_delalloc_range() should take a byte range Dave Chinner
2022-11-15 8:44 ` Christoph Hellwig
2022-11-15 23:48 ` Darrick J. Wong
2022-11-16 0:57 ` Dave Chinner
2022-11-16 5:46 ` 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=Y3Z/gqw9BvAe5kjt@magnolia \
--to=djwong@kernel.org \
--cc=david@fromorbit.com \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-xfs@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;
as well as URLs for NNTP newsgroup(s).