summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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;
}