On Wed, 18 Dec 2013 17:23:03 +0800 Wanpeng Li <liwanp@xxxxxxxxxxxxxxxxxx> 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, 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>