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=-5.2 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS,USER_AGENT_SANE_1 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 E8286C43215 for ; Mon, 18 Nov 2019 16:11:30 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 89BF9218AF for ; Mon, 18 Nov 2019 16:11:30 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=cmpxchg-org.20150623.gappssmtp.com header.i=@cmpxchg-org.20150623.gappssmtp.com header.b="D4nk0Sio" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 89BF9218AF Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=cmpxchg.org Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 24CBA6B0003; Mon, 18 Nov 2019 11:11:30 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 1FDC66B0006; Mon, 18 Nov 2019 11:11:30 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 113976B0007; Mon, 18 Nov 2019 11:11:30 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0151.hostedemail.com [216.40.44.151]) by kanga.kvack.org (Postfix) with ESMTP id EFD146B0003 for ; Mon, 18 Nov 2019 11:11:29 -0500 (EST) Received: from smtpin24.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay03.hostedemail.com (Postfix) with SMTP id 897BD8249980 for ; Mon, 18 Nov 2019 16:11:29 +0000 (UTC) X-FDA: 76169888298.24.way28_471f23d9f5363 X-HE-Tag: way28_471f23d9f5363 X-Filterd-Recvd-Size: 5408 Received: from mail-qv1-f66.google.com (mail-qv1-f66.google.com [209.85.219.66]) by imf23.hostedemail.com (Postfix) with ESMTP for ; Mon, 18 Nov 2019 16:11:28 +0000 (UTC) Received: by mail-qv1-f66.google.com with SMTP id y18so6761548qve.2 for ; Mon, 18 Nov 2019 08:11:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cmpxchg-org.20150623.gappssmtp.com; s=20150623; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to:user-agent; bh=j0SqAQT8llYIw4e/49l3a9ohNbFeVl5zPNeEm/Wp4s0=; b=D4nk0Siou5s/cqdoqRqvYGa8zjueKxO+SjyVZm6/zT83sFfDUd2SnGh1k9QnwDRDrx CH6WGIyRKE0rF+mnWZMd8pHyYqF+YLfdNHGtqMo/fOoR4AXXtBL0Cj7J0CMVPjVHqH1A 5p89M+K8M+qZDQsxCDXAtPbwLRRrKzSr3XyWyZ95bNw/QI/aHZbmCL8249BGxWEd1uNi NmxnkCqIoZnTJ4pMiiNzMsyDF7nPDvcgoyhCtivfuijsRgBIc92NpnNww90o0JoHuJom W1UH6Cibz2Uc69M0LwpMJivjKj1PUsQuKOhtJZg9yyVl2bQ6Et0jog0H3A2vuFx+O7mN fvRQ== 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:message-id:references :mime-version:content-disposition:in-reply-to:user-agent; bh=j0SqAQT8llYIw4e/49l3a9ohNbFeVl5zPNeEm/Wp4s0=; b=O6hGJS5+PZtp9IXipUvRtWcOFc52w7l1Bnya2Bl4mWTmVSsQ9glOA6f1AVwWMGNilG U7AQ9J7K5/xJjZXyng6evuyB/9Su73qGeGMxRk5RMqMxM8DoPC7Wskm2cZjUsyQRiMdm XmtxGzGRy1vOg47MTnGqqBnn7a3QiDCCXQOccSZ7WS3d+S/MlW+FRTdD2jozf+K8KZ5C iHnkly+YtUBV1eWu36gKdP16jyBAV1NZKkz6Ec4kpuPPdNxZLsQYT5zFPZMmauV0O8ih 7PJAHo6/1jgobSHVYWxXYIMK5wUQ1G2GSGMBH9eia2xh4X14NW3+K6+mO7r/0oqDyoyO HdzA== X-Gm-Message-State: APjAAAWdWj3gFiL5zhA5677skyq4YAimiDG+An8PUVkgRfEubhjjqd5N Vk1cWKfrQIQYATWXOvkwA1maAw== X-Google-Smtp-Source: APXvYqyvK7ktIXppKh1dR704A5mqOwl/diTd0Fr4GO7WaTkdgkBup/M3IW20e4uuZ1GlgXiw9mZ32w== X-Received: by 2002:a0c:fa50:: with SMTP id k16mr10774204qvo.172.1574093487963; Mon, 18 Nov 2019 08:11:27 -0800 (PST) Received: from localhost ([2620:10d:c091:500::1:1113]) by smtp.gmail.com with ESMTPSA id i4sm10125597qtp.57.2019.11.18.08.11.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Nov 2019 08:11:26 -0800 (PST) Date: Mon, 18 Nov 2019 11:11:26 -0500 From: Johannes Weiner To: Alex Shi Cc: cgroups@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, akpm@linux-foundation.org, mgorman@techsingularity.net, tj@kernel.org, hughd@google.com, khlebnikov@yandex-team.ru, daniel.m.jordan@oracle.com, yang.shi@linux.alibaba.com, willy@infradead.org, Michal Hocko , Vladimir Davydov , Roman Gushchin , Shakeel Butt , Chris Down , Thomas Gleixner , Vlastimil Babka , Qian Cai , Andrey Ryabinin , "Kirill A. Shutemov" , =?iso-8859-1?B?Suly9G1l?= Glisse , Andrea Arcangeli , David Rientjes , "Aneesh Kumar K.V" , swkhack , "Potyra, Stefan" , Mike Rapoport , Stephen Rothwell , Colin Ian King , Jason Gunthorpe , Mauro Carvalho Chehab , Peng Fan , Nikolay Borisov , Ira Weiny , Kirill Tkhai , Yafang Shao Subject: Re: [PATCH v3 3/7] mm/lru: replace pgdat lru_lock with lruvec lock Message-ID: <20191118161126.GB365174@cmpxchg.org> References: <1573874106-23802-1-git-send-email-alex.shi@linux.alibaba.com> <1573874106-23802-4-git-send-email-alex.shi@linux.alibaba.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1573874106-23802-4-git-send-email-alex.shi@linux.alibaba.com> User-Agent: Mutt/1.12.2 (2019-09-21) 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 Sat, Nov 16, 2019 at 11:15:02AM +0800, Alex Shi wrote: > diff --git a/mm/memcontrol.c b/mm/memcontrol.c > index 62470325f9bc..cf274739e619 100644 > --- a/mm/memcontrol.c > +++ b/mm/memcontrol.c > @@ -1246,6 +1246,42 @@ struct lruvec *mem_cgroup_page_lruvec(struct page *page, struct pglist_data *pgd > return lruvec; > } > > +struct lruvec *lock_page_lruvec_irq(struct page *page, > + struct pglist_data *pgdat) > +{ > + struct lruvec *lruvec; > + > +again: > + lruvec = mem_cgroup_page_lruvec(page, pgdat); > + spin_lock_irq(&lruvec->lru_lock); This isn't safe. Nothing prevents the page from being moved to a different memcg in between these two operations, and the lruvec having been freed by the time you try to acquire the spinlock. You need to use the rcu lock to dereference page->mem_cgroup and its lruvec when coming from the page like this. You also need to use page_memcg_rcu() to insert the appropriate lockless access barriers, which mem_cgroup_page_lruvec() does not do since it's designed for use with pgdat->lru_lock.