On Wed, 18 Dec 2013 17:23:03 +0800 Wanpeng Li <liw...@linux.vnet.ibm.com> wrote:
> >>diff --git a/mm/rmap.c b/mm/rmap.c > >>index 55c8b8d..1e24813 100644 > >>--- a/mm/rmap.c > >>+++ b/mm/rmap.c > >>@@ -1347,6 +1347,7 @@ static int try_to_unmap_cluster(unsigned long cursor, > >>unsigned int *mapcount, > >> unsigned long end; > >> int ret = SWAP_AGAIN; > >> int locked_vma = 0; > >>+ int we_locked = 0; > >> > >> address = (vma->vm_start + cursor) & CLUSTER_MASK; > >> end = address + CLUSTER_SIZE; > >>@@ -1385,9 +1386,15 @@ static int try_to_unmap_cluster(unsigned long > >>cursor, unsigned int *mapcount, > >> BUG_ON(!page || PageAnon(page)); > >> > >> if (locked_vma) { > >>- mlock_vma_page(page); /* no-op if already mlocked */ > >>- if (page == check_page) > >>+ if (page != check_page) { > >>+ we_locked = trylock_page(page); > > > >If it's not us who has the page already locked, but somebody else, he > >might unlock it at this point and then the BUG_ON in mlock_vma_page() > >will trigger again. yes, this patch is pretty weak. > Any better idea is appreciated. ;-) Remove the BUG_ON() from mlock_vma_page()? Why was it added? isolate_lru_page() and putback_lru_page() and *might* require the page be locked, but I don't immediately see issues? -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/