On Sun, May 03, 2020 at 08:10:36PM -0700, Matthew Wilcox wrote: > On Wed, Apr 29, 2020 at 06:36:50AM -0700, Matthew Wilcox wrote: > > @@ -886,7 +906,7 @@ static int __add_to_page_cache_locked(struct page *page, > > /* Leave page->index set: truncation relies upon it */ > > if (!huge) > > mem_cgroup_cancel_charge(page, memcg, false); > > - put_page(page); > > + page_ref_sub(page, nr); > > return xas_error(&xas); > > } > > ALLOW_ERROR_INJECTION(__add_to_page_cache_locked, ERRNO); > > This is wrong. page_ref_sub() will not call __put_page() if the refcount > gets to zero. What do people prefer? *sigh*. It's not wrong. The caller holds a reference on the page already, so calling page_ref_sub() will never reduce the refcount to 0. The latest version looks like this: + page_ref_sub(page, nr); + VM_BUG_ON_PAGE(page_count(page) <= 0, page);