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 4B0F6C433E0 for ; Wed, 10 Feb 2021 05:18:02 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 19ADF64E28 for ; Wed, 10 Feb 2021 05:18:02 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231177AbhBJFRi (ORCPT ); Wed, 10 Feb 2021 00:17:38 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36094 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229609AbhBJFRh (ORCPT ); Wed, 10 Feb 2021 00:17:37 -0500 Received: from mail-ot1-x329.google.com (mail-ot1-x329.google.com [IPv6:2607:f8b0:4864:20::329]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 32425C061574 for ; Tue, 9 Feb 2021 21:16:51 -0800 (PST) Received: by mail-ot1-x329.google.com with SMTP id k10so753641otl.2 for ; Tue, 09 Feb 2021 21:16:51 -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=Q8+AD77bMtoNW/HBzmZ8xMNYIgN4sAwD1/ADY3ZtEEk=; b=Fdroa3m70eD8+7KTxXuHTcUNnT7RKmI2+/ujf5yGEJfyh0W9IHuWdQ5VrHoRK6KiKO orVrw72k5YjskoOG5UvgLdG/VhwDwAzL+AT5d8n9kKs8NOrUjf1eD9km4BYGH86kloyE na4Au9OoCTeFEnN4rZy0olzery/o76zJWHL/F4q0Er3uC2Wu2BN/BydsGVBJ9vFNEjv3 DGOM99xnrf4CLCxsyb52Jb4BBg+fytIkav8i4ZzrLv+joPRR4Zjr5LcjOKlhUVM9M64i yf1ht/CMGODtIeTCmM5Y/XlMCZ7q21rDcMYbIM7kF3RiQZGI0RCBgeQvIwBdMrMHhydS lARA== 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=Q8+AD77bMtoNW/HBzmZ8xMNYIgN4sAwD1/ADY3ZtEEk=; b=iCLECZHlXN5fpukKL5QVV6FnCq9SWp/wl3yMQjaztezbzKAhKJLunvDswnyOgT4Zrr hIwbH17jGS6pudFQQPjpj73kdSao3iwXwrZxStNwp6sk2W1f2PUYI1oPzkxcqr8bl3Gb Lgc5DArfHMl/+A75fyRsJKCzZCPtDiJ2Suzy/LZTGid1bFB6DcOmhoQ4F8vORgxEW70e +Wmrs7kR9B97LiUAPbeY1ClP4CO8I+n+8n066Ebmvf5Y/iQRrm3zNB3fGGABf1ZQz6aH 7BMc3LT1P89HkCm6r5HA7Id7IA94A87EFl1xxQHf5q5yU5hP5zqe2JyaM8q+L7DBw4NG h44w== X-Gm-Message-State: AOAM532d99ZWo6B+9E8eQUWA1Iw/CHNKnr8nK0h8fE4mDGpwgl4FnIvi USvtmbmAOO8EjVvuFnjbTQrm9g== X-Google-Smtp-Source: ABdhPJwFPZeclIXiXIqkTT8I6kO/Wj7KR31FuttqTf7Yvbp8Oy2zwKu5VhmKY3vItcOqQSAJpwy2Rg== X-Received: by 2002:a9d:5d02:: with SMTP id b2mr915507oti.148.1612934210367; Tue, 09 Feb 2021 21:16:50 -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 w2sm195062otq.9.2021.02.09.21.16.48 (version=TLS1 cipher=ECDHE-ECDSA-AES128-SHA bits=128/128); Tue, 09 Feb 2021 21:16:49 -0800 (PST) Date: Tue, 9 Feb 2021 21:16:37 -0800 (PST) From: Hugh Dickins X-X-Sender: hugh@eggly.anvils To: Johannes Weiner cc: Andrew Morton , Hugh Dickins , 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: <20210209214543.112655-1-hannes@cmpxchg.org> 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, 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: 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 8C9E9C433E0 for ; Wed, 10 Feb 2021 05:16:53 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 300EE64E42 for ; Wed, 10 Feb 2021 05:16:53 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 300EE64E42 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 58DAD6B006E; Wed, 10 Feb 2021 00:16:52 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 53E206B0070; Wed, 10 Feb 2021 00:16:52 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 3E1C06B0071; Wed, 10 Feb 2021 00:16:52 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0237.hostedemail.com [216.40.44.237]) by kanga.kvack.org (Postfix) with ESMTP id 257506B006E for ; Wed, 10 Feb 2021 00:16:52 -0500 (EST) Received: from smtpin02.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay01.hostedemail.com (Postfix) with ESMTP id E02541856CCDC for ; Wed, 10 Feb 2021 05:16:51 +0000 (UTC) X-FDA: 77801198622.02.cord86_12086e62760d Received: from filter.hostedemail.com (10.5.16.251.rfc1918.com [10.5.16.251]) by smtpin02.hostedemail.com (Postfix) with ESMTP id C23FB10097AA2 for ; Wed, 10 Feb 2021 05:16:51 +0000 (UTC) X-HE-Tag: cord86_12086e62760d X-Filterd-Recvd-Size: 5682 Received: from mail-ot1-f45.google.com (mail-ot1-f45.google.com [209.85.210.45]) by imf17.hostedemail.com (Postfix) with ESMTP for ; Wed, 10 Feb 2021 05:16:51 +0000 (UTC) Received: by mail-ot1-f45.google.com with SMTP id s107so725474otb.8 for ; Tue, 09 Feb 2021 21:16:51 -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=Q8+AD77bMtoNW/HBzmZ8xMNYIgN4sAwD1/ADY3ZtEEk=; b=Fdroa3m70eD8+7KTxXuHTcUNnT7RKmI2+/ujf5yGEJfyh0W9IHuWdQ5VrHoRK6KiKO orVrw72k5YjskoOG5UvgLdG/VhwDwAzL+AT5d8n9kKs8NOrUjf1eD9km4BYGH86kloyE na4Au9OoCTeFEnN4rZy0olzery/o76zJWHL/F4q0Er3uC2Wu2BN/BydsGVBJ9vFNEjv3 DGOM99xnrf4CLCxsyb52Jb4BBg+fytIkav8i4ZzrLv+joPRR4Zjr5LcjOKlhUVM9M64i yf1ht/CMGODtIeTCmM5Y/XlMCZ7q21rDcMYbIM7kF3RiQZGI0RCBgeQvIwBdMrMHhydS lARA== 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=Q8+AD77bMtoNW/HBzmZ8xMNYIgN4sAwD1/ADY3ZtEEk=; b=mVCsgv8PAfKvUw+8DBHp2GpI1O7b1ANmnnZQ9Fnn0EO8mBhavc8ryiiXzLuEqZlmdB pZ9QJ9mSx/rT1XfxJJC4kTte4CsGtBd7D1j1Fen3OU7iowuynnJ7ZKKnJCarOLIgc1aX 02fUJSxfwZU7XnpxPe10kMO8OsRb9MQ8yUt3UF5+wEyUuRZ/6etyInKc7vDoX7C6O2OM zGGiIrI1quacLRFcIhxx411mhuw2F5AiD+04nJxpZh9VeRRLUmPRNA29nFPl/EK0BBiL A1MhMrMjuAceGzU8rzJBUtt6nxwO5B+1khG/5Gjkvptq5VRnAeV1QIZVwOp8S8XMlIOz Tidw== X-Gm-Message-State: AOAM533YM9l02GUW6y8tdCO+m7z4fV/heL4Ys2SYSqYvcj9kw4DN0Wf6 HVCzd1C5zTZqBHgI5EjI53IfPw== X-Google-Smtp-Source: ABdhPJwFPZeclIXiXIqkTT8I6kO/Wj7KR31FuttqTf7Yvbp8Oy2zwKu5VhmKY3vItcOqQSAJpwy2Rg== X-Received: by 2002:a9d:5d02:: with SMTP id b2mr915507oti.148.1612934210367; Tue, 09 Feb 2021 21:16:50 -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 w2sm195062otq.9.2021.02.09.21.16.48 (version=TLS1 cipher=ECDHE-ECDSA-AES128-SHA bits=128/128); Tue, 09 Feb 2021 21:16:49 -0800 (PST) Date: Tue, 9 Feb 2021 21:16:37 -0800 (PST) From: Hugh Dickins X-X-Sender: hugh@eggly.anvils To: Johannes Weiner cc: Andrew Morton , Hugh Dickins , 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: <20210209214543.112655-1-hannes@cmpxchg.org> 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, 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: 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: Tue, 9 Feb 2021 21:16:37 -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=Q8+AD77bMtoNW/HBzmZ8xMNYIgN4sAwD1/ADY3ZtEEk=; b=Fdroa3m70eD8+7KTxXuHTcUNnT7RKmI2+/ujf5yGEJfyh0W9IHuWdQ5VrHoRK6KiKO orVrw72k5YjskoOG5UvgLdG/VhwDwAzL+AT5d8n9kKs8NOrUjf1eD9km4BYGH86kloyE na4Au9OoCTeFEnN4rZy0olzery/o76zJWHL/F4q0Er3uC2Wu2BN/BydsGVBJ9vFNEjv3 DGOM99xnrf4CLCxsyb52Jb4BBg+fytIkav8i4ZzrLv+joPRR4Zjr5LcjOKlhUVM9M64i yf1ht/CMGODtIeTCmM5Y/XlMCZ7q21rDcMYbIM7kF3RiQZGI0RCBgeQvIwBdMrMHhydS lARA== In-Reply-To: <20210209214543.112655-1-hannes-druUgvl0LCNAfugRpC6u6w@public.gmane.org> List-ID: Content-Type: TEXT/PLAIN; charset="us-ascii" Content-Transfer-Encoding: 7bit To: Johannes Weiner Cc: Andrew Morton , Hugh Dickins , 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, 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: 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