Re: [PATCH v5 00/13] Move fscrypt and fsverity info out of struct inode
From: Christoph Hellwig <hch@infradead.org>
Date: 2025-08-10 17:14:14
Also in:
ceph-devel, linux-btrfs, linux-f2fs-devel, linux-fscrypt, linux-fsdevel
On Sun, Aug 10, 2025 at 10:03:11AM -0700, Eric Biggers wrote:
I assume you actually still mean fsverity, not fscrypt.
Yes, sorry.
First, it would be helpful not to use one solution for fscrypt and a totally different solution for fsverity, as that would increase the maintenance cost well beyond that of either solution individually.
I agree that reducing the number of infrastructures is a goal. But I don't think we should limit us to a single "solution" for different kinds of problems.
Second, the fsverity info can be loaded very frequently. For example, curently it's loaded for each 4K data block processed.
Well, we can easily keep a once looked up data structure around for any operation that does not leave file system control. So for writing that's a single ioctl context. For read that is a single call into ->readahead, or maybe even ->read_iter.
Also, there *are* use cases in which most files on the filesystem have fsverity enabled. Not super common, but they exist.
Sure. But the typical use case is a few files, and even that is just a tiny minority of all ext4/f2fs/xfs file systems.
It doesn't really seem like the kind of solution that's a good choice for a frequently-loaded field. And that's only the load; it's not getting into the insertion (and resizing) part.
Assuming you actually get it down to once per high-level operation above, it will still be absolute noise compared to the I/O generated.
If we're going so far as to use a rhashtable, I have to wonder why we aren't first prioritizing other fields. For example ext4_inode_info unconditionally has 40 bytes for fast_commit information, even though fast_commit is an experimental ext4 feature that isn't enabled on most filesystems. That's 5 times as much as i_verity_info. And quota has 24 bytes under CONFIG_QUOTA. And there are even holes in the ext4_inode_info struct; we could also just improve the field packing!
All that does sound like a good idea, independent of what we are discussing here.