On Fri, Feb 7, 2020 at 12:19 PM Brian Geffon <bgeffon@xxxxxxxxxx> wrote: > > When remapping an anonymous, private mapping, if MREMAP_DONTUNMAP is > set, the source mapping will not be removed. Instead it will be > cleared as if a brand new anonymous, private mapping had been created > atomically as part of the mremap() call. The left-behind mapping (the "as if a brand new anonymous, private mapping" map) is immediately writable, right? If so, we need to account the additional commit charge. What about making the left-behind mapping PROT_NONE? This way, we'll still solve the address-space race in Lokesh's use case (because even a PROT_NONE mapping reserves address space) but won't incur any additional commit until someone calls mprotect(PROT_WRITE) on the left-behind mapping. Imagine having two equal-sized mappings and wanting to use mremap() to swap them: you can implement this swap by carving off a third region of address space and making two mremap() calls. But without the PROT_NONE, you pay additional commit for that third region even if you don't need it.