summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2018-08-22 20:05:22 -0400
committerKent Overstreet <kent.overstreet@gmail.com>2018-08-28 18:55:04 -0400
commit7242819a66cca33fbcefda6fc4a853e3f3a0544d (patch)
treed8ba32bdfb38512eacb19f3ce0a7c724482cd40b
parent39e2b7481329be9f4b3f7459413c9cae0e63af01 (diff)
fix a page refcount bug
-rw-r--r--mm/filemap.c10
1 files changed, 4 insertions, 6 deletions
diff --git a/mm/filemap.c b/mm/filemap.c
index 0de9fe4c61e6..48034c23bb99 100644
--- a/mm/filemap.c
+++ b/mm/filemap.c
@@ -913,11 +913,8 @@ static int __add_to_page_cache_locked(struct page *page,
}
error = radix_tree_maybe_preload(gfp_mask & GFP_RECLAIM_MASK);
- if (error) {
- if (!huge)
- mem_cgroup_cancel_charge(page, memcg, false);
- goto err;
- }
+ if (error)
+ goto err_uncharge;
get_page(page);
page->mapping = mapping;
@@ -945,9 +942,10 @@ err_insert:
page->mapping = NULL;
/* Leave page->index set: truncation relies upon it */
xa_unlock_irq(&mapping->i_pages);
+ put_page(page);
+err_uncharge:
if (!huge)
mem_cgroup_cancel_charge(page, memcg, false);
- put_page(page);
goto err;
}