Re: [PATCH v3] mm/gup: Allow real explicit breaking of COW

From: Linus Torvalds
Date: Fri Aug 21 2020 - 13:04:10 EST


On Fri, Aug 21, 2020 at 8:48 AM Jan Kara <jack@xxxxxxx> wrote:
>
> I was more concerned about the case where you decide to writeably map (i.e.
> wp_page_reuse() path) a PageKsm() page.

Yeah, so I think what I do is stricter than what we used to do - any
KSM page will never be re-used, simply because the KSM part will have
incremented the page count.

So as far as I can tell, with that patch we will never ever share
except for the "I really am the _only_ user of the page, there are no
KSM or swap cache pages" case.

That's the whole point of the patch. Get rid of all the games. If
there is *any* possible other use - be it KSM or swap cache or
*anything*, we don't try to re-use it.

> And also here I was more concerned that page_mapcount != 1 || page_count !=
> 1 check could be actually a weaker check than what reuse_swap_page() does.

If that is the case, then yes, that would be a problem.

But really, if page_count() == 1, then we're the only possible thing
that holds that page. Nothing else can have a reference to it - by
definition.

And if page_count() != 1, we will not share. Ever. We'll just do what
zap_paghe_range() does - unmap the old page and do the
page_remove_rmap().

The only small worry would be the race between releasing the page
table lock - when we allocate a new page - and somebody coming in and
doing something magical to that page. But that's where holding the
page lock comes in.

Plus that part isn't anything my patch changes.

Linus