Re: [GIT PULL] f2fs update for 7.0-rc1

From: Linus Torvalds

Date: Sat Feb 14 2026 - 12:51:12 EST


[ Note: added fsverity people ]

On Fri, 13 Feb 2026 at 18:45, Jaegeuk Kim <jaegeuk@xxxxxxxxxx> wrote:
>
> git://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs.git tags/f2fs-for-7.0-rc1

So I have pulled this, but as part of going over my conflict
resolution with the fsverity changes, I'm a bit unhappy.

I'm not unhappy about the f2fs thing in particular - I'm unhappy about
the fsverity integration side.

In particular, f2fs uses fsverity_verify_page() by doing

fsverity_verify_page(folio_file_page(folio,index))

which looks fine, and now wants that

struct fsverity_info *vi

and that was part of my conflict resolution.

But then I looked at what fsverity_verify_page() does, and that is just broken.

Because fsverity_verify_page() looks like this:

return fsverity_verify_blocks(vi, page_folio(page), PAGE_SIZE, 0);

and that's garbage.

We just turned the folio into a page, and now it turns it back into a
folio - but importantly it *loses* the index of the page inside the
folio while doing so!

In other words, fsverity_verify_page() does *not* work on large
folios. It only works when a folio is a page.

And I can't just use "fsverity_verify_folio()", because that verifies
the *whole* folio, not just the sub-page.

So my resolution was to just fix this thing and make it use
!fsverity_verify_blocks() directly, using the page offset within a
folio explicitly.

But I don't actually *really* know this code at all, and I can't
verify my resolution, and I'm unhappy with how subtle that
fsverity_verify_page() thing is.

I was initially going to just fix fsverity_verify_page() to actually
take the page offset into account properly, but it turns out that
there aren't very many other users.

Anyway, I *think* fsverity_verify_page() should be either fixed or
removed. The fix would be something like this:

- return fsverity_verify_blocks(vi, page_folio(page), PAGE_SIZE, 0);
+ struct folio *folio = page_folio(page);
+ unsigned int offset = folio_page_idx(folio, page) * PAGE_SIZE;
+ return fsverity_verify_blocks(vi, folio, PAGE_SIZE, offset);

but I didn't do that. Instead I did a hack-job in fs/f2fs/data.c,
which also involved changing a

fsverity_verify_page(vi, &folio->page)

into a

fsverity_verify_folio(vi, folio)

instead, because it really looked to me like it should be the whole
folio regardless of whether it was a large folio (broken before) or
not (working if so).

It's entirely possible that this code only deals with small page-sized
folios, in which case it doesn't matter. But that
f2fs_read_data_large_folio() code is definitely about multi-page
folios.

There's another fsverity_verify_page() use in fs/f2fs/compress.c. and
I didn't touch that one. The code doesn't use folios at all, so maybe
it only triggers for page == folio. I don't know, and that's when I
just started going "Somebody who knows this code needs to fix this".

Anyway, I think that fsverity_verify_page() case should be removed
too, and then the subtly broken function can just be deleted entirely
instead of being fixed.

Comments? Did I mess something up? Am I just being confused?

Regardless, please verify my merge resolution, and please do
*something* about that fsverity_verify_page() situation.

Linus