From: Brian Foster <bfoster@redhat.com>
To: "Darrick J. Wong" <djwong@kernel.org>
Cc: linux-fsdevel@vger.kernel.org, linux-xfs@vger.kernel.org,
linux-mm@kvack.org, hch@infradead.org, willy@infradead.org
Subject: Re: [PATCH v3 7/7] xfs: error tag to force zeroing on debug kernels
Date: Tue, 15 Jul 2025 08:39:03 -0400 [thread overview]
Message-ID: <aHZL55AcNnAD-uAn@bfoster> (raw)
In-Reply-To: <20250715052444.GP2672049@frogsfrogsfrogs>
On Mon, Jul 14, 2025 at 10:24:44PM -0700, Darrick J. Wong wrote:
> On Mon, Jul 14, 2025 at 04:41:22PM -0400, Brian Foster wrote:
> > iomap_zero_range() has to cover various corner cases that are
> > difficult to test on production kernels because it is used in fairly
> > limited use cases. For example, it is currently only used by XFS and
> > mostly only in partial block zeroing cases.
> >
> > While it's possible to test most of these functional cases, we can
> > provide more robust test coverage by co-opting fallocate zero range
> > to invoke zeroing of the entire range instead of the more efficient
> > block punch/allocate sequence. Add an errortag to occasionally
> > invoke forced zeroing.
> >
> > Signed-off-by: Brian Foster <bfoster@redhat.com>
> > Reviewed-by: Christoph Hellwig <hch@lst.de>
> > ---
> > fs/xfs/libxfs/xfs_errortag.h | 4 +++-
> > fs/xfs/xfs_error.c | 3 +++
> > fs/xfs/xfs_file.c | 26 ++++++++++++++++++++------
> > 3 files changed, 26 insertions(+), 7 deletions(-)
> >
...
> > diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c
> > index 0b41b18debf3..c865f9555b77 100644
> > --- a/fs/xfs/xfs_file.c
> > +++ b/fs/xfs/xfs_file.c
> > @@ -27,6 +27,8 @@
> > #include "xfs_file.h"
> > #include "xfs_aops.h"
> > #include "xfs_zone_alloc.h"
> > +#include "xfs_error.h"
> > +#include "xfs_errortag.h"
> >
> > #include <linux/dax.h>
> > #include <linux/falloc.h>
> > @@ -1269,13 +1271,25 @@ xfs_falloc_zero_range(
> > if (error)
> > return error;
> >
> > - error = xfs_free_file_space(XFS_I(inode), offset, len, ac);
> > - if (error)
> > - return error;
> > + /*
> > + * Zero range implements a full zeroing mechanism but is only used in
> > + * limited situations. It is more efficient to allocate unwritten
> > + * extents than to perform zeroing here, so use an errortag to randomly
> > + * force zeroing on DEBUG kernels for added test coverage.
> > + */
> > + if (XFS_TEST_ERROR(false, XFS_I(inode)->i_mount,
> > + XFS_ERRTAG_FORCE_ZERO_RANGE)) {
> > + error = xfs_zero_range(XFS_I(inode), offset, len, ac, NULL);
>
> Isn't this basically the ultra slow version fallback version of
> FALLOC_FL_WRITE_ZEROES ?
>
~/linux$ git grep FALLOC_FL_WRITE_ZEROES
~/linux$
IIRC write zeroes is intended to expose fast hardware (physical) zeroing
(i.e. zeroed written extents)..? If so, I suppose you could consider
this a fallback of sorts. I'm not sure what write zeroes is expected to
do in the unwritten extent case, whereas iomap zero range is happy to
skip those mappings unless they're already dirty in pagecache.
Regardless, the purpose of this patch is not to add support for physical
zeroing, but rather to increase test coverage for the additional code on
debug kernels because the production use case tends to be more limited.
This could easily be moved/applied to write zeroes if it makes sense in
the future and test infra grows support for it.
Brian
> --D
>
> > + } else {
> > + error = xfs_free_file_space(XFS_I(inode), offset, len, ac);
> > + if (error)
> > + return error;
> >
> > - len = round_up(offset + len, blksize) - round_down(offset, blksize);
> > - offset = round_down(offset, blksize);
> > - error = xfs_alloc_file_space(XFS_I(inode), offset, len);
> > + len = round_up(offset + len, blksize) -
> > + round_down(offset, blksize);
> > + offset = round_down(offset, blksize);
> > + error = xfs_alloc_file_space(XFS_I(inode), offset, len);
> > + }
> > if (error)
> > return error;
> > return xfs_falloc_setsize(file, new_size);
> > --
> > 2.50.0
> >
> >
>
next prev parent reply other threads:[~2025-07-15 12:35 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-07-14 20:41 [PATCH v3 0/7] iomap: zero range folio batch support Brian Foster
2025-07-14 20:41 ` [PATCH v3 1/7] filemap: add helper to look up dirty folios in a range Brian Foster
2025-07-15 5:20 ` Darrick J. Wong
2025-07-14 20:41 ` [PATCH v3 2/7] iomap: remove pos+len BUG_ON() to after folio lookup Brian Foster
2025-07-15 5:14 ` Darrick J. Wong
2025-07-14 20:41 ` [PATCH v3 3/7] iomap: optional zero range dirty folio processing Brian Foster
2025-07-15 5:22 ` Darrick J. Wong
2025-07-15 12:35 ` Brian Foster
2025-07-18 11:30 ` Zhang Yi
2025-07-18 13:48 ` Brian Foster
2025-07-19 11:07 ` Zhang Yi
2025-07-21 8:47 ` Zhang Yi
2025-07-28 12:57 ` Zhang Yi
2025-07-30 13:19 ` Brian Foster
2025-08-02 7:26 ` Zhang Yi
2025-07-30 13:17 ` Brian Foster
2025-08-02 7:19 ` Zhang Yi
2025-08-05 13:08 ` Brian Foster
2025-08-06 3:10 ` Zhang Yi
2025-08-06 13:25 ` Brian Foster
2025-08-07 4:58 ` Zhang Yi
2025-07-14 20:41 ` [PATCH v3 4/7] xfs: always trim mapping to requested range for zero range Brian Foster
2025-07-14 20:41 ` [PATCH v3 5/7] xfs: fill dirty folios on zero range of unwritten mappings Brian Foster
2025-07-15 5:28 ` Darrick J. Wong
2025-07-15 12:35 ` Brian Foster
2025-07-15 14:19 ` Darrick J. Wong
2025-07-14 20:41 ` [PATCH v3 6/7] iomap: remove old partial eof zeroing optimization Brian Foster
2025-07-15 5:34 ` Darrick J. Wong
2025-07-15 12:36 ` Brian Foster
2025-07-15 14:37 ` Darrick J. Wong
2025-07-15 16:20 ` Brian Foster
2025-07-15 16:30 ` Darrick J. Wong
2025-07-14 20:41 ` [PATCH v3 7/7] xfs: error tag to force zeroing on debug kernels Brian Foster
2025-07-15 5:24 ` Darrick J. Wong
2025-07-15 12:39 ` Brian Foster [this message]
2025-07-15 14:30 ` Darrick J. Wong
2025-07-15 16:20 ` Brian Foster
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=aHZL55AcNnAD-uAn@bfoster \
--to=bfoster@redhat.com \
--cc=djwong@kernel.org \
--cc=hch@infradead.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linux-xfs@vger.kernel.org \
--cc=willy@infradead.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).