summaryrefslogtreecommitdiff
path: root/mm/filemap.c
diff options
context:
space:
mode:
authorTony Lindgren <tony@atomide.com>2021-02-15 06:41:56 +0200
committerTony Lindgren <tony@atomide.com>2021-02-15 06:41:56 +0200
commit857de6fe2f86b009df620f7cdb07c262cc17070d (patch)
treee9718ebeeef39485a51a9f8e3c8122da18c796cf /mm/filemap.c
parent9bbce32a20d6a72c767a7f85fd6127babd1410ac (diff)
parentfbfa463be8dc7957ee4f81556e9e1ea2a951807d (diff)
Merge branch 'fixes-v5.11' into fixes
Diffstat (limited to 'mm/filemap.c')
-rw-r--r--mm/filemap.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/mm/filemap.c b/mm/filemap.c
index 5c9d564317a5..aa0e0fb04670 100644
--- a/mm/filemap.c
+++ b/mm/filemap.c
@@ -835,6 +835,7 @@ noinline int __add_to_page_cache_locked(struct page *page,
XA_STATE(xas, &mapping->i_pages, offset);
int huge = PageHuge(page);
int error;
+ bool charged = false;
VM_BUG_ON_PAGE(!PageLocked(page), page);
VM_BUG_ON_PAGE(PageSwapBacked(page), page);
@@ -848,6 +849,7 @@ noinline int __add_to_page_cache_locked(struct page *page,
error = mem_cgroup_charge(page, current->mm, gfp);
if (error)
goto error;
+ charged = true;
}
gfp &= GFP_RECLAIM_MASK;
@@ -896,6 +898,8 @@ unlock:
if (xas_error(&xas)) {
error = xas_error(&xas);
+ if (charged)
+ mem_cgroup_uncharge(page);
goto error;
}