From: Eric Biggers <ebiggers@kernel.org>
To: Dave Chinner <david@fromorbit.com>
Cc: Andrey Albershteyn <aalbersh@redhat.com>,
linux-xfs@vger.kernel.org, linux-fsdevel@vger.kernel.org
Subject: Re: [RFC PATCH 00/11] fs-verity support for XFS
Date: Wed, 14 Dec 2022 22:47:37 -0800 [thread overview]
Message-ID: <Y5rDCcYGgH72Wn/e@sol.localdomain> (raw)
In-Reply-To: <20221214230632.GA1971568@dread.disaster.area>
On Thu, Dec 15, 2022 at 10:06:32AM +1100, Dave Chinner wrote:
> > Well, my proposal at
> > https://lore.kernel.org/r/20221028224539.171818-2-ebiggers@kernel.org is to keep
> > tracking the "verified" status at the individual Merkle tree block level, by
> > adding a bitmap fsverity_info::hash_block_verified. That is part of the
> > fs/verity/ infrastructure, and all filesystems would be able to use it.
>
> Yeah, i had a look at that rewrite of the verification code last
> night - I get the gist of what it is doing, but a single patch of
> that complexity is largely impossible to sanely review...
Thanks for taking a look at it. It doesn't really lend itself to being split
up, unfortunately, but I'll see what I can do.
> Correct me if I'm wrong, but won't using a bitmap with 1 bit per
> verified block cause problems with contiguous memory allocation
> pretty quickly? i.e. a 64kB bitmap only tracks 512k blocks, which is
> only 2GB of merkle tree data. Hence at file sizes of 100+GB, the
> bitmap would have to be kvmalloc()d to guarantee allocation will
> succeed.
>
> I'm not really worried about the bitmap memory usage, just that it
> handles large contiguous allocations sanely. I suspect we may
> eventually need a sparse bitmap (e.g. the old btrfs bit-radix
> implementation) to track verification in really large files
> efficiently.
Well, that's why my patch uses kvmalloc() to allocate the bitmap.
I did originally think it was going to have to be a sparse bitmap that ties into
the shrinker so that pages of it can be evicted. But if you do the math, the
required bitmap size is only 1 / 2^22 the size of the file, assuming the Merkle
tree uses SHA-256 and 4K blocks. So a 100MB file only needs a 24-byte bitmap,
and the bitmap for any file under 17GB fits in a 4K page.
My patch puts an arbitrary limit at a 1 MiB bitmap, which would be a 4.4TB file.
It's not ideal to say "4 TB Ought To Be Enough For Anybody". But it does feel
that it's not currently worth the extra complexity and runtime overhead of
implementing a full-blown sparse bitmap with cache eviction support, when no one
currently has a use case for fsverity on files anywhere near that large.
> The other issue is that verify_page() assumes that it can drop the
> reference to the cached object itself - the caller actually owns the
> reference to the object, not the verify_page() code. Hence if we are
> passing opaque buffers to verify_page() rather page cache pages, we
> need a ->drop_block method that gets called instead of put_page().
> This will allow the filesystem to hold a reference to the merkle
> tree block data while the verification occurs, ensuring that they
> don't get reclaimed by memory pressure whilst still in use...
Yes, probably the prototype of ->read_merkle_tree_page will need to change too.
- Eric
next prev parent reply other threads:[~2022-12-15 6:47 UTC|newest]
Thread overview: 51+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-12-13 17:29 [RFC PATCH 00/11] fs-verity support for XFS Andrey Albershteyn
2022-12-13 17:29 ` [RFC PATCH 01/11] xfs: enable large folios in xfs_setup_inode() Andrey Albershteyn
2022-12-14 0:53 ` Dave Chinner
2022-12-13 17:29 ` [RFC PATCH 02/11] pagemap: add mapping_clear_large_folios() wrapper Andrey Albershteyn
2022-12-13 17:55 ` Matthew Wilcox
2022-12-13 19:33 ` Eric Biggers
2022-12-13 21:10 ` Dave Chinner
2022-12-14 6:52 ` Eric Biggers
2022-12-14 8:12 ` Dave Chinner
2022-12-13 21:08 ` Dave Chinner
2023-01-09 16:34 ` Andrey Albershteyn
2022-12-13 17:29 ` [RFC PATCH 03/11] xfs: add attribute type for fs-verity Andrey Albershteyn
2022-12-13 17:43 ` Eric Sandeen
2022-12-14 1:03 ` Dave Chinner
2023-01-09 16:37 ` Andrey Albershteyn
2022-12-13 17:29 ` [RFC PATCH 04/11] xfs: add fs-verity ro-compat flag Andrey Albershteyn
2022-12-14 1:06 ` Dave Chinner
2022-12-13 17:29 ` [RFC PATCH 05/11] xfs: add inode on-disk VERITY flag Andrey Albershteyn
2022-12-14 1:29 ` Dave Chinner
2023-01-09 16:51 ` Andrey Albershteyn
2022-12-13 17:29 ` [RFC PATCH 06/11] xfs: initialize fs-verity on file open and cleanup on inode destruction Andrey Albershteyn
2022-12-14 1:35 ` Dave Chinner
2022-12-14 5:25 ` Eric Biggers
2022-12-14 8:18 ` Dave Chinner
2022-12-13 17:29 ` [RFC PATCH 07/11] xfs: disable direct read path for fs-verity sealed files Andrey Albershteyn
2022-12-14 2:07 ` Dave Chinner
2022-12-14 5:44 ` Eric Biggers
2022-12-23 16:18 ` Christoph Hellwig
2023-01-09 17:23 ` Andrey Albershteyn
2022-12-13 17:29 ` [RFC PATCH 08/11] xfs: don't enable large folios on fs-verity sealed inode Andrey Albershteyn
2022-12-14 2:07 ` Dave Chinner
2022-12-13 17:29 ` [RFC PATCH 09/11] iomap: fs-verity verification on page read Andrey Albershteyn
2022-12-13 19:02 ` Eric Biggers
2023-01-09 16:58 ` Andrey Albershteyn
2022-12-14 5:43 ` Dave Chinner
2022-12-13 17:29 ` [RFC PATCH 10/11] xfs: add fs-verity support Andrey Albershteyn
2022-12-13 19:08 ` Eric Biggers
2022-12-13 19:22 ` Darrick J. Wong
2022-12-13 20:13 ` Eric Biggers
2022-12-13 20:33 ` Dave Chinner
2022-12-13 20:39 ` Eric Biggers
2022-12-13 21:40 ` Dave Chinner
2022-12-14 7:58 ` Dave Chinner
2022-12-13 17:29 ` [RFC PATCH 11/11] xfs: add fs-verity ioctls Andrey Albershteyn
2022-12-13 20:50 ` [RFC PATCH 00/11] fs-verity support for XFS Eric Biggers
2022-12-13 22:11 ` Dave Chinner
2022-12-14 6:31 ` Eric Biggers
2022-12-14 23:06 ` Dave Chinner
2022-12-15 6:47 ` Eric Biggers [this message]
2022-12-15 20:57 ` Dave Chinner
2022-12-16 5:04 ` Eric Biggers
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=Y5rDCcYGgH72Wn/e@sol.localdomain \
--to=ebiggers@kernel.org \
--cc=aalbersh@redhat.com \
--cc=david@fromorbit.com \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-xfs@vger.kernel.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