Re: [RFC PATCH 0/1] mm/mremap: add MREMAP_MIRROR flag
From: Mike Kravetz
Date: Fri Jul 07 2017 - 13:12:51 EST
On 07/07/2017 04:03 AM, Anshuman Khandual wrote:
> On 07/06/2017 09:47 PM, Mike Kravetz wrote:
>> The mremap system call has the ability to 'mirror' parts of an existing
>> mapping. To do so, it creates a new mapping that maps the same pages as
>> the original mapping, just at a different virtual address. This
>> functionality has existed since at least the 2.6 kernel [1]. A comment
>> was added to the code to help preserve this feature.
>
> In mremap() implementation move_vma() attempts to do do_unmap() after
> move_page_tables(). do_unmap() on the original VMA bails out because
> the requested length being 0. Hence both the original VMA and the new
> VMA remains after the page table migration. Seems like this whole
> mirror function is by coincidence or it has been designed that way ?
I honestly do not know. From what I can tell, the functionality existed
in 2.4. The email thread [1], exists because it was 'accidentally' removed
in 2.6. All of this is before git history (and my involvement).
My 'guess' is that this functionality was created by coincidence. Someone
noticed it and took advantage of it. When it was removed, their code broke.
The code was 'fixed' and a comment was added to the code in an attempt to
prevent removing the functionality in the future. Again, this is speculation
as I was not originally involved.
The point of this RFC is to consider adding the functionality to the API.
If we are carrying the functionality in the code, we should at least document
so that application programmers can take advantage of it.
[1] https://lkml.org/lkml/2004/1/12/260
--
Mike Kravetz