diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2018-08-22 20:05:22 -0400 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@gmail.com> | 2018-08-28 18:55:04 -0400 |
commit | 7242819a66cca33fbcefda6fc4a853e3f3a0544d (patch) | |
tree | d8ba32bdfb38512eacb19f3ce0a7c724482cd40b | |
parent | 39e2b7481329be9f4b3f7459413c9cae0e63af01 (diff) |
fix a page refcount bug
-rw-r--r-- | mm/filemap.c | 10 |
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; } |