From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jesper Dangaard Brouer Subject: Re: [PATCH net-next] net: Don't return pfmemalloc pages to the page pool. Date: Thu, 20 Dec 2018 14:03:27 +0100 Message-ID: <20181220140327.4e186cdb@redhat.com> References: <20181219200651.824962-1-jonathan.lemon@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Cc: , brouer@redhat.com To: Jonathan Lemon Return-path: Received: from mx1.redhat.com ([209.132.183.28]:46944 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731550AbeLTNDa (ORCPT ); Thu, 20 Dec 2018 08:03:30 -0500 In-Reply-To: <20181219200651.824962-1-jonathan.lemon@gmail.com> Sender: netdev-owner@vger.kernel.org List-ID: On Wed, 19 Dec 2018 12:06:51 -0800 Jonathan Lemon wrote: > Return pfmemalloc pages back to the page allocator, instead of > holding them in the page pool. Have you experience this issue in practice or is it theory? > While here, also use the __page_pool_return_page() API. Don't combine several unrelated changed in one patch. > Signed-off-by: Jonathan Lemon > --- > net/core/page_pool.c | 5 ++--- > 1 file changed, 2 insertions(+), 3 deletions(-) > > diff --git a/net/core/page_pool.c b/net/core/page_pool.c > index 43a932cb609b..091007ff14a3 100644 > --- a/net/core/page_pool.c > +++ b/net/core/page_pool.c > @@ -233,7 +233,7 @@ void __page_pool_put_page(struct page_pool *pool, > * > * refcnt == 1 means page_pool owns page, and can recycle it. > */ > - if (likely(page_ref_count(page) == 1)) { > + if (likely(page_ref_count(page) == 1 && !page_is_pfmemalloc(page))) { I don't like adding this in the hot-path. Instead we could move this to the page alloc slow-path, and reject allocating pages with pgmemalloc in the first place. > /* Read barrier done in page_ref_count / READ_ONCE */ > > if (allow_direct && in_serving_softirq()) > @@ -259,8 +259,7 @@ void __page_pool_put_page(struct page_pool *pool, > * doing refcnt based recycle tricks, meaning another process > * will be invoking put_page. > */ > - __page_pool_clean_page(pool, page); > - put_page(page); > + __page_pool_return_page(pool, page); > } > EXPORT_SYMBOL(__page_pool_put_page); > -- Best regards, Jesper Dangaard Brouer MSc.CS, Principal Kernel Engineer at Red Hat LinkedIn: http://www.linkedin.com/in/brouer