All of lore.kernel.org
 help / color / mirror / Atom feed
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

  reply	other threads:[~2026-09-18 11:36 UTC|newest]

Thread overview: 111+ 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 ` [f2fs-dev] " Andrey Albershteyn via Linux-f2fs-devel
2026-09-18 11:15 ` [PATCH v16 01/21] fsverity: report validation errors through fserror to fsnotify Andrey Albershteyn
2026-09-18 11:15   ` [f2fs-dev] " Andrey Albershteyn via Linux-f2fs-devel
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:15   ` [f2fs-dev] " Andrey Albershteyn via Linux-f2fs-devel
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:15   ` [f2fs-dev] " Andrey Albershteyn via Linux-f2fs-devel
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:15   ` [f2fs-dev] " Andrey Albershteyn via Linux-f2fs-devel
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:15   ` [f2fs-dev] " Andrey Albershteyn via Linux-f2fs-devel
2026-09-18 11:28   ` sashiko-bot
2026-09-25  4:35   ` Eric Biggers
2026-09-25  4:35     ` [f2fs-dev] " Eric Biggers via Linux-f2fs-devel
2026-09-18 11:15 ` [PATCH v16 06/21] fsverity: hoist statx reporting of fs-verity flag Andrey Albershteyn
2026-09-18 11:15   ` [f2fs-dev] " Andrey Albershteyn via Linux-f2fs-devel
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:15   ` [f2fs-dev] " Andrey Albershteyn via Linux-f2fs-devel
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:15   ` [f2fs-dev] " Andrey Albershteyn via Linux-f2fs-devel
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:15   ` [f2fs-dev] " Andrey Albershteyn via Linux-f2fs-devel
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:15   ` [f2fs-dev] " Andrey Albershteyn via Linux-f2fs-devel
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:15   ` [f2fs-dev] " Andrey Albershteyn via Linux-f2fs-devel
2026-09-18 11:38   ` sashiko-bot
2026-09-22  7:15   ` Christoph Hellwig
2026-09-22  7:15     ` [f2fs-dev] " 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:15   ` [f2fs-dev] " Andrey Albershteyn via Linux-f2fs-devel
2026-09-18 11:36   ` sashiko-bot [this message]
2026-09-22  4:29   ` Darrick J. Wong
2026-09-22  4:29     ` [f2fs-dev] " Darrick J. Wong via Linux-f2fs-devel
2026-09-22  7:18   ` Christoph Hellwig
2026-09-22  7:18     ` [f2fs-dev] " Christoph Hellwig
2026-09-22  9:13     ` Andrey Albershteyn
2026-09-22  9:13       ` [f2fs-dev] " Andrey Albershteyn via Linux-f2fs-devel
2026-09-22 12:31       ` Christoph Hellwig
2026-09-22 12:31         ` [f2fs-dev] " Christoph Hellwig
2026-09-22 13:17         ` Andrey Albershteyn
2026-09-22 13:17           ` [f2fs-dev] " Andrey Albershteyn via Linux-f2fs-devel
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:15   ` [f2fs-dev] " Andrey Albershteyn via Linux-f2fs-devel
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  4:34     ` [f2fs-dev] " Darrick J. Wong via Linux-f2fs-devel
2026-09-22  7:20     ` Christoph Hellwig
2026-09-22  7:20       ` [f2fs-dev] " Christoph Hellwig
2026-09-22  8:32       ` Andrey Albershteyn
2026-09-22  8:32         ` [f2fs-dev] " Andrey Albershteyn via Linux-f2fs-devel
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:15   ` [f2fs-dev] " Andrey Albershteyn via Linux-f2fs-devel
2026-09-18 11:41   ` sashiko-bot
2026-09-22  4:37   ` Darrick J. Wong
2026-09-22  4:37     ` [f2fs-dev] " Darrick J. Wong via Linux-f2fs-devel
2026-09-22  8:33     ` Andrey Albershteyn
2026-09-22  8:33       ` [f2fs-dev] " Andrey Albershteyn via Linux-f2fs-devel
2026-09-22 11:29       ` Andrey Albershteyn
2026-09-22 11:29         ` [f2fs-dev] " Andrey Albershteyn via Linux-f2fs-devel
2026-09-18 11:15 ` [PATCH v16 15/21] xfs: add fs-verity support Andrey Albershteyn
2026-09-18 11:15   ` [f2fs-dev] " Andrey Albershteyn via Linux-f2fs-devel
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  4:45     ` [f2fs-dev] " Darrick J. Wong via Linux-f2fs-devel
2026-09-22  9:27     ` Andrey Albershteyn
2026-09-22  9:27       ` [f2fs-dev] " Andrey Albershteyn via Linux-f2fs-devel
2026-09-22  7:22   ` Christoph Hellwig
2026-09-22  7:22     ` [f2fs-dev] " Christoph Hellwig
2026-09-22  8:56     ` Andrey Albershteyn
2026-09-22  8:56       ` [f2fs-dev] " Andrey Albershteyn via Linux-f2fs-devel
2026-09-22 12:32       ` Christoph Hellwig
2026-09-22 12:32         ` [f2fs-dev] " Christoph Hellwig
2026-09-22 13:27         ` Andrey Albershteyn
2026-09-22 13:27           ` [f2fs-dev] " Andrey Albershteyn via Linux-f2fs-devel
2026-09-23  4:44           ` Christoph Hellwig
2026-09-23  4:44             ` [f2fs-dev] " Christoph Hellwig
2026-09-18 11:15 ` [PATCH v16 16/21] xfs: initialize fs-verity on file open Andrey Albershteyn
2026-09-18 11:15   ` [f2fs-dev] " Andrey Albershteyn via Linux-f2fs-devel
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:15   ` [f2fs-dev] " Andrey Albershteyn via Linux-f2fs-devel
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:15   ` [f2fs-dev] " Andrey Albershteyn via Linux-f2fs-devel
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:15   ` [f2fs-dev] " Andrey Albershteyn via Linux-f2fs-devel
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:15   ` [f2fs-dev] " Andrey Albershteyn via Linux-f2fs-devel
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:15   ` [f2fs-dev] " Andrey Albershteyn via Linux-f2fs-devel
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  4:51   ` [f2fs-dev] " Darrick J. Wong via Linux-f2fs-devel
2026-09-22  9:00   ` Andrey Albershteyn
2026-09-22  9:00     ` [f2fs-dev] " Andrey Albershteyn via Linux-f2fs-devel

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 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.