Patch "scsi_transport_srp: Introduce srp_wait_for_queuecommand()" has been added to the 4.1-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
scsi_transport_srp: Introduce srp_wait_for_queuecommand()
to the 4.1-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
scsi_transport_srp-introduce-srp_wait_for_queuecommand.patch
and it can be found in the queue-4.1 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
be34c62ddf39d1931780b07a6f4241393e4ba2eeMon Sep 17 00:00:00 2001
From: Bart Van Assche <[email protected]>
Date: Mon, 18 May 2015 13:22:19 +0200
Subject: scsi_transport_srp: Introduce srp_wait_for_queuecommand()
From: Bart Van Assche <[email protected]>
commit be34c62ddf39d1931780b07a6f4241393e4ba2ee upstream.
Introduce the helper function srp_wait_for_queuecommand(). Move the definition of scsi_request_fn_active(). Add a comment above srp_wait_for_queuecommand() that support for scsi-mq needs to be added.
This patch does not change any functionality. A second call to srp_wait_for_queuecommand() will be introduced in the next patch.
--- drivers/scsi/scsi_transport_srp.c | 54 +++++++++++++++++++++----------------- 1 file changed, 31 insertions(+), 23 deletions(-)
drivers/scsi/scsi_transport_srp.c +31 -23
@@ -396,6 +396,36 @@ static void srp_reconnect_work(struct wo } } +/** +* scsi_request_fn_active() - number of kernel threads inside scsi_request_fn() +* @shost: SCSI host for which to count the number of scsi_request_fn() callers. +* +* To do: add support for scsi-mq in this function. +*/ +static int scsi_request_fn_active (struct Scsi_Host *shost) +{ +struct scsi_device *sdev; +struct request_queue *q; +int request_fn_active =0 ; + +shost_for_each_device (sdev, shost) { + q = sdev->request_queue; + +spin_lock_irq (q->queue_lock); + request_fn_active += q->request_fn_active; +spin_unlock_irq (q->queue_lock); + } + +return request_fn_active; +} + +/* Wait until ongoing shost->hostt->queuecommand() calls have finished. */ +static void srp_wait_for_queuecommand (struct Scsi_Host *shost) +{ +while (scsi_request_fn_active (shost)) +msleep (20 ); +} +static void __rport_fail_io_fast (struct srp_rport *rport) {struct Scsi_Host *shost =rport_to_shost (rport);
@@ -504,27 +534,6 @@ void srp_start_tl_fail_timers(struct srpEXPORT_SYMBOL (srp_start_tl_fail_timers);/** -* scsi_request_fn_active() - number of kernel threads inside scsi_request_fn() -* @shost: SCSI host for which to count the number of scsi_request_fn() callers. -*/ -static int scsi_request_fn_active (struct Scsi_Host *shost) -{ -struct scsi_device *sdev; -struct request_queue *q; -int request_fn_active =0 ; - -shost_for_each_device (sdev, shost) { - q = sdev->request_queue; - -spin_lock_irq (q->queue_lock); - request_fn_active += q->request_fn_active; -spin_unlock_irq (q->queue_lock); - } - -return request_fn_active; -} - -/** * srp_reconnect_rport() - reconnect to an SRP target port * @rport: SRP target port. *
@@ -559,8 +568,7 @@ int srp_reconnect_rport(struct srp_rportif (res) goto out;scsi_target_block (&shost->shost_gendev); -while (scsi_request_fn_active (shost)) -msleep (20 ); +srp_wait_for_queuecommand (shost); res = rport->state !=SRP_RPORT_LOST ? i->f->reconnect (rport) : -ENODEV ;pr_debug ("%s (state %d): transport.reconnect() returned %d\n" ,dev_name (&shost->shost_gendev), rport->state, res);
Patches currently in stable-queue which might be from [email protected] are
queue-4.1/ib-srp-fix-a-connection-setup-race.patch queue-4.1/scsi_transport_srp-introduce-srp_wait_for_queuecommand.patch queue-4.1/ib-srp-fix-connection-state-tracking.patch queue-4.1/ib-srp-fix-reconnection-failure-handling.patch queue-4.1/scsi_transport_srp-fix-a-race-condition.patch queue-4.1/ib-srp-remove-an-extraneous-scsi_host_put-from-an-error-path.patch