From patchwork Mon Jul 10 07:06:07 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: wangyijing X-Patchwork-Id: 107278 Delivered-To: patch@linaro.org Received: by 10.140.101.44 with SMTP id t41csp3038460qge; Mon, 10 Jul 2017 00:03:15 -0700 (PDT) X-Received: by 10.84.157.74 with SMTP id u10mr16524858plu.137.1499670194940; Mon, 10 Jul 2017 00:03:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1499670194; cv=none; d=google.com; s=arc-20160816; b=i9VoSdyemtCuL4rjI6k7i9nEhMK3xpa6QJ4A0wd6DRk7oyzNwoBiikHBuMkXFyPoG4 O5qkzPNO3tDmq5S9BXzwhLD5w3F4Id7rEyil189cmrnfxrLMmPlrJ0S4DNk45nZOpYPW qSmIw6jL+LIPnq+V2XW+IHTvC9b96HK0F3IFJIOptTawvZAFnDsCQ4XRrCdpkOSsSFPA fKKcvhB1R7dvV1jQFn2Br4d7Xu4xH1cfUYMe3Av9SACWM10ROB30bEK/R8SClrK0+0HQ 5bGUjP2JMxauRQdT4jiqiY2VEHVvSkU3O5vYYrsC9nj0ZiOCeTO9jDpE9J+j0ei6JdgH VvdA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:arc-authentication-results; bh=vQLkI7YAq2VGX/OKE919poL63S8N8PlD6uYKUP1Hq2I=; b=G8nSE+e19au5QxqvarfcomJ2QyFB9UnOEBi6QTGk007rmv4sOMmdwJWzoZ3MFowJjc ocO1jnu1XlCnLSLSsQhbjOVOT4npzHv0LWB+M/jbOvzdc3c5qtXc8J7t9palewpNr4gR i03C0MTnIaTyAEe5W5FNJ8xt/ay21cjrCqR/Mpw7h5lCnMa5PCGDPSJc10QtdR230IfN qFMSR9zP+bBSrvIT250CIG4tLPREn1xmbM1RAGo0kBlLkBpxTxbqShmI5/zM+uroYph4 Z9RZgMW3wxQqaciEZQ3dIHJmAJ7IZSv4HNYZl4LvfcLWuyroUQeUUa+T9BJaUHlhxmIz MRDA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-scsi-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-scsi-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 d184si7436669pgc.158.2017.07.10.00.03.14; Mon, 10 Jul 2017 00:03:14 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-scsi-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-scsi-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-scsi-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752427AbdGJHDC (ORCPT + 1 other); Mon, 10 Jul 2017 03:03:02 -0400 Received: from szxga02-in.huawei.com ([45.249.212.188]:9813 "EHLO szxga02-in.huawei.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752707AbdGJHCZ (ORCPT ); Mon, 10 Jul 2017 03:02:25 -0400 Received: from 172.30.72.53 (EHLO dggeml406-hub.china.huawei.com) ([172.30.72.53]) by dggrg02-dlp.huawei.com (MOS 4.4.6-GA FastPath queued) with ESMTP id AQU38386; Mon, 10 Jul 2017 15:02:16 +0800 (CST) Received: from 138.huawei.com (10.175.124.28) by dggeml406-hub.china.huawei.com (10.3.17.50) with Microsoft SMTP Server id 14.3.301.0; Mon, 10 Jul 2017 15:02:06 +0800 From: Yijing Wang To: , CC: , , , , , , , , , , , , , , , , , , , Yijing Wang , "Johannes Thumshirn" Subject: [PATCH v3 5/7] libsas: add a new workqueue to run probe/destruct discovery event Date: Mon, 10 Jul 2017 15:06:07 +0800 Message-ID: <1499670369-44143-6-git-send-email-wangyijing@huawei.com> X-Mailer: git-send-email 2.5.0 In-Reply-To: <1499670369-44143-1-git-send-email-wangyijing@huawei.com> References: <1499670369-44143-1-git-send-email-wangyijing@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.175.124.28] X-CFilter-Loop: Reflected X-Mirapoint-Virus-RAPID-Raw: score=unknown(0), refid=str=0001.0A0B0204.59632678.017A, ss=1, re=0.000, recu=0.000, reip=0.000, cl=1, cld=1, fgs=0, ip=0.0.0.0, so=2014-11-16 11:51:01, dmn=2013-03-21 17:37:32 X-Mirapoint-Loop-Id: f54077bcd93bd9b57e85a6725fdb9a42 Sender: linux-scsi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-scsi@vger.kernel.org Sometimes, we want sync libsas probe or destruct in sas discovery work, like when libsas revalidate domain. We need to split probe and destruct work from the scsi host workqueue. Signed-off-by: Yijing Wang CC: John Garry CC: Johannes Thumshirn CC: Ewan Milne CC: Christoph Hellwig CC: Tomas Henzl CC: Dan Williams --- drivers/scsi/libsas/sas_discover.c | 13 ++++++++++++- drivers/scsi/libsas/sas_init.c | 8 ++++++++ include/scsi/libsas.h | 1 + 3 files changed, 21 insertions(+), 1 deletion(-) -- 2.5.0 diff --git a/drivers/scsi/libsas/sas_discover.c b/drivers/scsi/libsas/sas_discover.c index 5d4a3a8..a25d648 100644 --- a/drivers/scsi/libsas/sas_discover.c +++ b/drivers/scsi/libsas/sas_discover.c @@ -559,7 +559,18 @@ static void sas_chain_work(struct sas_ha_struct *ha, struct sas_work *sw) * not racing against draining */ sas_port_get(port); - ret = scsi_queue_work(ha->core.shost, &sw->work); + /* + * discovery event probe and destruct would be called in other + * discovery event like discover domain and revalidate domain + * events, in some cases, we need to sync execute probe and destruct + * events, so run probe and destruct discover events except in a new + * workqueue. + */ + if (ev->type == DISCE_PROBE || ev->type == DISCE_DESTRUCT) + ret = queue_work(ha->disc_q, &sw->work); + else + ret = scsi_queue_work(ha->core.shost, &sw->work); + if (ret != 1) sas_port_put(port); } diff --git a/drivers/scsi/libsas/sas_init.c b/drivers/scsi/libsas/sas_init.c index 2f3b736..df1d78b 100644 --- a/drivers/scsi/libsas/sas_init.c +++ b/drivers/scsi/libsas/sas_init.c @@ -152,6 +152,13 @@ int sas_register_ha(struct sas_ha_struct *sas_ha) if (!sas_ha->event_q) goto Undo_ports; + snprintf(name, 64, "%s_disc_q", dev_name(sas_ha->dev)); + sas_ha->disc_q = create_singlethread_workqueue(name); + if(!sas_ha->disc_q) { + destroy_workqueue(sas_ha->event_q); + goto Undo_ports; + } + INIT_LIST_HEAD(&sas_ha->eh_done_q); INIT_LIST_HEAD(&sas_ha->eh_ata_q); @@ -187,6 +194,7 @@ int sas_unregister_ha(struct sas_ha_struct *sas_ha) __sas_drain_work(sas_ha); mutex_unlock(&sas_ha->drain_mutex); destroy_workqueue(sas_ha->event_q); + destroy_workqueue(sas_ha->disc_q); return 0; } diff --git a/include/scsi/libsas.h b/include/scsi/libsas.h index c2ef05e..4bcb9fe 100644 --- a/include/scsi/libsas.h +++ b/include/scsi/libsas.h @@ -406,6 +406,7 @@ struct sas_ha_struct { struct device *dev; /* should be set */ struct module *lldd_module; /* should be set */ struct workqueue_struct *event_q; + struct workqueue_struct *disc_q; u8 *sas_addr; /* must be set */ u8 hashed_sas_addr[HASHED_SAS_ADDR_SIZE];