Received: by 2002:a25:7ec1:0:0:0:0:0 with SMTP id z184csp3014997ybc; Mon, 18 Nov 2019 08:13:03 -0800 (PST) X-Google-Smtp-Source: APXvYqwDkzUKz7X1qPWykw8SPkm2VcQ2wYZy5iBfU18AKQEBBVIEgXpm4ceIzUXkTMj6NhTR0AsP X-Received: by 2002:a5d:4f09:: with SMTP id c9mr32874686wru.175.1574093583668; Mon, 18 Nov 2019 08:13:03 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1574093583; cv=none; d=google.com; s=arc-20160816; b=sJRYuglzrWUsL67wWMOc8/Y0oy4+wOeYt/98YYf+lOO3K6fuLpzON7KiMEmvTuDiDp cZhREV3HtuPeaVXUdrY76dD/1mhZywepv/AuEvkjSdoe0lg/AoEhz0H/0XBAXVPNvxRC 4JCCIM8YE1id6mF5D+P7mwX/Yniyet+d7JOwMryiW/nWbT7yEpZyJQEjMnVWkLKwLRYa /ZA3MalX+yVqQrYZX7lovjbrOXLniMtCLGYhQJusDE7R9Fs0/655Lss3jOALP7hi785B tyxdPU8rxXIVM7klEj8Qx3LmKF3Lt19uD3lXWQBTIfX23FgUH7CzTcCOXeBveDvKKing aKeg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:dkim-signature; bh=j0SqAQT8llYIw4e/49l3a9ohNbFeVl5zPNeEm/Wp4s0=; b=yEg73aptzd8iw9LjjOv1R+QOvMgtT81aiWW9ucxH5mv2KpikF22pYx1nlGi9VSB3h/ Usaub9N3YIqFLGpn96W53gjX0NVKcmDWYKDu56ZZLp/xjMpzmTr9uEQCLFbjWZlKLikG ImRhC4/nZfZf28xlz6fypEXE1G+D4krnP77py+J2TTMSck0MPJ/6ZtCgN8RmmbCorKMH lhDr0DgSr8COIbg81mwQZK3CZN/gBU8JFaU7/m5i8yE0zuSLonz4zI43XSVS0UYzlI2t tThvU3KeOapVZ+oYJ6+VPJo9+L1VFds81SihVrwMmZE4Mp4G8L9NEcGJ0LMrCGixDgd9 I0ww== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@cmpxchg-org.20150623.gappssmtp.com header.s=20150623 header.b=D4nk0Sio; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=cmpxchg.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id e22si12011593edy.0.2019.11.18.08.12.39; Mon, 18 Nov 2019 08:13:03 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@cmpxchg-org.20150623.gappssmtp.com header.s=20150623 header.b=D4nk0Sio; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=cmpxchg.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727333AbfKRQL3 (ORCPT + 99 others); Mon, 18 Nov 2019 11:11:29 -0500 Received: from mail-qv1-f65.google.com ([209.85.219.65]:46270 "EHLO mail-qv1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726216AbfKRQL3 (ORCPT ); Mon, 18 Nov 2019 11:11:29 -0500 Received: by mail-qv1-f65.google.com with SMTP id w11so6746101qvu.13 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=ht/Ap/WIIRDsWcm6JWRjuV3YaA5AcEKdlqNwWVrPRXHe2FEIl7SLXcSmyjk7/LLhnV fmInNzmFNVOOes3SGYU1SVT4Q+fXdpuxhdNfezoK8u2FFmhQ2g+NFVUigXjgfxo1Y3zk PG6+DKQuEPTKore5JAv/rSR+PltirwY809y5U7kF0Vq6NY+Lw59ftGXK50Qw872wHgcD K3BgS843tGEMsUA6TaYiaiMbfJzvGl30D2LZApXSJ8yeH5w0MClkTQO0D2eQfmVQlIky HwGVmeTDKK0u1AH0Zdl/2hJZ00BqSlbAtz8ufdPk9tZgKL3tr5EyWiFN+aRUVBFspK2F zo9w== X-Gm-Message-State: APjAAAVfp6hkpLxJOw5kE+UJ64zB8MfHXb6yHQyllW5c/sceBa92p1IP qGeTJ6QipgcUW1Wy08YKusqDHg== 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) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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.