Messages in this thread | | | Date | Mon, 9 Jul 2012 15:58:37 +0530 | From | Srikar Dronamraju <> | Subject | Re: [PATCH v2 2/5] uprobes: __replace_page() should not use page_address_in_vma() |
| |
> ------------------------------------------------------------------------------ > Subject: [PATCH v2 2/5] uprobes: __replace_page() should not use page_address_in_vma() > > page_address_in_vma(old_page) in __replace_page() is ugly and wrong. > The caller already knows the correct virtual address, this page was > found by get_user_pages(vaddr). > > However, page_address_in_vma() can actually fail if page->mapping was > cleared by __delete_from_page_cache() after get_user_pages() returns. > But this means the race with page reclaim, write_opcode() should not > fail, it should retry and read this page again. Probably the race with > remove_mapping() is not possible due to page_freeze_refs() logic, but > afaics at least shmem_writepage()->shmem_delete_from_page_cache() can > clear ->mapping. > > We could change __replace_page() to return -EAGAIN in this case, but > it would be better to simply use the caller's vaddr and rely on > page_check_address(). > > Signed-off-by: Oleg Nesterov <oleg@redhat.com>
Acked-by: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
| |