On Mon, Sep 28, 2020 at 11:39 AM Jason Gunthorpe <jgg@xxxxxxxx> wrote: > > All of gup_fast and copy_mm could be wrappered in a seq count so that > gup_fast always goes to the slow path if fork is concurrent. > > That doesn't sound too expensive and avoids all the problems you > pointed with the WP scheme. Ok, I'll start by just removing the "write protect early trick". It really doesn't work reliably anyway due to memory ordering, and while I think the dirty bit is ok (and we could probably also set it unconditionally to make _sure_ it's not dropped like Peter says) it just makes me convinced it's the wrong approach. Fixing it at a per-pte level is too expensive, and yeah, if we really really care about the fork consistency, the sequence count approach should be much simpler and more obvious. So I'll do the pte wrprotect/restore removal. Anybody willing to do and test the sequence count approach? Linus