Received: by 10.192.165.156 with SMTP id m28csp1312921imm; Wed, 18 Apr 2018 07:45:44 -0700 (PDT) X-Google-Smtp-Source: AIpwx4+m4ETJSVmlL/C0/DQuzE4JEvI8P5hX6ge1t6bq9NaQ96GMwrZejcjLqT26HBNqNcKV8DvG X-Received: by 2002:a17:902:b7c9:: with SMTP id v9-v6mr2348085plz.35.1524062744293; Wed, 18 Apr 2018 07:45:44 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1524062744; cv=none; d=google.com; s=arc-20160816; b=uF+KLN0B8KZsaEJM6KP+l38ESiicX5CVeJ+MukyCgiAgcwjnqSYi1BOiBk9eiIFFxG BmKspjTJ6/KIO2QGBZ8nONE68cdWxpDVHZlJB38o7HLKC8COXfCwdmLHMCzXitAxXfv4 l4E7H37uykjWf97sa/spqte173PZAuSwF24p/SRwpfo/be/9WOHNRUAhggWt9IdztDe6 ESVoVFSF4Dyu39c1/QuqgRfyCa2e0QIZ7i/D7acdLEVAPxbUCL8XWMrK8StXl4RtZL2B sG8s1jG5MIg/5CQ8unGHrkX4YTWpPW3XuRB+5TZ+lzdfuXpH7m98K52eDIPzG/Pf5o2e 93hw== 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:arc-authentication-results; bh=Vqaqhm59P/ftiVa7gYYtEI8Lyhcc7JYMD28/E0Ob8pY=; b=tjKd5qAFD1J7lOBKX00WIiohqspGExiHj/sOq0KpddZ76UwKBd+N/OaBVdseTOC+fV wznCY0j9LB6M00DP5Fob+yyis4vGjyvy89Gv2lSuL0dmVamEIWb0ntCuApp3guH5xVcH RGOt1lKOPgGfjrA+sZOEr3C6MGkQrIxOpEKIFgWL35pD151r6kl1eBjfQdyeiB6OhY93 FWr0hh6C1zffyZSovJWkmMHZIfw74S6xsrAxrCNlcrfPe35zkJZkoB3uVokp1Byt2Scg gURER5tt3bOB8PEewGP+Tls9wOY4p3vXoBFVkwg7V69XofJJC1rUWVBRDZypNN+i7BRg 7icg== ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id v23si1218874pfk.116.2018.04.18.07.45.29; Wed, 18 Apr 2018 07:45:44 -0700 (PDT) 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; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752159AbeDROoY (ORCPT + 99 others); Wed, 18 Apr 2018 10:44:24 -0400 Received: from mga01.intel.com ([192.55.52.88]:24161 "EHLO mga01.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750872AbeDROoX (ORCPT ); Wed, 18 Apr 2018 10:44:23 -0400 X-Amp-Result: UNKNOWN X-Amp-Original-Verdict: FILE UNKNOWN X-Amp-File-Uploaded: False Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by fmsmga101.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 18 Apr 2018 07:44:18 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.48,465,1517904000"; d="scan'208";a="221413639" Received: from unknown (HELO localhost.localdomain) ([10.232.112.44]) by fmsmga005.fm.intel.com with ESMTP; 18 Apr 2018 07:44:20 -0700 Date: Wed, 18 Apr 2018 08:45:25 -0600 From: Keith Busch To: Jianchao Wang Cc: axboe@fb.com, hch@lst.de, sagi@grimberg.me, linux-nvme@lists.infradead.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH] nvme: fix the suspicious RCU usage warning in nvme_mpath_clear_current_path Message-ID: <20180418144524.GL11513@localhost.localdomain> References: <1524036767-3701-1-git-send-email-jianchao.w.wang@oracle.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1524036767-3701-1-git-send-email-jianchao.w.wang@oracle.com> User-Agent: Mutt/1.9.1 (2017-09-22) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, Apr 18, 2018 at 03:32:47PM +0800, Jianchao Wang wrote: > With lockdep enabled, when trigger nvme_remove, suspicious RCU > usage warning will be printed out. > Fix it with adding srcu_read_lock/unlock in it. > > Signed-off-by: Jianchao Wang > --- > drivers/nvme/host/nvme.h | 9 +++++++-- > 1 file changed, 7 insertions(+), 2 deletions(-) > > diff --git a/drivers/nvme/host/nvme.h b/drivers/nvme/host/nvme.h > index 061fecf..d326c23 100644 > --- a/drivers/nvme/host/nvme.h > +++ b/drivers/nvme/host/nvme.h > @@ -446,9 +446,14 @@ void nvme_mpath_remove_disk(struct nvme_ns_head *head); > static inline void nvme_mpath_clear_current_path(struct nvme_ns *ns) > { > struct nvme_ns_head *head = ns->head; > + int srcu_idx; > > - if (head && ns == srcu_dereference(head->current_path, &head->srcu)) > - rcu_assign_pointer(head->current_path, NULL); > + if (head) { > + srcu_idx = srcu_read_lock(&head->srcu); > + if (ns == srcu_dereference(head->current_path, &head->srcu)) > + rcu_assign_pointer(head->current_path, NULL); > + srcu_read_unlock(&head->srcu, srcu_idx); > + } > } > struct nvme_ns *nvme_find_path(struct nvme_ns_head *head); Nothing against this patch. This just doesn't look correct even from before since nvme_find_path can set head->current_path right back to this namespace that we're trying to clear. Christoph, am I missing something here or does this need additional checks/synchronization?