From: Jack Wang <jinpu.wang@profitbricks.com>
To: Bart Van Assche <bvanassche@acm.org>
Cc: Roland Dreier <roland@kernel.org>,
David Dillow <dillowda@ornl.gov>, Vu Pham <vuhuong@mellanox.com>,
Sebastian Riemer <sebastian.riemer@profitbricks.com>,
linux-rdma <linux-rdma@vger.kernel.org>,
linux-scsi <linux-scsi@vger.kernel.org>,
James Bottomley <jbottomley@parallels.com>,
Mike Christie <michaelc@cs.wisc.edu>
Subject: RE: [PATCH 07/14] scsi_transport_srp: Add transport layer error handling
Date: Mon, 24 Jun 2013 15:48:41 +0200 [thread overview]
Message-ID: <51C84E39.80806@profitbricks.com> (raw)
> I'm not sure it's possible to avoid such a race without introducing
> a new mutex. How about something like the (untested) SCSI core patch
> below, and invoking scsi_block_eh() and scsi_unblock_eh() around any
> reconnect activity not initiated from the SCSI EH thread ?
>
> [PATCH] Add scsi_block_eh() and scsi_unblock_eh()
>
Hi Bart,
The description doesn't match the code at all, do you mean try to
serialize the reconnect activity with this new block_eh_mutex?
Cheers,
Jack
> ---
> drivers/scsi/hosts.c | 1 +
> drivers/scsi/scsi_error.c | 10 ++++++++++
> include/scsi/scsi_host.h | 1 +
> 3 files changed, 12 insertions(+)
>
> diff --git a/drivers/scsi/hosts.c b/drivers/scsi/hosts.c
> index 17e2ccb..0df3ec8 100644
> --- a/drivers/scsi/hosts.c
> +++ b/drivers/scsi/hosts.c
> @@ -360,6 +360,7 @@ struct Scsi_Host *scsi_host_alloc(struct scsi_host_template *sht, int privsize)
> init_waitqueue_head(&shost->host_wait);
>
> mutex_init(&shost->scan_mutex);
> + mutex_init(&shost->block_eh_mutex);
>
> /*
> * subtract one because we increment first then return, but we need to
> diff --git a/drivers/scsi/scsi_error.c b/drivers/scsi/scsi_error.c
> index ab16930..566daaa 100644
> --- a/drivers/scsi/scsi_error.c
> +++ b/drivers/scsi/scsi_error.c
> @@ -551,6 +551,10 @@ static int scsi_begin_eh(struct Scsi_Host *host)
> {
> int res;
>
> + res = mutex_lock_interruptible(&host->block_eh_mutex);
> + if (res)
> + goto out;
> +
> spin_lock_irq(host->host_lock);
> switch (host->shost_state) {
> case SHOST_DEL:
> @@ -565,6 +569,10 @@ static int scsi_begin_eh(struct Scsi_Host *host)
> }
> spin_unlock_irq(host->host_lock);
>
> + if (res)
> + mutex_unlock(&host->block_eh_mutex);
> +
> +out:
> return res;
> }
>
> @@ -579,6 +587,8 @@ static void scsi_end_eh(struct Scsi_Host *host)
> if (host->eh_active == 0)
> wake_up(&host->host_wait);
> spin_unlock_irq(host->host_lock);
> +
> + mutex_unlock(&host->block_eh_mutex);
> }
>
> /**
> diff --git a/include/scsi/scsi_host.h b/include/scsi/scsi_host.h
> index 9785e51..d7ce065 100644
> --- a/include/scsi/scsi_host.h
> +++ b/include/scsi/scsi_host.h
> @@ -573,6 +573,7 @@ struct Scsi_Host {
> spinlock_t *host_lock;
>
> struct mutex scan_mutex;/* serialize scanning activity */
> + struct mutex block_eh_mutex; /* block ML LLD EH calls */
>
> struct list_head eh_cmd_q;
> struct task_struct * ehandler; /* Error recovery thread. */
next reply other threads:[~2013-06-24 13:48 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-06-24 13:48 Jack Wang [this message]
[not found] ` <51C84E39.80806-EIkl63zCoXaH+58JC4qpiA@public.gmane.org>
2013-06-24 15:50 ` [PATCH 07/14] scsi_transport_srp: Add transport layer error handling Bart Van Assche
[not found] ` <51C86AB4.1000906-HInyCGIudOg@public.gmane.org>
2013-06-24 16:05 ` Jack Wang
-- strict thread matches above, loose matches on Subject: below --
2013-06-19 13:44 Jack Wang
2013-06-19 15:27 ` Bart Van Assche
2013-06-21 12:17 ` Jack Wang
2013-06-12 13:17 [PATCH 0/14] IB SRP initiator patches for kernel 3.11 Bart Van Assche
2013-06-12 13:28 ` [PATCH 07/14] scsi_transport_srp: Add transport layer error handling Bart Van Assche
[not found] ` <51B8777B.5050201-HInyCGIudOg@public.gmane.org>
2013-06-13 19:43 ` Vu Pham
2013-06-14 13:19 ` Bart Van Assche
[not found] ` <51BB1857.7040802-HInyCGIudOg@public.gmane.org>
2013-06-14 17:59 ` Vu Pham
[not found] ` <51BB5A04.3080901-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2013-06-15 9:52 ` Bart Van Assche
[not found] ` <51BC3945.9030900-HInyCGIudOg@public.gmane.org>
2013-06-17 6:18 ` Hannes Reinecke
2013-06-17 7:04 ` Bart Van Assche
2013-06-17 7:14 ` Hannes Reinecke
2013-06-17 7:29 ` Bart Van Assche
[not found] ` <51BEBAEA.4080202-HInyCGIudOg@public.gmane.org>
2013-06-17 8:10 ` Hannes Reinecke
2013-06-17 10:13 ` Sebastian Riemer
2013-06-18 16:59 ` Vu Pham
[not found] ` <51C09202.2040503-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2013-06-19 13:00 ` Bart Van Assche
2013-06-23 21:13 ` Mike Christie
[not found] ` <51C764FB.6070207-hcNo3dDEHLuVc3sceRu5cw@public.gmane.org>
2013-06-24 7:37 ` Bart Van Assche
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=51C84E39.80806@profitbricks.com \
--to=jinpu.wang@profitbricks.com \
--cc=bvanassche@acm.org \
--cc=dillowda@ornl.gov \
--cc=jbottomley@parallels.com \
--cc=linux-rdma@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
--cc=michaelc@cs.wisc.edu \
--cc=roland@kernel.org \
--cc=sebastian.riemer@profitbricks.com \
--cc=vuhuong@mellanox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox