From: "Darrick J. Wong" <djwong@kernel.org>
To: Christoph Hellwig <hch@lst.de>
Cc: Eric Biggers <ebiggers@kernel.org>,
Al Viro <viro@zeniv.linux.org.uk>,
Christian Brauner <brauner@kernel.org>, Jan Kara <jack@suse.cz>,
David Sterba <dsterba@suse.com>, Theodore Ts'o <tytso@mit.edu>,
Jaegeuk Kim <jaegeuk@kernel.org>, Chao Yu <chao@kernel.org>,
Andrey Albershteyn <aalbersh@redhat.com>,
"Matthew Wilcox (Oracle)" <willy@infradead.org>,
linux-fsdevel@vger.kernel.org, linux-btrfs@vger.kernel.org,
linux-ext4@vger.kernel.org,
linux-f2fs-devel@lists.sourceforge.net, fsverity@lists.linux.dev
Subject: Re: [PATCH 07/11] fs: consolidate fsverity_info lookup in buffer.c
Date: Thu, 22 Jan 2026 13:49:58 -0800 [thread overview]
Message-ID: <20260122214958.GG5910@frogsfrogsfrogs> (raw)
In-Reply-To: <20260122082214.452153-8-hch@lst.de>
On Thu, Jan 22, 2026 at 09:22:03AM +0100, Christoph Hellwig wrote:
> Look up the fsverity_info once in end_buffer_async_read_io, and then
> pass it along to the I/O completion workqueue in
> struct postprocess_bh_ctx.
>
> This amortizes the lookup better once it becomes less efficient.
>
> Signed-off-by: Christoph Hellwig <hch@lst.de>
> ---
> fs/buffer.c | 27 +++++++++++----------------
> 1 file changed, 11 insertions(+), 16 deletions(-)
>
> diff --git a/fs/buffer.c b/fs/buffer.c
> index 3982253b6805..f4b3297ef1b1 100644
> --- a/fs/buffer.c
> +++ b/fs/buffer.c
> @@ -302,6 +302,7 @@ static void end_buffer_async_read(struct buffer_head *bh, int uptodate)
> struct postprocess_bh_ctx {
> struct work_struct work;
> struct buffer_head *bh;
> + struct fsverity_info *vi;
> };
>
> static void verify_bh(struct work_struct *work)
> @@ -309,25 +310,14 @@ static void verify_bh(struct work_struct *work)
> struct postprocess_bh_ctx *ctx =
> container_of(work, struct postprocess_bh_ctx, work);
> struct buffer_head *bh = ctx->bh;
> - struct inode *inode = bh->b_folio->mapping->host;
> bool valid;
>
> - valid = fsverity_verify_blocks(*fsverity_info_addr(inode), bh->b_folio,
> - bh->b_size, bh_offset(bh));
> + valid = fsverity_verify_blocks(ctx->vi, bh->b_folio, bh->b_size,
> + bh_offset(bh));
> end_buffer_async_read(bh, valid);
> kfree(ctx);
> }
>
> -static bool need_fsverity(struct buffer_head *bh)
> -{
> - struct folio *folio = bh->b_folio;
> - struct inode *inode = folio->mapping->host;
> -
> - return fsverity_active(inode) &&
> - /* needed by ext4 */
> - folio->index < DIV_ROUND_UP(inode->i_size, PAGE_SIZE);
> -}
> -
> static void decrypt_bh(struct work_struct *work)
> {
> struct postprocess_bh_ctx *ctx =
> @@ -337,7 +327,7 @@ static void decrypt_bh(struct work_struct *work)
>
> err = fscrypt_decrypt_pagecache_blocks(bh->b_folio, bh->b_size,
> bh_offset(bh));
> - if (err == 0 && need_fsverity(bh)) {
> + if (err == 0 && ctx->vi) {
> /*
> * We use different work queues for decryption and for verity
> * because verity may require reading metadata pages that need
> @@ -359,15 +349,20 @@ static void end_buffer_async_read_io(struct buffer_head *bh, int uptodate)
> {
> struct inode *inode = bh->b_folio->mapping->host;
> bool decrypt = fscrypt_inode_uses_fs_layer_crypto(inode);
> - bool verify = need_fsverity(bh);
> + struct fsverity_info *vi = NULL;
> +
> + /* needed by ext4 */
> + if (bh->b_folio->index < DIV_ROUND_UP(inode->i_size, PAGE_SIZE))
> + vi = fsverity_get_info(inode);
Well this is no longer a weird ext4ism, since f2fs also needs this,
right? Maybe this comment should read:
/*
* Merkle tree folios can be cached in the pagecache, but they
* must never be cached below the first base page offset beyond
* EOF because mmap can expose address space beyond EOF.
*/
if (bh->b_folio->index < DIV_ROUND_UP(inode->i_size, PAGE_SIZE))
--D
>
> /* Decrypt (with fscrypt) and/or verify (with fsverity) if needed. */
> - if (uptodate && (decrypt || verify)) {
> + if (uptodate && (decrypt || vi)) {
> struct postprocess_bh_ctx *ctx =
> kmalloc(sizeof(*ctx), GFP_ATOMIC);
>
> if (ctx) {
> ctx->bh = bh;
> + ctx->vi = vi;
> if (decrypt) {
> INIT_WORK(&ctx->work, decrypt_bh);
> fscrypt_enqueue_decrypt_work(&ctx->work);
> --
> 2.47.3
>
>
WARNING: multiple messages have this Message-ID (diff)
From: "Darrick J. Wong via Linux-f2fs-devel" <linux-f2fs-devel@lists.sourceforge.net>
To: Christoph Hellwig <hch@lst.de>
Cc: fsverity@lists.linux.dev, Christian Brauner <brauner@kernel.org>,
Jan Kara <jack@suse.cz>, Andrey Albershteyn <aalbersh@redhat.com>,
"Matthew Wilcox \(Oracle\)" <willy@infradead.org>,
linux-f2fs-devel@lists.sourceforge.net,
Eric Biggers <ebiggers@kernel.org>,
linux-fsdevel@vger.kernel.org, Al Viro <viro@zeniv.linux.org.uk>,
Jaegeuk Kim <jaegeuk@kernel.org>, David Sterba <dsterba@suse.com>,
Theodore Ts'o <tytso@mit.edu>,
linux-ext4@vger.kernel.org, linux-btrfs@vger.kernel.org
Subject: Re: [f2fs-dev] [PATCH 07/11] fs: consolidate fsverity_info lookup in buffer.c
Date: Thu, 22 Jan 2026 13:49:58 -0800 [thread overview]
Message-ID: <20260122214958.GG5910@frogsfrogsfrogs> (raw)
In-Reply-To: <20260122082214.452153-8-hch@lst.de>
On Thu, Jan 22, 2026 at 09:22:03AM +0100, Christoph Hellwig wrote:
> Look up the fsverity_info once in end_buffer_async_read_io, and then
> pass it along to the I/O completion workqueue in
> struct postprocess_bh_ctx.
>
> This amortizes the lookup better once it becomes less efficient.
>
> Signed-off-by: Christoph Hellwig <hch@lst.de>
> ---
> fs/buffer.c | 27 +++++++++++----------------
> 1 file changed, 11 insertions(+), 16 deletions(-)
>
> diff --git a/fs/buffer.c b/fs/buffer.c
> index 3982253b6805..f4b3297ef1b1 100644
> --- a/fs/buffer.c
> +++ b/fs/buffer.c
> @@ -302,6 +302,7 @@ static void end_buffer_async_read(struct buffer_head *bh, int uptodate)
> struct postprocess_bh_ctx {
> struct work_struct work;
> struct buffer_head *bh;
> + struct fsverity_info *vi;
> };
>
> static void verify_bh(struct work_struct *work)
> @@ -309,25 +310,14 @@ static void verify_bh(struct work_struct *work)
> struct postprocess_bh_ctx *ctx =
> container_of(work, struct postprocess_bh_ctx, work);
> struct buffer_head *bh = ctx->bh;
> - struct inode *inode = bh->b_folio->mapping->host;
> bool valid;
>
> - valid = fsverity_verify_blocks(*fsverity_info_addr(inode), bh->b_folio,
> - bh->b_size, bh_offset(bh));
> + valid = fsverity_verify_blocks(ctx->vi, bh->b_folio, bh->b_size,
> + bh_offset(bh));
> end_buffer_async_read(bh, valid);
> kfree(ctx);
> }
>
> -static bool need_fsverity(struct buffer_head *bh)
> -{
> - struct folio *folio = bh->b_folio;
> - struct inode *inode = folio->mapping->host;
> -
> - return fsverity_active(inode) &&
> - /* needed by ext4 */
> - folio->index < DIV_ROUND_UP(inode->i_size, PAGE_SIZE);
> -}
> -
> static void decrypt_bh(struct work_struct *work)
> {
> struct postprocess_bh_ctx *ctx =
> @@ -337,7 +327,7 @@ static void decrypt_bh(struct work_struct *work)
>
> err = fscrypt_decrypt_pagecache_blocks(bh->b_folio, bh->b_size,
> bh_offset(bh));
> - if (err == 0 && need_fsverity(bh)) {
> + if (err == 0 && ctx->vi) {
> /*
> * We use different work queues for decryption and for verity
> * because verity may require reading metadata pages that need
> @@ -359,15 +349,20 @@ static void end_buffer_async_read_io(struct buffer_head *bh, int uptodate)
> {
> struct inode *inode = bh->b_folio->mapping->host;
> bool decrypt = fscrypt_inode_uses_fs_layer_crypto(inode);
> - bool verify = need_fsverity(bh);
> + struct fsverity_info *vi = NULL;
> +
> + /* needed by ext4 */
> + if (bh->b_folio->index < DIV_ROUND_UP(inode->i_size, PAGE_SIZE))
> + vi = fsverity_get_info(inode);
Well this is no longer a weird ext4ism, since f2fs also needs this,
right? Maybe this comment should read:
/*
* Merkle tree folios can be cached in the pagecache, but they
* must never be cached below the first base page offset beyond
* EOF because mmap can expose address space beyond EOF.
*/
if (bh->b_folio->index < DIV_ROUND_UP(inode->i_size, PAGE_SIZE))
--D
>
> /* Decrypt (with fscrypt) and/or verify (with fsverity) if needed. */
> - if (uptodate && (decrypt || verify)) {
> + if (uptodate && (decrypt || vi)) {
> struct postprocess_bh_ctx *ctx =
> kmalloc(sizeof(*ctx), GFP_ATOMIC);
>
> if (ctx) {
> ctx->bh = bh;
> + ctx->vi = vi;
> if (decrypt) {
> INIT_WORK(&ctx->work, decrypt_bh);
> fscrypt_enqueue_decrypt_work(&ctx->work);
> --
> 2.47.3
>
>
_______________________________________________
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-01-22 21:49 UTC|newest]
Thread overview: 106+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-01-22 8:21 fsverity cleanups, speedup and memory usage optimization v2 Christoph Hellwig
2026-01-22 8:21 ` [f2fs-dev] " Christoph Hellwig
2026-01-22 8:21 ` [PATCH 01/11] fs,fsverity: reject size changes on fsverity files in setattr_prepare Christoph Hellwig
2026-01-22 8:21 ` [f2fs-dev] [PATCH 01/11] fs, fsverity: " Christoph Hellwig
2026-01-22 9:12 ` [PATCH 01/11] fs,fsverity: " Jan Kara
2026-01-22 9:12 ` [f2fs-dev] [PATCH 01/11] fs, fsverity: " Jan Kara
2026-01-22 21:21 ` [PATCH 01/11] fs,fsverity: " Darrick J. Wong
2026-01-22 21:21 ` [f2fs-dev] [PATCH 01/11] fs, fsverity: " Darrick J. Wong via Linux-f2fs-devel
2026-01-22 8:21 ` [PATCH 02/11] fs,fsverity: clear out fsverity_info from common code Christoph Hellwig
2026-01-22 8:21 ` [f2fs-dev] [PATCH 02/11] fs, fsverity: " Christoph Hellwig
2026-01-22 9:15 ` [PATCH 02/11] fs,fsverity: " Jan Kara
2026-01-22 9:15 ` [f2fs-dev] [PATCH 02/11] fs, fsverity: " Jan Kara
2026-01-22 21:22 ` [PATCH 02/11] fs,fsverity: " Darrick J. Wong
2026-01-22 21:22 ` [f2fs-dev] [PATCH 02/11] fs, fsverity: " Darrick J. Wong via Linux-f2fs-devel
2026-01-22 8:21 ` [PATCH 03/11] fsverity: pass struct file to ->write_merkle_tree_block Christoph Hellwig
2026-01-22 8:21 ` [f2fs-dev] " Christoph Hellwig
2026-01-22 10:04 ` Andrey Albershteyn
2026-01-22 10:04 ` [f2fs-dev] " Andrey Albershteyn via Linux-f2fs-devel
2026-01-22 21:23 ` Darrick J. Wong
2026-01-22 21:23 ` [f2fs-dev] " Darrick J. Wong via Linux-f2fs-devel
2026-01-22 8:22 ` [PATCH 04/11] fsverity: start consolidating pagecache code Christoph Hellwig
2026-01-22 8:22 ` [f2fs-dev] " Christoph Hellwig
2026-01-22 9:18 ` Jan Kara
2026-01-22 9:18 ` [f2fs-dev] " Jan Kara
2026-01-22 10:12 ` Andrey Albershteyn
2026-01-22 10:12 ` [f2fs-dev] " Andrey Albershteyn via Linux-f2fs-devel
2026-01-22 21:27 ` Darrick J. Wong
2026-01-22 21:27 ` [f2fs-dev] " Darrick J. Wong via Linux-f2fs-devel
2026-01-23 5:12 ` Christoph Hellwig
2026-01-23 5:12 ` [f2fs-dev] " Christoph Hellwig
2026-01-23 7:21 ` Darrick J. Wong
2026-01-23 7:21 ` [f2fs-dev] " Darrick J. Wong via Linux-f2fs-devel
2026-01-24 19:27 ` Eric Biggers
2026-01-24 19:27 ` [f2fs-dev] " Eric Biggers via Linux-f2fs-devel
2026-01-26 4:27 ` Christoph Hellwig
2026-01-26 4:27 ` [f2fs-dev] " Christoph Hellwig
2026-01-22 8:22 ` [PATCH 05/11] fsverity: kick off hash readahead at data I/O submission time Christoph Hellwig
2026-01-22 8:22 ` [f2fs-dev] " Christoph Hellwig
2026-01-22 21:42 ` Darrick J. Wong
2026-01-22 21:42 ` [f2fs-dev] " Darrick J. Wong via Linux-f2fs-devel
2026-01-23 5:14 ` Christoph Hellwig
2026-01-23 5:14 ` [f2fs-dev] " Christoph Hellwig
2026-01-23 7:22 ` Darrick J. Wong
2026-01-23 7:22 ` [f2fs-dev] " Darrick J. Wong via Linux-f2fs-devel
2026-01-24 20:53 ` Eric Biggers
2026-01-24 20:53 ` [f2fs-dev] " Eric Biggers via Linux-f2fs-devel
2026-01-26 4:30 ` Christoph Hellwig
2026-01-26 4:30 ` [f2fs-dev] " Christoph Hellwig
2026-01-22 8:22 ` [PATCH 06/11] fsverity: push out fsverity_info lookup Christoph Hellwig
2026-01-22 8:22 ` [f2fs-dev] " Christoph Hellwig
2026-01-22 21:45 ` Darrick J. Wong
2026-01-22 21:45 ` [f2fs-dev] " Darrick J. Wong via Linux-f2fs-devel
2026-01-24 21:19 ` Eric Biggers
2026-01-24 21:19 ` [f2fs-dev] " Eric Biggers via Linux-f2fs-devel
2026-01-26 4:33 ` Christoph Hellwig
2026-01-26 4:33 ` [f2fs-dev] " Christoph Hellwig
2026-01-22 8:22 ` [PATCH 07/11] fs: consolidate fsverity_info lookup in buffer.c Christoph Hellwig
2026-01-22 8:22 ` [f2fs-dev] " Christoph Hellwig
2026-01-22 21:49 ` Darrick J. Wong [this message]
2026-01-22 21:49 ` Darrick J. Wong via Linux-f2fs-devel
2026-01-23 5:15 ` Christoph Hellwig
2026-01-23 5:15 ` [f2fs-dev] " Christoph Hellwig
2026-01-23 7:23 ` Darrick J. Wong
2026-01-23 7:23 ` [f2fs-dev] " Darrick J. Wong via Linux-f2fs-devel
2026-01-23 7:24 ` Christoph Hellwig
2026-01-23 7:24 ` [f2fs-dev] " Christoph Hellwig
2026-01-22 8:22 ` [PATCH 08/11] ext4: consolidate fsverity_info lookup Christoph Hellwig
2026-01-22 8:22 ` [f2fs-dev] " Christoph Hellwig
2026-01-22 21:54 ` Darrick J. Wong
2026-01-22 21:54 ` [f2fs-dev] " Darrick J. Wong via Linux-f2fs-devel
2026-01-23 5:18 ` Christoph Hellwig
2026-01-23 5:18 ` [f2fs-dev] " Christoph Hellwig
2026-01-23 7:25 ` Darrick J. Wong
2026-01-23 7:25 ` [f2fs-dev] " Darrick J. Wong via Linux-f2fs-devel
2026-01-22 8:22 ` [PATCH 09/11] f2fs: " Christoph Hellwig
2026-01-22 8:22 ` [f2fs-dev] " Christoph Hellwig
2026-01-22 8:22 ` [PATCH 10/11] btrfs: " Christoph Hellwig
2026-01-22 8:22 ` [f2fs-dev] " Christoph Hellwig
2026-01-22 8:22 ` [PATCH 11/11] fsverity: use a hashtable to find the fsverity_info Christoph Hellwig
2026-01-22 8:22 ` [f2fs-dev] " Christoph Hellwig
2026-01-22 22:04 ` Darrick J. Wong
2026-01-22 22:04 ` [f2fs-dev] " Darrick J. Wong via Linux-f2fs-devel
2026-01-23 5:27 ` Christoph Hellwig
2026-01-23 5:27 ` [f2fs-dev] " Christoph Hellwig
2026-01-23 7:27 ` Darrick J. Wong
2026-01-23 7:27 ` [f2fs-dev] " Darrick J. Wong via Linux-f2fs-devel
2026-01-23 7:30 ` Christoph Hellwig
2026-01-23 7:30 ` [f2fs-dev] " Christoph Hellwig
2026-01-25 1:31 ` Eric Biggers
2026-01-25 1:31 ` [f2fs-dev] " Eric Biggers via Linux-f2fs-devel
2026-01-25 21:48 ` Matthew Wilcox
2026-01-25 21:48 ` [f2fs-dev] " Matthew Wilcox
2026-01-26 4:44 ` Christoph Hellwig
2026-01-26 4:44 ` [f2fs-dev] " Christoph Hellwig
2026-01-26 20:12 ` Eric Biggers
2026-01-26 20:12 ` [f2fs-dev] " Eric Biggers via Linux-f2fs-devel
2026-01-28 21:38 ` Matthew Wilcox
2026-01-28 21:38 ` [f2fs-dev] " Matthew Wilcox
2026-01-28 22:14 ` Eric Biggers
2026-01-28 22:14 ` [f2fs-dev] " Eric Biggers via Linux-f2fs-devel
2026-01-26 4:43 ` Christoph Hellwig
2026-01-26 4:43 ` [f2fs-dev] " Christoph Hellwig
2026-01-22 15:42 ` fsverity cleanups, speedup and memory usage optimization v2 David Sterba
2026-01-22 15:42 ` [f2fs-dev] " David Sterba
-- strict thread matches above, loose matches on Subject: below --
2026-02-02 6:06 fsverity speedup and memory usage optimization v5 Christoph Hellwig
2026-02-02 6:06 ` [PATCH 07/11] fs: consolidate fsverity_info lookup in buffer.c Christoph Hellwig
2026-02-02 13:38 ` Jan Kara
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=20260122214958.GG5910@frogsfrogsfrogs \
--to=djwong@kernel.org \
--cc=aalbersh@redhat.com \
--cc=brauner@kernel.org \
--cc=chao@kernel.org \
--cc=dsterba@suse.com \
--cc=ebiggers@kernel.org \
--cc=fsverity@lists.linux.dev \
--cc=hch@lst.de \
--cc=jack@suse.cz \
--cc=jaegeuk@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=tytso@mit.edu \
--cc=viro@zeniv.linux.org.uk \
--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 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.