diff mbox

[1/1] ibmvfc: Fix I/O hang when port is not mapped

Message ID 20160919135919.689C528041@b01ledav001.gho.pok.ibm.com (mailing list archive)
State Accepted, archived
Headers show

Commit Message

Brian King Sept. 19, 2016, 1:59 p.m. UTC
If a VFC port gets unmapped in the VIOS, it may not respond with a CRQ init
complete following H_REG_CRQ. If this occurs, we can end up having called
scsi_block_requests and not a resulting unblock until the init complete
happens, which may never occur, and we end up hanging I/O requests.
This patch ensures the host action stay set to IBMVFC_HOST_ACTION_TGT_DEL so
we move all rports into devloss state and unblock unless we receive an
init complete. 

Signed-off-by: Brian King <brking@linux.vnet.ibm.com>
---

 drivers/scsi/ibmvscsi/ibmvfc.c |    1 -
 1 file changed, 1 deletion(-)

Comments

Tyrel Datwyler Sept. 19, 2016, 4:14 p.m. UTC | #1
On 09/19/2016 06:59 AM, Brian King wrote:
> If a VFC port gets unmapped in the VIOS, it may not respond with a CRQ init
> complete following H_REG_CRQ. If this occurs, we can end up having called
> scsi_block_requests and not a resulting unblock until the init complete
> happens, which may never occur, and we end up hanging I/O requests.
> This patch ensures the host action stay set to IBMVFC_HOST_ACTION_TGT_DEL so
> we move all rports into devloss state and unblock unless we receive an
> init complete. 
> 
> Signed-off-by: Brian King <brking@linux.vnet.ibm.com>

Acked-by: Tyrel Datwyler <tyreld@linux.vnet.ibm.com>

--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Martin K. Petersen Sept. 19, 2016, 8:54 p.m. UTC | #2
>>>>> "Brian" == Brian King <brking@linux.vnet.ibm.com> writes:

Brian> If a VFC port gets unmapped in the VIOS, it may not respond with
Brian> a CRQ init complete following H_REG_CRQ. If this occurs, we can
Brian> end up having called scsi_block_requests and not a resulting
Brian> unblock until the init complete happens, which may never occur,
Brian> and we end up hanging I/O requests.  This patch ensures the host
Brian> action stay set to IBMVFC_HOST_ACTION_TGT_DEL so we move all
Brian> rports into devloss state and unblock unless we receive an init
Brian> complete.

Applied to 4.9/scsi-queue.
Tyrel Datwyler Sept. 19, 2016, 9:21 p.m. UTC | #3
On 09/19/2016 06:59 AM, Brian King wrote:
> If a VFC port gets unmapped in the VIOS, it may not respond with a CRQ init
> complete following H_REG_CRQ. If this occurs, we can end up having called
> scsi_block_requests and not a resulting unblock until the init complete
> happens, which may never occur, and we end up hanging I/O requests.
> This patch ensures the host action stay set to IBMVFC_HOST_ACTION_TGT_DEL so
> we move all rports into devloss state and unblock unless we receive an
> init complete. 
> 
> Signed-off-by: Brian King <brking@linux.vnet.ibm.com>

In retrospect this probably should have been queued up for stable as well.

-Tyrel

> ---
> 
>  drivers/scsi/ibmvscsi/ibmvfc.c |    1 -
>  1 file changed, 1 deletion(-)
> 
> diff -puN drivers/scsi/ibmvscsi/ibmvfc.c~ibmvfc_unmap_hang_fix drivers/scsi/ibmvscsi/ibmvfc.c
> --- linux-2.6.git/drivers/scsi/ibmvscsi/ibmvfc.c~ibmvfc_unmap_hang_fix	2016-09-09 15:46:36.452011778 -0500
> +++ linux-2.6.git-bjking1/drivers/scsi/ibmvscsi/ibmvfc.c	2016-09-09 15:47:07.026632886 -0500
> @@ -717,7 +717,6 @@ static int ibmvfc_reset_crq(struct ibmvf
>  	spin_lock_irqsave(vhost->host->host_lock, flags);
>  	vhost->state = IBMVFC_NO_CRQ;
>  	vhost->logged_in = 0;
> -	ibmvfc_set_host_action(vhost, IBMVFC_HOST_ACTION_NONE);
>  
>  	/* Clean out the queue */
>  	memset(crq->msgs, 0, PAGE_SIZE);
> _
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Martin K. Petersen Sept. 19, 2016, 11:51 p.m. UTC | #4
>>>>> "Tyrel" == Tyrel Datwyler <tyreld@linux.vnet.ibm.com> writes:

Tyrel> In retrospect this probably should have been queued up for stable
Tyrel> as well.

Tag added.
diff mbox

Patch

diff -puN drivers/scsi/ibmvscsi/ibmvfc.c~ibmvfc_unmap_hang_fix drivers/scsi/ibmvscsi/ibmvfc.c
--- linux-2.6.git/drivers/scsi/ibmvscsi/ibmvfc.c~ibmvfc_unmap_hang_fix	2016-09-09 15:46:36.452011778 -0500
+++ linux-2.6.git-bjking1/drivers/scsi/ibmvscsi/ibmvfc.c	2016-09-09 15:47:07.026632886 -0500
@@ -717,7 +717,6 @@  static int ibmvfc_reset_crq(struct ibmvf
 	spin_lock_irqsave(vhost->host->host_lock, flags);
 	vhost->state = IBMVFC_NO_CRQ;
 	vhost->logged_in = 0;
-	ibmvfc_set_host_action(vhost, IBMVFC_HOST_ACTION_NONE);
 
 	/* Clean out the queue */
 	memset(crq->msgs, 0, PAGE_SIZE);