From: sashiko-bot@kernel.org
To: "Andrey Albershteyn" <aalbersh@kernel.org>
Cc: linux-ext4@vger.kernel.org, dsterba@suse.cz, tytso@mit.edu
Subject: Re: [PATCH v16 12/21] xfs: use read ioend for fsverity data verification
Date: Fri, 18 Sep 2026 11:36:38 +0000 [thread overview]
Message-ID: <20260918113639.052551F000FF@smtp.kernel.org> (raw)
In-Reply-To: <20260918111539.1003439-13-aalbersh@kernel.org>
Thank you for your contribution! Sashiko AI review found 3 potential issue(s) to consider:
- [High] xfs: memory reclaim deadlock and forward progress violation in xfs_end_io_read()
- [High] xfs: synchronous Merkle tree read stalls bio completion in xfs_end_io_read()
- [Medium] xfs: memory leak of xfs_parent_args_cache on init error path
--
commit 798d972634a53a99bff867f7211b6d47638362a9
Author: Andrey Albershteyn <aalbersh@kernel.org>
xfs: use read ioend for fsverity data verification
This commit uses read ioends for fsverity verification instead of using
the same workqueue for fsverity metadata IO. It passes fsverity_info from
the iomap context down to the ioend, and adds a helper to check if file
data needs verification.
> diff --git a/fs/xfs/xfs_ioend.c b/fs/xfs/xfs_ioend.c
> index e70be5b86f0b7..2f46855b052fd 100644
> --- a/fs/xfs/xfs_ioend.c
> +++ b/fs/xfs/xfs_ioend.c
[ ... ]
> @@ -117,6 +138,36 @@ xfs_end_io_read(
> }
> }
>
> + /*
> + * If we have fsverity and block device integrity attached to this bio,
> + * we need to run fsverity verification of data folios from a separate
> + * fsverity workqueue. This is necessary to avoid deadlocking due to
> + * fsverity issuing more reads of fsverity metadata which would be
> + * processed by the same worker in the BIO completion workqueue.
> + *
> + * Without block device integrity, fsverity metadata IO will not use
> + * ioends for completion.
> + */
> + if (IS_ENABLED(CONFIG_FS_VERITY) && !error && ioend->io_vi &&
> + xfs_fsverity_is_file_data(ip, ioend->io_offset)) {
> + if (ioend->io_flags & IOMAP_IOEND_INTEGRITY) {
> + fsv_ioend = kmem_cache_zalloc(xfs_fsverity_ioend_cache,
> + GFP_KERNEL);
[Severity: High]
Does this allocation risk a deadlock? xfs_end_io_read() executes in a block IO
completion context (like task_work or the block layer bio_complete_wq). Using
GFP_KERNEL here allows direct memory reclaim, which can block waiting for
dirty pages to be written back and their IO completions processed. Waiting
inside an IO completion worker could create a cyclical deadlock. Should this
use a mempool with GFP_NOIO or GFP_NOWAIT to ensure forward progress?
> + if (!fsv_ioend) {
> + iomap_finish_ioends(ioend, -ENOMEM);
> + return;
> + }
[Severity: High]
Could failing the IO with -ENOMEM break forward progress guarantees under
memory pressure? It seems that memory allocations in the block IO completion
path need to be backed by a mempool to avoid spurious IO failures when
memory is tight.
> + fsv_ioend->ioend = ioend;
> + INIT_WORK(&fsv_ioend->work, xfs_end_fsverity_io_read);
> +
> + fsverity_enqueue_verify_work(&fsv_ioend->work);
> + return;
> + }
> +
> + fsverity_verify_bio(ioend->io_vi, &ioend->io_bio);
[Severity: High]
Can this synchronous verification stall bio completion? When
fsverity_verify_bio() requires Merkle tree blocks that aren't in the page
cache, it synchronously reads them from disk by calling read_mapping_folio()
and waits via wait_on_folio_locked_killable().
Since xfs_end_io_read() is executing in a bio completion context, blocking
here to wait for another disk IO can stall all other async IO completions
queued behind it. Should this verification always be deferred to a dedicated
workqueue?
> + error = blk_status_to_errno(ioend->io_bio.bi_status);
> + }
>
> iomap_finish_ioends(ioend, error);
> }
> diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c
> index 5a06132aa3846..f34c9645767d5 100644
> --- a/fs/xfs/xfs_super.c
> +++ b/fs/xfs/xfs_super.c
[ ... ]
> @@ -2516,8 +2516,20 @@ xfs_init_caches(void)
> if (!xfs_parent_args_cache)
> goto out_destroy_xmi_cache;
>
> +#ifdef CONFIG_FS_VERITY
> + xfs_fsverity_ioend_cache = kmem_cache_create("xfs_fsverity_ioend",
> + sizeof(struct xfs_fsverity_ioend),
> + 0, 0, NULL);
> + if (!xfs_fsverity_ioend_cache)
> + goto out_destroy_fsverity_ioend_cache;
> +#endif
> +
> return 0;
>
> +#ifdef CONFIG_FS_VERITY
> + out_destroy_fsverity_ioend_cache:
> + kmem_cache_destroy(xfs_fsverity_ioend_cache);
> +#endif
> out_destroy_xmi_cache:
[Severity: Medium]
If the allocation of xfs_fsverity_ioend_cache fails, the error path jumps to
out_destroy_fsverity_ioend_cache. Does this permanently leak the memory
allocated for xfs_parent_args_cache? The error path seems to fall through
to out_destroy_xmi_cache, entirely skipping the destruction of the parent
args cache.
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260918111539.1003439-1-aalbersh@kernel.org?part=12
next prev parent reply other threads:[~2026-09-18 11:36 UTC|newest]
Thread overview: 67+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-18 11:15 [PATCH v16 00/21] fs-verity support for XFS with post EOF merkle tree Andrey Albershteyn
2026-09-18 11:15 ` [PATCH v16 01/21] fsverity: report validation errors through fserror to fsnotify Andrey Albershteyn
2026-09-18 11:27 ` sashiko-bot
2026-09-18 11:15 ` [PATCH v16 02/21] fsverity: expose ensure_fsverity_info() Andrey Albershteyn
2026-09-18 11:32 ` sashiko-bot
2026-09-18 11:15 ` [PATCH v16 03/21] fsverity: pass digest size and hash of the all-zeroes block to ->write Andrey Albershteyn
2026-09-18 11:24 ` sashiko-bot
2026-09-18 11:15 ` [PATCH v16 04/21] fsverity: hoist pagecache_read from f2fs/ext4 to fsverity Andrey Albershteyn
2026-09-18 11:26 ` sashiko-bot
2026-09-18 11:15 ` [PATCH v16 05/21] fsverity: don't allow setting DAX file attribute on fsverity files Andrey Albershteyn
2026-09-18 11:28 ` sashiko-bot
2026-09-25 4:35 ` Eric Biggers
2026-09-18 11:15 ` [PATCH v16 06/21] fsverity: hoist statx reporting of fs-verity flag Andrey Albershteyn
2026-09-18 11:28 ` sashiko-bot
2026-09-18 11:15 ` [PATCH v16 07/21] xfs: introduce fsverity on-disk changes Andrey Albershteyn
2026-09-18 11:34 ` sashiko-bot
2026-09-18 11:15 ` [PATCH v16 08/21] xfs: don't allow to enable DAX on fs-verity sealed inode Andrey Albershteyn
2026-09-18 11:27 ` sashiko-bot
2026-09-18 11:15 ` [PATCH v16 09/21] xfs: disable direct read path for fs-verity files Andrey Albershteyn
2026-09-18 11:26 ` sashiko-bot
2026-09-18 11:15 ` [PATCH v16 10/21] xfs: don't report dio_mem_align and dio_offset_align for fsverity files Andrey Albershteyn
2026-09-18 11:26 ` sashiko-bot
2026-09-18 11:15 ` [PATCH v16 11/21] xfs: handle fsverity I/O in write/read path Andrey Albershteyn
2026-09-18 11:38 ` sashiko-bot
2026-09-22 7:15 ` Christoph Hellwig
2026-09-18 11:15 ` [PATCH v16 12/21] xfs: use read ioend for fsverity data verification Andrey Albershteyn
2026-09-18 11:36 ` sashiko-bot [this message]
2026-09-22 4:29 ` Darrick J. Wong
2026-09-22 7:18 ` Christoph Hellwig
2026-09-22 9:13 ` Andrey Albershteyn
2026-09-22 12:31 ` Christoph Hellwig
2026-09-22 13:17 ` Andrey Albershteyn
2026-09-18 11:15 ` [PATCH v16 13/21] xfs: add XFS_BMAPI_UNWRITTEN to unmap unwritten extents in __xfs_bunmapi() Andrey Albershteyn
2026-09-18 11:32 ` sashiko-bot
2026-09-22 4:49 ` Darrick J. Wong
2026-09-22 4:34 ` Darrick J. Wong
2026-09-22 7:20 ` Christoph Hellwig
2026-09-22 8:32 ` Andrey Albershteyn
2026-09-18 11:15 ` [PATCH v16 14/21] xfs: don't remove written extents past EOF on fsverity inodes Andrey Albershteyn
2026-09-18 11:41 ` sashiko-bot
2026-09-22 4:37 ` Darrick J. Wong
2026-09-22 8:33 ` Andrey Albershteyn
2026-09-22 11:29 ` Andrey Albershteyn
2026-09-18 11:15 ` [PATCH v16 15/21] xfs: add fs-verity support Andrey Albershteyn
2026-09-18 11:43 ` sashiko-bot
2026-09-22 4:50 ` Darrick J. Wong
2026-09-22 4:45 ` Darrick J. Wong
2026-09-22 9:27 ` Andrey Albershteyn
2026-09-22 7:22 ` Christoph Hellwig
2026-09-22 8:56 ` Andrey Albershteyn
2026-09-22 12:32 ` Christoph Hellwig
2026-09-22 13:27 ` Andrey Albershteyn
2026-09-23 4:44 ` Christoph Hellwig
2026-09-18 11:15 ` [PATCH v16 16/21] xfs: initialize fs-verity on file open Andrey Albershteyn
2026-09-18 11:33 ` sashiko-bot
2026-09-18 11:15 ` [PATCH v16 17/21] xfs: add fs-verity ioctls Andrey Albershteyn
2026-09-18 11:31 ` sashiko-bot
2026-09-18 11:15 ` [PATCH v16 18/21] xfs: advertise fs-verity being available on filesystem Andrey Albershteyn
2026-09-18 11:30 ` sashiko-bot
2026-09-18 11:15 ` [PATCH v16 19/21] xfs: check and repair the verity inode flag state Andrey Albershteyn
2026-09-18 11:40 ` sashiko-bot
2026-09-18 11:15 ` [PATCH v16 20/21] xfs: introduce health state for corrupted fsverity metadata Andrey Albershteyn
2026-09-18 11:34 ` sashiko-bot
2026-09-18 11:15 ` [PATCH v16 21/21] xfs: enable ro-compat fs-verity flag Andrey Albershteyn
2026-09-18 11:44 ` sashiko-bot
2026-09-22 4:51 ` [PATCH v16 00/21] fs-verity support for XFS with post EOF merkle tree Darrick J. Wong
2026-09-22 9:00 ` Andrey Albershteyn
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=20260918113639.052551F000FF@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=aalbersh@kernel.org \
--cc=dsterba@suse.cz \
--cc=linux-ext4@vger.kernel.org \
--cc=sashiko-reviews@lists.linux.dev \
--cc=tytso@mit.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox