Received: by 2002:a25:ca44:0:0:0:0:0 with SMTP id a65csp1597919ybg; Wed, 29 Jul 2020 19:43:17 -0700 (PDT) X-Google-Smtp-Source: ABdhPJw3/XGHyaammyADMq8AYe9h3P/KCuemdgdWw8M2PT7I0mE0dUOOCqf5AAOBNTnzITvMtw7r X-Received: by 2002:a17:906:e0d:: with SMTP id l13mr570601eji.434.1596076997095; Wed, 29 Jul 2020 19:43:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1596076997; cv=none; d=google.com; s=arc-20160816; b=gl+kYuJz70VmhT/7LCic7/u8XfoCRmnKXbb4xuKk2QH6zxbhiMTjK1l1jxgu2RKa+J bSU/XaOzw6FAzcvHUvLeyzxp1aC/7R9vkm8czF0+AKbf9YNO9NkSHO0MMHE9OiwhwNEl FgRvWbKqDOl2yFtheM8bYMASkrDSh1mQfadWsEklQa9NNfu0N3Cuueh6veAmYvlari39 pqBhxPAr7HxlauaUMJhXjgMwKLlC9U4YiPJe5E+LV6oety3Ox7/Fl38vhg83llGW5uYK BxXTdlrsZLNFH6eNx14AXU0W+vzqsgLIwBjO61d/Caydj8RGyqU5GRQREoGICHoLUPj3 FFsQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from; bh=gsdQh8XdErhmsHwk/6BGwoKbcd506VzPiU7Oe5clR3A=; b=dvM1jtm4+uwthOd9kbI6yUjPik3RaBrm5CNUYAmtGVR/MJ+rZ+zOm4w24usbP2V/xE udhV2khcH2ej9Ec+A4TZWB1jMRS57jHQoo1suvBMqkGfy5c5/6QZLcwxmRMNgFpHRSiF ljlPPVEl4iflBuMlhcR5JtpTRiWW5NSlt4uIpaHpOPXVS0WXKx+FFZMsA/pe7pycMrn9 qMDC2+P+8ol4j9wALncTkmdlZfTF14ouCPuzz93Obukt2s8zegWCveqjr6uxlWJf9fuj POMI5lWIhq3T/QBoE0JYEyrw8Zn5SZ3eWAL5wiF25Y0DeMNNB/JzquevhUOhjeLaur11 E+Yw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id rn4si2563255ejb.29.2020.07.29.19.42.54; Wed, 29 Jul 2020 19:43:17 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726519AbgG3ClA (ORCPT + 99 others); Wed, 29 Jul 2020 22:41:00 -0400 Received: from mail.windriver.com ([147.11.1.11]:61721 "EHLO mail.windriver.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726319AbgG3ClA (ORCPT ); Wed, 29 Jul 2020 22:41:00 -0400 Received: from ALA-HCA.corp.ad.wrs.com (ala-hca.corp.ad.wrs.com [147.11.189.40]) by mail.windriver.com (8.15.2/8.15.2) with ESMTPS id 06U2efi2012132 (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Wed, 29 Jul 2020 19:40:41 -0700 (PDT) Received: from pek-lpg-core1-vm1.wrs.com (128.224.156.106) by ALA-HCA.corp.ad.wrs.com (147.11.189.40) with Microsoft SMTP Server id 14.3.487.0; Wed, 29 Jul 2020 19:40:40 -0700 From: To: , , , , CC: , Subject: [PATCH v2] mm/slab.c: add node spinlock protect in __cache_free_alien Date: Thu, 30 Jul 2020 10:52:26 +0800 Message-ID: <20200730025226.10350-1-qiang.zhang@windriver.com> X-Mailer: git-send-email 2.26.2 MIME-Version: 1.0 Content-Transfer-Encoding: 7BIT Content-Type: text/plain; charset=US-ASCII Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Zhang Qiang Due to cpu hotplug, the "cpuup_canceled" func be called, it's currently manipulating the alien cache for the canceled cpu's node and this node may be the same as the node which node's alien cache being operated in the "__cache_free_alien" func, so we should add a protect for node's alien cache in "__cache_free_alien" func. Fixes: 6731d4f12315 ("slab: Convert to hotplug state machine") Signed-off-by: Zhang Qiang --- v1->v2: change submission information and fixes tags. mm/slab.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/mm/slab.c b/mm/slab.c index a89633603b2d..290523c90b4e 100644 --- a/mm/slab.c +++ b/mm/slab.c @@ -759,8 +759,10 @@ static int __cache_free_alien(struct kmem_cache *cachep, void *objp, n = get_node(cachep, node); STATS_INC_NODEFREES(cachep); + spin_lock(&n->list_lock); if (n->alien && n->alien[page_node]) { alien = n->alien[page_node]; + spin_unlock(&n->list_lock); ac = &alien->ac; spin_lock(&alien->lock); if (unlikely(ac->avail == ac->limit)) { @@ -769,14 +771,15 @@ static int __cache_free_alien(struct kmem_cache *cachep, void *objp, } ac->entry[ac->avail++] = objp; spin_unlock(&alien->lock); - slabs_destroy(cachep, &list); } else { + spin_unlock(&n->list_lock); n = get_node(cachep, page_node); spin_lock(&n->list_lock); free_block(cachep, &objp, 1, page_node, &list); spin_unlock(&n->list_lock); - slabs_destroy(cachep, &list); } + + slabs_destroy(cachep, &list); return 1; } -- 2.26.2