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-31 14:48:44 -0400 |
commit | 938e61d6d97c49d2af2a771519d5196c030945cb (patch) | |
tree | d23991d6c6b55b95d5df0cd79e5d78c75f62d8ed | |
parent | 1377175ff5bd5aa027dc406b2486f7638384dafd (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; } |