Re: [PATCH 2/9] mm: remap_file_pages() fixes

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 12/20/2012 07:49 PM, Michel Lespinasse wrote:
Assorted small fixes. The first two are quite small:

- Move check for vma->vm_private_data && !(vma->vm_flags & VM_NONLINEAR)
   within existing if (!(vma->vm_flags & VM_NONLINEAR)) block.
   Purely cosmetic.

- In the VM_LOCKED case, when dropping PG_Mlocked for the over-mapped
   range, make sure we own the mmap_sem write lock around the
   munlock_vma_pages_range call as this manipulates the vma's vm_flags.

Last fix requires a longer explanation. remap_file_pages() can do its work
either through VM_NONLINEAR manipulation or by creating extra vmas.
These two cases were inconsistent with each other (and ultimately, both wrong)
as to exactly when did they fault in the newly mapped file pages:

- In the VM_NONLINEAR case, new file pages would be populated if
   the MAP_NONBLOCK flag wasn't passed. If MAP_NONBLOCK was passed,
   new file pages wouldn't be populated even if the vma is already
   marked as VM_LOCKED.

- In the linear (emulated) case, the work is passed to the mmap_region()
   function which would populate the pages if the vma is marked as
   VM_LOCKED, and would not otherwise - regardless of the value of the
   MAP_NONBLOCK flag, because MAP_POPULATE wasn't being passed to
   mmap_region().

The desired behavior is that we want the pages to be populated and locked
if the vma is marked as VM_LOCKED, or to be populated if the MAP_NONBLOCK
flag is not passed to remap_file_pages().

Signed-off-by: Michel Lespinasse <walken@xxxxxxxxxx>

Acked-by: Rik van Riel <riel@xxxxxxxxxx>

--
All rights reversed

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@xxxxxxxxx.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@xxxxxxxxx";> email@xxxxxxxxx </a>


[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]