diff options
Diffstat (limited to 'mm/ksm.c')
| -rw-r--r-- | mm/ksm.c | 12 | 
1 files changed, 10 insertions, 2 deletions
@@ -2112,8 +2112,16 @@ static void cmp_and_merge_page(struct page *page, struct rmap_item *rmap_item)  		down_read(&mm->mmap_sem);  		vma = find_mergeable_vma(mm, rmap_item->address); -		err = try_to_merge_one_page(vma, page, -					    ZERO_PAGE(rmap_item->address)); +		if (vma) { +			err = try_to_merge_one_page(vma, page, +					ZERO_PAGE(rmap_item->address)); +		} else { +			/* +			 * If the vma is out of date, we do not need to +			 * continue. +			 */ +			err = 0; +		}  		up_read(&mm->mmap_sem);  		/*  		 * In case of failure, the page was not really empty, so we  | 
