summaryrefslogtreecommitdiffstats
path: root/mm/ksm.c
diff options
context:
space:
mode:
authorJames Morris <jmorris@namei.org>2011-06-30 18:43:56 +1000
committerJames Morris <jmorris@namei.org>2011-06-30 18:43:56 +1000
commit5b944a71a192977c1c018bbcfa0c52dca48e2368 (patch)
tree9f234c4a93bb28890ad086c846d2bf0b35f7f7ae /mm/ksm.c
parent0e4ae0e0dec634b2ae53ac57d14141b140467dbe (diff)
parentc017d0d1351f916c0ced3f358afc491fdcf490b4 (diff)
downloadop-kernel-dev-5b944a71a192977c1c018bbcfa0c52dca48e2368.zip
op-kernel-dev-5b944a71a192977c1c018bbcfa0c52dca48e2368.tar.gz
Merge branch 'linus' into next
Diffstat (limited to 'mm/ksm.c')
-rw-r--r--mm/ksm.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/mm/ksm.c b/mm/ksm.c
index d708b3e..9a68b0c 100644
--- a/mm/ksm.c
+++ b/mm/ksm.c
@@ -1302,6 +1302,12 @@ static struct rmap_item *scan_get_next_rmap_item(struct page **page)
slot = list_entry(slot->mm_list.next, struct mm_slot, mm_list);
ksm_scan.mm_slot = slot;
spin_unlock(&ksm_mmlist_lock);
+ /*
+ * Although we tested list_empty() above, a racing __ksm_exit
+ * of the last mm on the list may have removed it since then.
+ */
+ if (slot == &ksm_mm_head)
+ return NULL;
next_mm:
ksm_scan.address = 0;
ksm_scan.rmap_list = &slot->rmap_list;
OpenPOWER on IntegriCloud