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-31 14:48:44 -0400
commit938e61d6d97c49d2af2a771519d5196c030945cb (patch)
treed23991d6c6b55b95d5df0cd79e5d78c75f62d8ed
parent1377175ff5bd5aa027dc406b2486f7638384dafd (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;
}