From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-24.8 required=3.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_SANE_1,USER_IN_DEF_DKIM_WL autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id B48D1C433DB for ; Wed, 10 Feb 2021 16:23:21 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 80BA264E77 for ; Wed, 10 Feb 2021 16:23:21 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232298AbhBJQXF (ORCPT ); Wed, 10 Feb 2021 11:23:05 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37684 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231983AbhBJQW7 (ORCPT ); Wed, 10 Feb 2021 11:22:59 -0500 Received: from mail-ot1-x32c.google.com (mail-ot1-x32c.google.com [IPv6:2607:f8b0:4864:20::32c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3E287C06174A for ; Wed, 10 Feb 2021 08:22:19 -0800 (PST) Received: by mail-ot1-x32c.google.com with SMTP id l23so2285081otn.10 for ; Wed, 10 Feb 2021 08:22:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:from:to:cc:subject:in-reply-to:message-id:references :user-agent:mime-version; bh=wc8HtUu6YXXorPykhuoj08SCrBEaocuYohr96nbgn+w=; b=fpSdWoUW/YxqsP5HrQVPzNsTdbTt5mOIk6GqFhMMF/biAw553DP/Q7qeQJMjwPShNk 1tRCVOShdBPkTNGrIargdgle8wgQceXqCAn3IHA7g3D04Ow8R7+9FWnFmuNmYkLtRhc3 NPZRlQhxOcWweh5MO8A8cXXzWeWCBg+WAxOyFchaYUnrwwxZ4crSYQ0oL8jAS9UrwmfP CW1W7cC6X2NLISJ0M4LetFXkBGcA78Y68b1khrpiqAvP7GG9vuz60hI/o+GaUIpyObsJ SJ7LZjvLn5dEu4MAlTKTFOVnNmu8Z9Fsn7GavQTkW21qdobIJyuLdv3dBLsT3lnHDn9s ymow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:in-reply-to:message-id :references:user-agent:mime-version; bh=wc8HtUu6YXXorPykhuoj08SCrBEaocuYohr96nbgn+w=; b=rBv1vjexs/3sehbiTsD/I2F+sS4Bc74ZaAEhm+OUCubMohOUuXuYU3juuUWVMHzskh 510ssYQ5qEcYws9Ya3MEfgIavQmDwSlzVzQCCHDYxNFHmRREJTeOgIXM2VJgsQDZPtxw V9ux1CO6rSdRtMiZpMdIuGrvjRoHl+wH/6KmiR0tOCj+fq4NBrPXxGuDp6t5Cn909+5Z QdTrWt7yuSvDhdIKfEB2lYcppZ3TyPH0l5XrQ+81pNZcANH3eG/eHAjcNbwz3C5bCXDe f+ux+CLOpIia9knSw+cBcEgcIIuPuts3tQTtUJO85CVz61Cw++gjd1RB4A5K/i7Bp+Pt CXGA== X-Gm-Message-State: AOAM530/P6/JUw1igT3D1miNcQRh0zamKWuGdPcBOQ3XxZOxusZo+9dF K2RsWubSmdaH8PifmY0FBGBAOQ== X-Google-Smtp-Source: ABdhPJzFYRaplbkS1RH+LmiiiX/VXruT2JjzG+k8qQn+YmZ8WOswV6fq4bPqMPbLfV5JAEg+RBBs9w== X-Received: by 2002:a05:6830:3497:: with SMTP id c23mr1310200otu.253.1612974138446; Wed, 10 Feb 2021 08:22:18 -0800 (PST) Received: from eggly.attlocal.net (172-10-233-147.lightspeed.sntcca.sbcglobal.net. [172.10.233.147]) by smtp.gmail.com with ESMTPSA id 94sm466895otf.41.2021.02.10.08.22.17 (version=TLS1 cipher=ECDHE-ECDSA-AES128-SHA bits=128/128); Wed, 10 Feb 2021 08:22:17 -0800 (PST) Date: Wed, 10 Feb 2021 08:22:00 -0800 (PST) From: Hugh Dickins X-X-Sender: hugh@eggly.anvils To: Johannes Weiner cc: Hugh Dickins , Andrew Morton , Michal Hocko , Shakeel Butt , Roman Gushchin , linux-mm@kvack.org, cgroups@vger.kernel.org, linux-kernel@vger.kernel.org, kernel-team@fb.com Subject: Re: [PATCH] mm: page-writeback: simplify memcg handling in test_clear_page_writeback() In-Reply-To: Message-ID: References: <20210209214543.112655-1-hannes@cmpxchg.org> User-Agent: Alpine 2.11 (LSU 23 2013-08-11) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, 9 Feb 2021, Hugh Dickins wrote: > On Tue, 9 Feb 2021, Johannes Weiner wrote: > > > Page writeback doesn't hold a page reference, which allows truncate to > > free a page the second PageWriteback is cleared. This used to require > > special attention in test_clear_page_writeback(), where we had to be > > careful not to rely on the unstable page->memcg binding and look up > > all the necessary information before clearing the writeback flag. > > > > Since commit 073861ed77b6 ("mm: fix VM_BUG_ON(PageTail) and > > BUG_ON(PageWriteback)") test_clear_page_writeback() is called with an > > explicit reference on the page, and this dance is no longer needed. > > > > Use unlock_page_memcg() and dec_lruvec_page_stat() directly. > > s/stat()/state()/ > > This is a nice cleanup: I hadn't seen that connection at all. > > But I think you should take it further: > __unlock_page_memcg() can then be static in mm/memcontrol.c, > and its declarations deleted from include/linux/memcontrol.h? And further: void lock_page_memcg(page), not returning memcg. > > And further: delete __dec_lruvec_state() and dec_lruvec_state() > from include/linux/vmstat.h - unless you feel that every "inc" > ought to be matched by a "dec", even when unused. > > > > > Signed-off-by: Johannes Weiner > > Acked-by: Hugh Dickins > > > --- > > mm/page-writeback.c | 9 +++------ > > 1 file changed, 3 insertions(+), 6 deletions(-) > > > > diff --git a/mm/page-writeback.c b/mm/page-writeback.c > > index eb34d204d4ee..f6c2c3165d4d 100644 > > --- a/mm/page-writeback.c > > +++ b/mm/page-writeback.c > > @@ -2722,12 +2722,9 @@ EXPORT_SYMBOL(clear_page_dirty_for_io); > > int test_clear_page_writeback(struct page *page) > > { > > struct address_space *mapping = page_mapping(page); > > - struct mem_cgroup *memcg; > > - struct lruvec *lruvec; > > int ret; > > > > - memcg = lock_page_memcg(page); > > - lruvec = mem_cgroup_page_lruvec(page, page_pgdat(page)); > > + lock_page_memcg(page); > > if (mapping && mapping_use_writeback_tags(mapping)) { > > struct inode *inode = mapping->host; > > struct backing_dev_info *bdi = inode_to_bdi(inode); > > @@ -2755,11 +2752,11 @@ int test_clear_page_writeback(struct page *page) > > ret = TestClearPageWriteback(page); > > } > > if (ret) { > > - dec_lruvec_state(lruvec, NR_WRITEBACK); > > + dec_lruvec_page_state(page, NR_WRITEBACK); > > dec_zone_page_state(page, NR_ZONE_WRITE_PENDING); > > inc_node_page_state(page, NR_WRITTEN); > > } > > - __unlock_page_memcg(memcg); > > + unlock_page_memcg(page); > > return ret; > > } > > > > -- > > 2.30.0 > From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-24.8 required=3.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_SANE_1,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6468BC433E0 for ; Wed, 10 Feb 2021 16:22:21 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id E10E164E6B for ; Wed, 10 Feb 2021 16:22:20 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org E10E164E6B Authentication-Results: mail.kernel.org; dmarc=fail (p=reject dis=none) header.from=google.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 54BE56B006C; Wed, 10 Feb 2021 11:22:20 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 4FDA86B006E; Wed, 10 Feb 2021 11:22:20 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 4141B6B0070; Wed, 10 Feb 2021 11:22:20 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0220.hostedemail.com [216.40.44.220]) by kanga.kvack.org (Postfix) with ESMTP id 2B3226B006C for ; Wed, 10 Feb 2021 11:22:20 -0500 (EST) Received: from smtpin16.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay02.hostedemail.com (Postfix) with ESMTP id E116F16B1A for ; Wed, 10 Feb 2021 16:22:19 +0000 (UTC) X-FDA: 77802875598.16.paste52_3d055c127611 Received: from filter.hostedemail.com (10.5.16.251.rfc1918.com [10.5.16.251]) by smtpin16.hostedemail.com (Postfix) with ESMTP id B9BB2100E690C for ; Wed, 10 Feb 2021 16:22:19 +0000 (UTC) X-HE-Tag: paste52_3d055c127611 X-Filterd-Recvd-Size: 5996 Received: from mail-ot1-f41.google.com (mail-ot1-f41.google.com [209.85.210.41]) by imf13.hostedemail.com (Postfix) with ESMTP for ; Wed, 10 Feb 2021 16:22:19 +0000 (UTC) Received: by mail-ot1-f41.google.com with SMTP id k10so2326922otl.2 for ; Wed, 10 Feb 2021 08:22:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:from:to:cc:subject:in-reply-to:message-id:references :user-agent:mime-version; bh=wc8HtUu6YXXorPykhuoj08SCrBEaocuYohr96nbgn+w=; b=fpSdWoUW/YxqsP5HrQVPzNsTdbTt5mOIk6GqFhMMF/biAw553DP/Q7qeQJMjwPShNk 1tRCVOShdBPkTNGrIargdgle8wgQceXqCAn3IHA7g3D04Ow8R7+9FWnFmuNmYkLtRhc3 NPZRlQhxOcWweh5MO8A8cXXzWeWCBg+WAxOyFchaYUnrwwxZ4crSYQ0oL8jAS9UrwmfP CW1W7cC6X2NLISJ0M4LetFXkBGcA78Y68b1khrpiqAvP7GG9vuz60hI/o+GaUIpyObsJ SJ7LZjvLn5dEu4MAlTKTFOVnNmu8Z9Fsn7GavQTkW21qdobIJyuLdv3dBLsT3lnHDn9s ymow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:in-reply-to:message-id :references:user-agent:mime-version; bh=wc8HtUu6YXXorPykhuoj08SCrBEaocuYohr96nbgn+w=; b=krWxiRPUIZEleqhnIhELbVwcHRydYtUgSUdhR9kAZXM2xjGz+KR9baIkqfSTmDqnVv Vb+D/1C8eDTHy378u+E9nSsL+sQedy6ls4SC3yLd9IBEPv4ASdewyJA1FONAtklO4yw0 LF5J0yMWu6HKuK76+HuxeL7pBfUDrMSup3mWYNgfRDWqkYmTanNG0nhKlkI47coFyLWy 0S9O1zCyVJaZtQGY7VmOjK1IcXzC0o4glGY6w0Zs+/udqZlA+Xs/rLNjGVUU2LkH+3JC 0WceogJqOSoTNBS97TU4rnqKTGfKM/KHmInzUOitLB77yszm/+Pf6wIj6wiH56SisOMg JzlA== X-Gm-Message-State: AOAM532YxUGvm59WKnuy8ULFKBna21Jvss+cGcxKfgAOLzFlb2fubVEo j7GM+86CNXn1WXRfUtNO/Dr0xA== X-Google-Smtp-Source: ABdhPJzFYRaplbkS1RH+LmiiiX/VXruT2JjzG+k8qQn+YmZ8WOswV6fq4bPqMPbLfV5JAEg+RBBs9w== X-Received: by 2002:a05:6830:3497:: with SMTP id c23mr1310200otu.253.1612974138446; Wed, 10 Feb 2021 08:22:18 -0800 (PST) Received: from eggly.attlocal.net (172-10-233-147.lightspeed.sntcca.sbcglobal.net. [172.10.233.147]) by smtp.gmail.com with ESMTPSA id 94sm466895otf.41.2021.02.10.08.22.17 (version=TLS1 cipher=ECDHE-ECDSA-AES128-SHA bits=128/128); Wed, 10 Feb 2021 08:22:17 -0800 (PST) Date: Wed, 10 Feb 2021 08:22:00 -0800 (PST) From: Hugh Dickins X-X-Sender: hugh@eggly.anvils To: Johannes Weiner cc: Hugh Dickins , Andrew Morton , Michal Hocko , Shakeel Butt , Roman Gushchin , linux-mm@kvack.org, cgroups@vger.kernel.org, linux-kernel@vger.kernel.org, kernel-team@fb.com Subject: Re: [PATCH] mm: page-writeback: simplify memcg handling in test_clear_page_writeback() In-Reply-To: Message-ID: References: <20210209214543.112655-1-hannes@cmpxchg.org> User-Agent: Alpine 2.11 (LSU 23 2013-08-11) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: On Tue, 9 Feb 2021, Hugh Dickins wrote: > On Tue, 9 Feb 2021, Johannes Weiner wrote: > > > Page writeback doesn't hold a page reference, which allows truncate to > > free a page the second PageWriteback is cleared. This used to require > > special attention in test_clear_page_writeback(), where we had to be > > careful not to rely on the unstable page->memcg binding and look up > > all the necessary information before clearing the writeback flag. > > > > Since commit 073861ed77b6 ("mm: fix VM_BUG_ON(PageTail) and > > BUG_ON(PageWriteback)") test_clear_page_writeback() is called with an > > explicit reference on the page, and this dance is no longer needed. > > > > Use unlock_page_memcg() and dec_lruvec_page_stat() directly. > > s/stat()/state()/ > > This is a nice cleanup: I hadn't seen that connection at all. > > But I think you should take it further: > __unlock_page_memcg() can then be static in mm/memcontrol.c, > and its declarations deleted from include/linux/memcontrol.h? And further: void lock_page_memcg(page), not returning memcg. > > And further: delete __dec_lruvec_state() and dec_lruvec_state() > from include/linux/vmstat.h - unless you feel that every "inc" > ought to be matched by a "dec", even when unused. > > > > > Signed-off-by: Johannes Weiner > > Acked-by: Hugh Dickins > > > --- > > mm/page-writeback.c | 9 +++------ > > 1 file changed, 3 insertions(+), 6 deletions(-) > > > > diff --git a/mm/page-writeback.c b/mm/page-writeback.c > > index eb34d204d4ee..f6c2c3165d4d 100644 > > --- a/mm/page-writeback.c > > +++ b/mm/page-writeback.c > > @@ -2722,12 +2722,9 @@ EXPORT_SYMBOL(clear_page_dirty_for_io); > > int test_clear_page_writeback(struct page *page) > > { > > struct address_space *mapping = page_mapping(page); > > - struct mem_cgroup *memcg; > > - struct lruvec *lruvec; > > int ret; > > > > - memcg = lock_page_memcg(page); > > - lruvec = mem_cgroup_page_lruvec(page, page_pgdat(page)); > > + lock_page_memcg(page); > > if (mapping && mapping_use_writeback_tags(mapping)) { > > struct inode *inode = mapping->host; > > struct backing_dev_info *bdi = inode_to_bdi(inode); > > @@ -2755,11 +2752,11 @@ int test_clear_page_writeback(struct page *page) > > ret = TestClearPageWriteback(page); > > } > > if (ret) { > > - dec_lruvec_state(lruvec, NR_WRITEBACK); > > + dec_lruvec_page_state(page, NR_WRITEBACK); > > dec_zone_page_state(page, NR_ZONE_WRITE_PENDING); > > inc_node_page_state(page, NR_WRITTEN); > > } > > - __unlock_page_memcg(memcg); > > + unlock_page_memcg(page); > > return ret; > > } > > > > -- > > 2.30.0 > From mboxrd@z Thu Jan 1 00:00:00 1970 From: Hugh Dickins Subject: Re: [PATCH] mm: page-writeback: simplify memcg handling in test_clear_page_writeback() Date: Wed, 10 Feb 2021 08:22:00 -0800 (PST) Message-ID: References: <20210209214543.112655-1-hannes@cmpxchg.org> Mime-Version: 1.0 Return-path: DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:from:to:cc:subject:in-reply-to:message-id:references :user-agent:mime-version; bh=wc8HtUu6YXXorPykhuoj08SCrBEaocuYohr96nbgn+w=; b=fpSdWoUW/YxqsP5HrQVPzNsTdbTt5mOIk6GqFhMMF/biAw553DP/Q7qeQJMjwPShNk 1tRCVOShdBPkTNGrIargdgle8wgQceXqCAn3IHA7g3D04Ow8R7+9FWnFmuNmYkLtRhc3 NPZRlQhxOcWweh5MO8A8cXXzWeWCBg+WAxOyFchaYUnrwwxZ4crSYQ0oL8jAS9UrwmfP CW1W7cC6X2NLISJ0M4LetFXkBGcA78Y68b1khrpiqAvP7GG9vuz60hI/o+GaUIpyObsJ SJ7LZjvLn5dEu4MAlTKTFOVnNmu8Z9Fsn7GavQTkW21qdobIJyuLdv3dBLsT3lnHDn9s ymow== In-Reply-To: List-ID: Content-Type: TEXT/PLAIN; charset="us-ascii" Content-Transfer-Encoding: 7bit To: Johannes Weiner Cc: Hugh Dickins , Andrew Morton , Michal Hocko , Shakeel Butt , Roman Gushchin , linux-mm-Bw31MaZKKs3YtjvyW6yDsg@public.gmane.org, cgroups-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, kernel-team-b10kYP2dOMg@public.gmane.org On Tue, 9 Feb 2021, Hugh Dickins wrote: > On Tue, 9 Feb 2021, Johannes Weiner wrote: > > > Page writeback doesn't hold a page reference, which allows truncate to > > free a page the second PageWriteback is cleared. This used to require > > special attention in test_clear_page_writeback(), where we had to be > > careful not to rely on the unstable page->memcg binding and look up > > all the necessary information before clearing the writeback flag. > > > > Since commit 073861ed77b6 ("mm: fix VM_BUG_ON(PageTail) and > > BUG_ON(PageWriteback)") test_clear_page_writeback() is called with an > > explicit reference on the page, and this dance is no longer needed. > > > > Use unlock_page_memcg() and dec_lruvec_page_stat() directly. > > s/stat()/state()/ > > This is a nice cleanup: I hadn't seen that connection at all. > > But I think you should take it further: > __unlock_page_memcg() can then be static in mm/memcontrol.c, > and its declarations deleted from include/linux/memcontrol.h? And further: void lock_page_memcg(page), not returning memcg. > > And further: delete __dec_lruvec_state() and dec_lruvec_state() > from include/linux/vmstat.h - unless you feel that every "inc" > ought to be matched by a "dec", even when unused. > > > > > Signed-off-by: Johannes Weiner > > Acked-by: Hugh Dickins > > > --- > > mm/page-writeback.c | 9 +++------ > > 1 file changed, 3 insertions(+), 6 deletions(-) > > > > diff --git a/mm/page-writeback.c b/mm/page-writeback.c > > index eb34d204d4ee..f6c2c3165d4d 100644 > > --- a/mm/page-writeback.c > > +++ b/mm/page-writeback.c > > @@ -2722,12 +2722,9 @@ EXPORT_SYMBOL(clear_page_dirty_for_io); > > int test_clear_page_writeback(struct page *page) > > { > > struct address_space *mapping = page_mapping(page); > > - struct mem_cgroup *memcg; > > - struct lruvec *lruvec; > > int ret; > > > > - memcg = lock_page_memcg(page); > > - lruvec = mem_cgroup_page_lruvec(page, page_pgdat(page)); > > + lock_page_memcg(page); > > if (mapping && mapping_use_writeback_tags(mapping)) { > > struct inode *inode = mapping->host; > > struct backing_dev_info *bdi = inode_to_bdi(inode); > > @@ -2755,11 +2752,11 @@ int test_clear_page_writeback(struct page *page) > > ret = TestClearPageWriteback(page); > > } > > if (ret) { > > - dec_lruvec_state(lruvec, NR_WRITEBACK); > > + dec_lruvec_page_state(page, NR_WRITEBACK); > > dec_zone_page_state(page, NR_ZONE_WRITE_PENDING); > > inc_node_page_state(page, NR_WRITTEN); > > } > > - __unlock_page_memcg(memcg); > > + unlock_page_memcg(page); > > return ret; > > } > > > > -- > > 2.30.0 >