Commit 61469f1d51777fc3b6d8d70da8373ee77ee13349
Committed by
Linus Torvalds
1 parent
6dbf6d3bb9
Exists in
master
and in
7 other branches
memcg: when do_swap's do_wp_page fails
Don't uncharge when do_swap_page's call to do_wp_page fails: the page which was charged for is there in the pagetable, and will be correctly uncharged when that area is unmapped - it was only its COWing which failed. And while we're here, remove earlier XXX comment: yes, OR in do_wp_page's return value (maybe VM_FAULT_WRITE) with do_swap_page's there; but if it fails, mask out success bits, which might confuse some arches e.g. sparc. Signed-off-by: Hugh Dickins <hugh@veritas.com> Cc: David Rientjes <rientjes@google.com> Acked-by: Balbir Singh <balbir@linux.vnet.ibm.com> Acked-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> Cc: Hirokazu Takahashi <taka@valinux.co.jp> Cc: YAMAMOTO Takashi <yamamoto@valinux.co.jp> Cc: Paul Menage <menage@google.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Showing 1 changed file with 3 additions and 6 deletions Side-by-side Diff
mm/memory.c
... | ... | @@ -2093,12 +2093,9 @@ |
2093 | 2093 | unlock_page(page); |
2094 | 2094 | |
2095 | 2095 | if (write_access) { |
2096 | - /* XXX: We could OR the do_wp_page code with this one? */ | |
2097 | - if (do_wp_page(mm, vma, address, | |
2098 | - page_table, pmd, ptl, pte) & VM_FAULT_OOM) { | |
2099 | - mem_cgroup_uncharge_page(page); | |
2100 | - ret = VM_FAULT_OOM; | |
2101 | - } | |
2096 | + ret |= do_wp_page(mm, vma, address, page_table, pmd, ptl, pte); | |
2097 | + if (ret & VM_FAULT_ERROR) | |
2098 | + ret &= VM_FAULT_ERROR; | |
2102 | 2099 | goto out; |
2103 | 2100 | } |
2104 | 2101 |