Re: Extending page pinning into fs/direct-io.c

From: Linus Torvalds
Date: Thu May 25 2023 - 13:26:10 EST


On Thu, May 25, 2023 at 10:15 AM David Howells <dhowells@xxxxxxxxxx> wrote:
>
> It doesn't seem I can add it to mm.h as an inline function.

What? We already have that pattern inside is_longterm_pinnable_page(),
so that's really strange.

But regardless, please don't duplicate that odd conditional for no
reason, and don't scream.

So regardless of where it is, make that "is_zero_folio()" just do
"is_zero_page(&folio->page)" rather than repeat the question.

I also wonder whether we shouldn't just use the "transparent union"
argument thing more aggressively. Something like

typedef union {
struct page *page;
struct folio *folio;
} page_or_folio_t __attribute__ ((__transparent_union__));

and then you should be able to do something like this:

static inline bool is_zero_page(const page_or_folio_t arg)
{
return is_zero_pfn(page_to_pfn(arg.page));
}

and we don't have to keep generating the two versions over and over
and over again.

Linus