mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-11-18 15:44:02 +08:00
[SCSI] ibmvfc: Handle Virtual I/O Server reboot
If a Virtual I/O server is rebooted, the client fibre channel sees a transport event on its CRQ, which causes it to attempt to reconnect to the CRQ. For a period of time during the VIOS reboot, the client's attempts to register the CRQ will return H_CLOSED, indicating the server side is not currently registered. The ibmvfc driver was not handling this well and was taking the virtual adapter offline. Fix this by re-enabling our interrupt and waiting for the event on our CRQ indicating the server is back, at which point we can reconnect. Signed-off-by: Brian King <brking@linux.vnet.ibm.com> Signed-off-by: James Bottomley <James.Bottomley@suse.de>
This commit is contained in:
parent
1a03ae0f55
commit
d24099df9e
@ -4302,8 +4302,10 @@ static void ibmvfc_do_work(struct ibmvfc_host *vhost)
|
||||
spin_unlock_irqrestore(vhost->host->host_lock, flags);
|
||||
rc = ibmvfc_reset_crq(vhost);
|
||||
spin_lock_irqsave(vhost->host->host_lock, flags);
|
||||
if (rc || (rc = ibmvfc_send_crq_init(vhost)) ||
|
||||
(rc = vio_enable_interrupts(to_vio_dev(vhost->dev)))) {
|
||||
if (rc == H_CLOSED)
|
||||
vio_enable_interrupts(to_vio_dev(vhost->dev));
|
||||
else if (rc || (rc = ibmvfc_send_crq_init(vhost)) ||
|
||||
(rc = vio_enable_interrupts(to_vio_dev(vhost->dev)))) {
|
||||
ibmvfc_link_down(vhost, IBMVFC_LINK_DEAD);
|
||||
dev_err(vhost->dev, "Error after reset (rc=%d)\n", rc);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user