Re: [PATCH v1] kernel/fork: only call untrack_pfn_clear() on VMAs duplicated for fork()

From: David Hildenbrand
Date: Thu Apr 24 2025 - 04:48:38 EST


Probably the right way of attaching such metadata to a VMA would be
remembering it alongside the VMA in a very simple way.

For example, when we perform a reservation we would allocate a refcounted
object and assign it to the VMA (pointer, xarray, whatever).

Duplicating the VMA would increase the refcount. Freeing a VMA would
decrease the refcount.

Once the refcount goes to zero, we undo the reservation and free the object.

We would not adjust a reservation on partial VMA unmap (split + unmap A or
B), but I strongly assume that would just be fine as long as we undo the
reservation once the refcount goes to 0.

Yeah this is a really good idea actually, almost kinda what refcounts are
for haha...

The problem is we talk about this idly here, but neither of us wants to
actually write PAT code I'd say, so this may go nowhere. But maybe one of
us will get so frustrated that we do this anyway but still...

Then again - actually, is this something you are planning to tackle?

I hate this much with that much passion that I'll give it a try for a couple of hours, as it might fix the other issues we are seeing. So far it looks like it cleans up stuff *beautifully*. Even VM_PAT can go ... :)

... and I think we still have space in vm_area_struct without increasing it beyond 192 bytes.

--
Cheers,

David / dhildenb