diff options
author | Andi Kleen <ak@linux.intel.com> | 2009-10-14 01:51:41 +0200 |
---|---|---|
committer | Andi Kleen <ak@linux.intel.com> | 2009-10-19 07:29:20 +0200 |
commit | 4779cb31c0ee3b355116745edca3f3e5fe865553 (patch) | |
tree | 7409cb0762ca55afe11aa981db4624d3496ed6fb /mm | |
parent | e43c3afb367112a5b357f9adfac7817255129c88 (diff) | |
download | linux-stable-4779cb31c0ee3b355116745edca3f3e5fe865553.tar.gz linux-stable-4779cb31c0ee3b355116745edca3f3e5fe865553.tar.bz2 linux-stable-4779cb31c0ee3b355116745edca3f3e5fe865553.zip |
HWPOISON: Fix page count leak in hwpoison late kill in do_swap_page
When returning due to a poisoned page drop the page count.
It wasn't a fatal problem because noone cares about the page count
on a poisoned page (except when it wraps), but it's cleaner to fix it.
Pointed out by Linus.
Signed-off-by: Andi Kleen <ak@linux.intel.com>
Diffstat (limited to 'mm')
-rw-r--r-- | mm/memory.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/mm/memory.c b/mm/memory.c index 7e91b5f9f690..7a3b0ad5594a 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -2539,7 +2539,7 @@ static int do_swap_page(struct mm_struct *mm, struct vm_area_struct *vma, } else if (PageHWPoison(page)) { ret = VM_FAULT_HWPOISON; delayacct_clear_flag(DELAYACCT_PF_SWAPIN); - goto out; + goto out_release; } lock_page(page); @@ -2611,6 +2611,7 @@ out_nomap: pte_unmap_unlock(page_table, ptl); out_page: unlock_page(page); +out_release: page_cache_release(page); return ret; } |