[SCSI] ibmvscsi: Improve CRQ reset reliability
authorBrian King <brking@linux.vnet.ibm.com>
Wed, 27 Apr 2011 15:27:08 +0000 (10:27 -0500)
committerJames Bottomley <James.Bottomley@suse.de>
Sun, 1 May 2011 17:09:58 +0000 (12:09 -0500)
This patch fixes an issue seen where an event occurs
which causes the ibmvscsi driver to reset its CRQ. Upon
re-registering its CRQ, it receives H_CLOSED, indicating
the Virtual I/O Server is not yet ready to receive commands.
This resulted in the ibmvscsi driver essentially offlining
the adapter and not recovering. The fix is to re-enable
our interrupt so that when the Virtual I/O server is ready
and sends a CRQ init, we will be able to receive it and
resume initialization of the VSCSI adapter.

Signed-off-by: Brian King <brking@linux.vnet.ibm.com>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
drivers/scsi/ibmvscsi/ibmvscsi.c

index 0419584..3d391dc 100644 (file)
@@ -1849,8 +1849,7 @@ static void ibmvscsi_do_work(struct ibmvscsi_host_data *hostdata)
                rc = ibmvscsi_ops->reset_crq_queue(&hostdata->queue, hostdata);
                if (!rc)
                        rc = ibmvscsi_ops->send_crq(hostdata, 0xC001000000000000LL, 0);
-               if (!rc)
-                       rc = vio_enable_interrupts(to_vio_dev(hostdata->dev));
+               vio_enable_interrupts(to_vio_dev(hostdata->dev));
        } else if (hostdata->reenable_crq) {
                smp_rmb();
                action = "enable";