From: Christoph Hellwig <hch@lst.de>
To: Andrey Albershteyn <aalbersh@kernel.org>
Cc: djwong@kernel.org, ebiggers@kernel.org, hch@lst.de,
Jens Axboe <axboe@kernel.dk>, Carlos Maiolino <cem@kernel.org>,
fsverity@lists.linux.dev, linux-fsdevel@vger.kernel.org,
linux-xfs@vger.kernel.org, linux-unionfs@vger.kernel.org,
linux-block@vger.kernel.org, linux-ext4@vger.kernel.org,
linux-f2fs-devel@lists.sourceforge.net,
linux-btrfs@vger.kernel.org, david@fromorbit.com,
Tal Zussman <tz2294@columbia.edu>
Subject: Re: [PATCH v15 17/25] xfs: use read ioend for fsverity data verification
Date: Mon, 17 Aug 2026 09:20:00 +0200 [thread overview]
Message-ID: <20260817072000.GD17371@lst.de> (raw)
In-Reply-To: <20260814092448.1818082-18-aalbersh@kernel.org>
On Fri, Aug 14, 2026 at 11:24:34AM +0200, Andrey Albershteyn wrote:
> Use read ioends for fsverity verification. Do not issue fsverity
> metadata I/O through the same workqueue due to risk of a deadlock by a
> filled workqueue.
>
> Pass fsverity_info from iomap context down to the ioend as hashtable
> lookups are expensive.
>
> Add a simple helper to check that this is not fsverity metadata but file
> data that needs verification.
> - const struct address_space *mapping)
> + const struct address_space *mapping,
> + loff_t position)
> {
Hmm, "position" is new for these kinds of arguments. We tend to call
them "pos", "off", or "offset", but I guess this completes the matrix :)
But maybe stick to pos to match the naming of the helpers used by the
callers.
> struct xfs_inode *ip = XFS_I(mapping->host);
>
> - if (bdev_has_integrity_csum(xfs_inode_buftarg(ip)->bt_bdev))
> + if (bdev_has_integrity_csum(xfs_inode_buftarg(ip)->bt_bdev) ||
> + xfs_fsverity_is_file_data(ip, position))
> return &xfs_iomap_read_ops;
> return &iomap_bio_read_ops;
Nit: While this is one of the standard Linux indent styles for long
ifs, the other one would seem more readable here:
if (bdev_has_integrity_csum(xfs_inode_buftarg(ip)->bt_bdev) ||
xfs_fsverity_is_file_data(ip, position))
> +#include "xfs_errortag.h"
> +#include "xfs_fsverity.h"
> #include <linux/bio-integrity.h>
> +#include <linux/fsverity.h>
> +
> +static void
> +xfs_end_fsverity_io_read(
> + struct work_struct *work)
> +{
> + struct iomap_ioend *ioend =
> + container_of(work, struct iomap_ioend, io_work);
> +
> + if (!ioend->io_bio.bi_status)
> + fsverity_verify_bio(ioend->io_vi, &ioend->io_bio);
> +
> + iomap_finish_ioends(
> + ioend, blk_status_to_errno(ioend->io_bio.bi_status));
Indentation looks odd here, this should be:
iomap_finish_ioends(ioend,
blk_status_to_errno(ioend->io_bio.bi_status));
or maybe add a local bio variable given that you use ioend->io_bio
three times, and this would fit onto a single line.
> diff --git a/include/linux/iomap.h b/include/linux/iomap.h
> index 0959b97e641b..f329a57d6ee9 100644
> --- a/include/linux/iomap.h
> +++ b/include/linux/iomap.h
> @@ -454,6 +454,7 @@ struct iomap_ioend {
> sector_t io_sector; /* start sector of ioend */
> void *io_private; /* file system private data */
> struct fsverity_info *io_vi; /* fsverity info */
> + struct work_struct io_work; /* fsverity blocking I/O */
> struct bio io_bio; /* MUST BE LAST! */
> };
Please don't add new fields to iomap structures in xfs patches.
And I really don't like adding it here given that struct work_struct is
rather big and not useful in other ways here. So maybe just do the
alloc a struct for the workqueue and queue it up using
fsverity_enqueue_verify_work approach the other file systems do.
Or add something like the block complete in task thing to fsverity
and simplify all these so that they only need a list entry
(which we already have in the ioend).
WARNING: multiple messages have this Message-ID (diff)
From: Christoph Hellwig <hch@lst.de>
To: Andrey Albershteyn <aalbersh@kernel.org>
Cc: fsverity@lists.linux.dev, Jens Axboe <axboe@kernel.dk>,
linux-ext4@vger.kernel.org, djwong@kernel.org,
Carlos Maiolino <cem@kernel.org>,
david@fromorbit.com, linux-unionfs@vger.kernel.org,
linux-f2fs-devel@lists.sourceforge.net, ebiggers@kernel.org,
linux-block@vger.kernel.org, linux-fsdevel@vger.kernel.org,
Tal Zussman <tz2294@columbia.edu>,
linux-xfs@vger.kernel.org, hch@lst.de,
linux-btrfs@vger.kernel.org
Subject: Re: [f2fs-dev] [PATCH v15 17/25] xfs: use read ioend for fsverity data verification
Date: Mon, 17 Aug 2026 09:20:00 +0200 [thread overview]
Message-ID: <20260817072000.GD17371@lst.de> (raw)
In-Reply-To: <20260814092448.1818082-18-aalbersh@kernel.org>
On Fri, Aug 14, 2026 at 11:24:34AM +0200, Andrey Albershteyn wrote:
> Use read ioends for fsverity verification. Do not issue fsverity
> metadata I/O through the same workqueue due to risk of a deadlock by a
> filled workqueue.
>
> Pass fsverity_info from iomap context down to the ioend as hashtable
> lookups are expensive.
>
> Add a simple helper to check that this is not fsverity metadata but file
> data that needs verification.
> - const struct address_space *mapping)
> + const struct address_space *mapping,
> + loff_t position)
> {
Hmm, "position" is new for these kinds of arguments. We tend to call
them "pos", "off", or "offset", but I guess this completes the matrix :)
But maybe stick to pos to match the naming of the helpers used by the
callers.
> struct xfs_inode *ip = XFS_I(mapping->host);
>
> - if (bdev_has_integrity_csum(xfs_inode_buftarg(ip)->bt_bdev))
> + if (bdev_has_integrity_csum(xfs_inode_buftarg(ip)->bt_bdev) ||
> + xfs_fsverity_is_file_data(ip, position))
> return &xfs_iomap_read_ops;
> return &iomap_bio_read_ops;
Nit: While this is one of the standard Linux indent styles for long
ifs, the other one would seem more readable here:
if (bdev_has_integrity_csum(xfs_inode_buftarg(ip)->bt_bdev) ||
xfs_fsverity_is_file_data(ip, position))
> +#include "xfs_errortag.h"
> +#include "xfs_fsverity.h"
> #include <linux/bio-integrity.h>
> +#include <linux/fsverity.h>
> +
> +static void
> +xfs_end_fsverity_io_read(
> + struct work_struct *work)
> +{
> + struct iomap_ioend *ioend =
> + container_of(work, struct iomap_ioend, io_work);
> +
> + if (!ioend->io_bio.bi_status)
> + fsverity_verify_bio(ioend->io_vi, &ioend->io_bio);
> +
> + iomap_finish_ioends(
> + ioend, blk_status_to_errno(ioend->io_bio.bi_status));
Indentation looks odd here, this should be:
iomap_finish_ioends(ioend,
blk_status_to_errno(ioend->io_bio.bi_status));
or maybe add a local bio variable given that you use ioend->io_bio
three times, and this would fit onto a single line.
> diff --git a/include/linux/iomap.h b/include/linux/iomap.h
> index 0959b97e641b..f329a57d6ee9 100644
> --- a/include/linux/iomap.h
> +++ b/include/linux/iomap.h
> @@ -454,6 +454,7 @@ struct iomap_ioend {
> sector_t io_sector; /* start sector of ioend */
> void *io_private; /* file system private data */
> struct fsverity_info *io_vi; /* fsverity info */
> + struct work_struct io_work; /* fsverity blocking I/O */
> struct bio io_bio; /* MUST BE LAST! */
> };
Please don't add new fields to iomap structures in xfs patches.
And I really don't like adding it here given that struct work_struct is
rather big and not useful in other ways here. So maybe just do the
alloc a struct for the workqueue and queue it up using
fsverity_enqueue_verify_work approach the other file systems do.
Or add something like the block complete in task thing to fsverity
and simplify all these so that they only need a list entry
(which we already have in the ioend).
_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
next prev parent reply other threads:[~2026-08-17 7:20 UTC|newest]
Thread overview: 66+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-14 9:24 [PATCH v15 00/25] fs-verity support for XFS with post EOF merkle tree Andrey Albershteyn
2026-08-14 9:24 ` [f2fs-dev] " Andrey Albershteyn via Linux-f2fs-devel
2026-08-14 9:24 ` [PATCH v15 01/25] fsverity: report validation errors through fserror to fsnotify Andrey Albershteyn
2026-08-14 9:24 ` [f2fs-dev] " Andrey Albershteyn via Linux-f2fs-devel
2026-08-14 9:24 ` [PATCH v15 02/25] fsverity: expose ensure_fsverity_info() Andrey Albershteyn
2026-08-14 9:24 ` [f2fs-dev] " Andrey Albershteyn via Linux-f2fs-devel
2026-08-14 9:24 ` [PATCH v15 03/25] fsverity: pass digest size and hash of the all-zeroes block to ->write Andrey Albershteyn
2026-08-14 9:24 ` [f2fs-dev] " Andrey Albershteyn via Linux-f2fs-devel
2026-08-14 9:24 ` [PATCH v15 04/25] fsverity: hoist pagecache_read from f2fs/ext4 to fsverity Andrey Albershteyn
2026-08-14 9:24 ` [f2fs-dev] " Andrey Albershteyn via Linux-f2fs-devel
2026-08-14 9:24 ` [PATCH v15 05/25] fsverity: don't allow setting DAX file attribute on fsverity files Andrey Albershteyn
2026-08-14 9:24 ` [f2fs-dev] " Andrey Albershteyn via Linux-f2fs-devel
2026-08-14 9:24 ` [PATCH v15 06/25] fsverity: hoist statx reporting of fs-verity flag Andrey Albershteyn
2026-08-14 9:24 ` [f2fs-dev] " Andrey Albershteyn via Linux-f2fs-devel
2026-08-14 9:24 ` [PATCH v15 07/25] block: add task-context bio completion infrastructure Andrey Albershteyn
2026-08-14 9:24 ` [f2fs-dev] " Andrey Albershteyn via Linux-f2fs-devel
2026-08-14 9:24 ` [PATCH v15 08/25] block: don't delay bio task completions Andrey Albershteyn
2026-08-14 9:24 ` [f2fs-dev] " Andrey Albershteyn via Linux-f2fs-devel
2026-08-14 9:24 ` [PATCH v15 09/25] iomap: add a iomap_ioend_flags helper Andrey Albershteyn
2026-08-14 9:24 ` [f2fs-dev] " Andrey Albershteyn via Linux-f2fs-devel
2026-08-14 9:24 ` [PATCH v15 10/25] iomap: add a IOMAP_IOEND_INTEGRITY flag Andrey Albershteyn
2026-08-14 9:24 ` [f2fs-dev] " Andrey Albershteyn via Linux-f2fs-devel
2026-08-14 9:24 ` [PATCH v15 11/25] xfs: use BIO_COMPLETE_IN_TASK for bounce buffered read I/Os Andrey Albershteyn
2026-08-14 9:24 ` [f2fs-dev] " Andrey Albershteyn via Linux-f2fs-devel
2026-08-14 9:24 ` [PATCH v15 12/25] xfs: introduce fsverity on-disk changes Andrey Albershteyn
2026-08-14 9:24 ` [f2fs-dev] " Andrey Albershteyn via Linux-f2fs-devel
2026-08-14 9:24 ` [PATCH v15 13/25] xfs: don't allow to enable DAX on fs-verity sealed inode Andrey Albershteyn
2026-08-14 9:24 ` [f2fs-dev] " Andrey Albershteyn via Linux-f2fs-devel
2026-08-14 9:24 ` [PATCH v15 14/25] xfs: disable direct read path for fs-verity files Andrey Albershteyn
2026-08-14 9:24 ` [f2fs-dev] " Andrey Albershteyn via Linux-f2fs-devel
2026-08-14 9:24 ` [PATCH v15 15/25] xfs: don't report dio_mem_align and dio_offset_align for fsverity files Andrey Albershteyn
2026-08-14 9:24 ` [f2fs-dev] " Andrey Albershteyn via Linux-f2fs-devel
2026-08-14 15:13 ` Darrick J. Wong
2026-08-14 15:13 ` [f2fs-dev] " Darrick J. Wong via Linux-f2fs-devel
2026-08-14 9:24 ` [PATCH v15 16/25] xfs: handle fsverity I/O in write/read path Andrey Albershteyn
2026-08-14 9:24 ` [f2fs-dev] " Andrey Albershteyn via Linux-f2fs-devel
2026-08-14 15:15 ` Darrick J. Wong
2026-08-14 15:15 ` [f2fs-dev] " Darrick J. Wong via Linux-f2fs-devel
2026-08-17 7:10 ` Christoph Hellwig
2026-08-17 7:10 ` [f2fs-dev] " Christoph Hellwig
2026-08-14 9:24 ` [PATCH v15 17/25] xfs: use read ioend for fsverity data verification Andrey Albershteyn
2026-08-14 9:24 ` [f2fs-dev] " Andrey Albershteyn via Linux-f2fs-devel
2026-08-17 7:20 ` Christoph Hellwig [this message]
2026-08-17 7:20 ` Christoph Hellwig
2026-08-14 9:24 ` [PATCH v15 18/25] xfs: make xfs_free_eofblocks() work with fsverity inodes Andrey Albershteyn
2026-08-14 9:24 ` [f2fs-dev] " Andrey Albershteyn via Linux-f2fs-devel
2026-08-14 15:19 ` Darrick J. Wong
2026-08-14 15:19 ` [f2fs-dev] " Darrick J. Wong via Linux-f2fs-devel
2026-08-17 7:09 ` Christoph Hellwig
2026-08-17 7:09 ` [f2fs-dev] " Christoph Hellwig
2026-08-14 9:24 ` [PATCH v15 19/25] xfs: add fs-verity support Andrey Albershteyn
2026-08-14 9:24 ` [f2fs-dev] " Andrey Albershteyn via Linux-f2fs-devel
2026-08-14 9:24 ` [PATCH v15 20/25] xfs: initialize fs-verity on file open Andrey Albershteyn
2026-08-14 9:24 ` [f2fs-dev] " Andrey Albershteyn via Linux-f2fs-devel
2026-08-14 9:24 ` [PATCH v15 21/25] xfs: add fs-verity ioctls Andrey Albershteyn
2026-08-14 9:24 ` [f2fs-dev] " Andrey Albershteyn via Linux-f2fs-devel
2026-08-14 9:24 ` [PATCH v15 22/25] xfs: advertise fs-verity being available on filesystem Andrey Albershteyn
2026-08-14 9:24 ` [f2fs-dev] " Andrey Albershteyn via Linux-f2fs-devel
2026-08-14 9:24 ` [f2fs-dev] [PATCH v15 23/25] xfs: check and repair the verity inode flag state Andrey Albershteyn via Linux-f2fs-devel
2026-08-14 9:24 ` Andrey Albershteyn
2026-08-14 9:24 ` [f2fs-dev] [PATCH v15 24/25] xfs: introduce health state for corrupted fsverity metadata Andrey Albershteyn via Linux-f2fs-devel
2026-08-14 9:24 ` Andrey Albershteyn
2026-08-14 9:24 ` [PATCH v15 25/25] xfs: enable ro-compat fs-verity flag Andrey Albershteyn
2026-08-14 9:24 ` [f2fs-dev] " Andrey Albershteyn via Linux-f2fs-devel
2026-08-17 7:02 ` [PATCH v15 00/25] fs-verity support for XFS with post EOF merkle tree Christoph Hellwig
2026-08-17 7:02 ` [f2fs-dev] " 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=20260817072000.GD17371@lst.de \
--to=hch@lst.de \
--cc=aalbersh@kernel.org \
--cc=axboe@kernel.dk \
--cc=cem@kernel.org \
--cc=david@fromorbit.com \
--cc=djwong@kernel.org \
--cc=ebiggers@kernel.org \
--cc=fsverity@lists.linux.dev \
--cc=linux-block@vger.kernel.org \
--cc=linux-btrfs@vger.kernel.org \
--cc=linux-ext4@vger.kernel.org \
--cc=linux-f2fs-devel@lists.sourceforge.net \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-unionfs@vger.kernel.org \
--cc=linux-xfs@vger.kernel.org \
--cc=tz2294@columbia.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.