On Fri, Dec 17, 2021 at 12:36 PM Linus Torvalds torvalds@linux-foundation.org wrote:
- Take a R/O pin (RDMA, VFIO, ...)
-> refcount > 1
- memset(mem, 0xff, pagesize);
-> Write fault -> COW
I do not believe this is actually a bug.
You asked for a R/O pin, and you got one.
If you want a shared pin that actually follows the changes of your process around, then that is what you should have asked for.
At the time of such a shared pin, you can do what we already do: re-use the page if it has a refcount of 1. Or do an early COW event (feel free to avoid the "mark it writable and dirty").
But note: *refcount* of 1. Not "mapcount". Because mapcount would be broken garbage.
Linus