Received: by 2002:a25:ad19:0:0:0:0:0 with SMTP id y25csp1439641ybi; Wed, 3 Jul 2019 16:04:15 -0700 (PDT) X-Google-Smtp-Source: APXvYqxrf3NbjAMxxH+n1xUaqOqCgQZ2Kx6IRfgnQ2dM3Jrv2nPpc+4r2rKgdi8Okm6Gs79YQBgn X-Received: by 2002:a17:902:7043:: with SMTP id h3mr46951832plt.10.1562195055496; Wed, 03 Jul 2019 16:04:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1562195055; cv=none; d=google.com; s=arc-20160816; b=tYj0yfDp0WMdjAzmgqomwgdd+aDT7yZwlV/53Zlr1upbbAXFp8LP8RXv7VaZ2bp1Td 2lm1THoE8Hb+IjHAGinKtTI3orpOfg9sElDnhmcLDSmq6tMRqeXEgcAYf2ZEY1qi/WgH zomL3SktYJlFh8STOLPr4W+j3/Q6KSd64BZQLtDuX2wkoYOveWsowMBjmazkwUU3ClO8 PBO/5biP/rB/rIAUyfzF08hev+Mi2Q3Kzuv4ixMpdA0vYe7DdfFJkkgni1trT3rA4G71 G8O876yZMqPktKiOiQ8fQa7tbwtk5eW8ZPbr7YXF34g2USrJ/et2U+kBAu4OOwPK2yGf NGig== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:subject:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:cc:to:from; bh=Fw1s+1OVGtpV8B6SL56uJv+RNlV2OUV/pSC9inKoI7o=; b=lPCYPRjfw2kSZGAY0J/l4/CQljkOJsBl05qeWE2akVO66CZ3bh/3ppED1IbsvDUkTi eVJJRfnXrkL74NVcktHUuTmS+3e6iJRY9qO3xdkKBR06MyofZmhvJ0H5hE/kj2GuZG9h xjpUUxeUcBjHxSRFVho9AtPwfeOUL3IckWbxKdmMdzoUWXs1XsKuqb9h0psBrlsrZPkz o9c2qlY9dEANF0KjUrS5er8dcRm0p2xoJyPCojFbwtCmKjVaDmRcYLJ5dSR1BySeSAAx FdIH/s1ITAybOhdaKzooryt1hq+qtNGUwzkF5HqzrL5rJIloOVYg1/YODewyGq+QhSC4 TD7Q== 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 j23si3317009pff.159.2019.07.03.16.04.00; Wed, 03 Jul 2019 16:04:15 -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 S1727513AbfGCXDm (ORCPT + 99 others); Wed, 3 Jul 2019 19:03:42 -0400 Received: from ale.deltatee.com ([207.54.116.67]:44168 "EHLO ale.deltatee.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726902AbfGCXDk (ORCPT ); Wed, 3 Jul 2019 19:03:40 -0400 Received: from cgy1-donard.priv.deltatee.com ([172.16.1.31]) by ale.deltatee.com with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.89) (envelope-from ) id 1hioHq-0005uT-Bd; Wed, 03 Jul 2019 17:03:40 -0600 Received: from gunthorp by cgy1-donard.priv.deltatee.com with local (Exim 4.89) (envelope-from ) id 1hioHp-0005yG-7Y; Wed, 03 Jul 2019 17:03:37 -0600 From: Logan Gunthorpe To: linux-kernel@vger.kernel.org, linux-nvme@lists.infradead.org, Christoph Hellwig , Sagi Grimberg Cc: Stephen Bates , Logan Gunthorpe Date: Wed, 3 Jul 2019 17:03:04 -0600 Message-Id: <20190703230304.22905-3-logang@deltatee.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190703230304.22905-1-logang@deltatee.com> References: <20190703230304.22905-1-logang@deltatee.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SA-Exim-Connect-IP: 172.16.1.31 X-SA-Exim-Rcpt-To: linux-kernel@vger.kernel.org, linux-nvme@lists.infradead.org, hch@lst.de, sagi@grimberg.me, sbates@raithlin.com, logang@deltatee.com X-SA-Exim-Mail-From: gunthorp@deltatee.com X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on ale.deltatee.com X-Spam-Level: X-Spam-Status: No, score=-8.5 required=5.0 tests=ALL_TRUSTED,BAYES_00, GREYLIST_ISWHITE,MYRULES_FREE,MYRULES_NO_TEXT autolearn=ham autolearn_force=no version=3.4.2 Subject: [PATCH v2 2/2] nvmet-loop: Flush nvme_delete_wq when removing the port X-SA-Exim-Version: 4.2.1 (built Tue, 02 Aug 2016 21:08:31 +0000) X-SA-Exim-Scanned: Yes (on ale.deltatee.com) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org After calling nvme_loop_delete_ctrl(), the controllers will not yet be deleted because nvme_delete_ctrl() only schedules work to do the delete. This means a race can occur if a port is removed but there are still active controllers trying to access that memory. To fix this, flush the nvme_delete_wq before returning from nvme_loop_remove_port() so that any controllers that might be in the process of being deleted won't access a freed port. Signed-off-by: Logan Gunthorpe --- drivers/nvme/target/loop.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/nvme/target/loop.c b/drivers/nvme/target/loop.c index 9e211ad6bdd3..da9cd07461fb 100644 --- a/drivers/nvme/target/loop.c +++ b/drivers/nvme/target/loop.c @@ -654,6 +654,14 @@ static void nvme_loop_remove_port(struct nvmet_port *port) mutex_lock(&nvme_loop_ports_mutex); list_del_init(&port->entry); mutex_unlock(&nvme_loop_ports_mutex); + + /* + * Ensure any ctrls that are in the process of being + * deleted are in fact deleted before we return + * and free the port. This is to prevent active + * ctrls from using a port after it's freed. + */ + flush_workqueue(nvme_delete_wq); } static const struct nvmet_fabrics_ops nvme_loop_ops = { -- 2.20.1