]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blobdiff - drivers/scsi/ibmvscsi/ibmvscsi.c
scsi: remove eh_timed_out methods in the transport template
[mirror_ubuntu-bionic-kernel.git] / drivers / scsi / ibmvscsi / ibmvscsi.c
index d9534ee6ef524fb1fab03680bdde2ed34a4202b7..1deb0a9f14a66dcb9f95cd40e0289b32bfee7370 100644 (file)
@@ -95,6 +95,7 @@ static int fast_fail = 1;
 static int client_reserve = 1;
 static char partition_name[97] = "UNKNOWN";
 static unsigned int partition_number = -1;
+static LIST_HEAD(ibmvscsi_head);
 
 static struct scsi_transport_template *ibmvscsi_transport_template;
 
@@ -232,6 +233,7 @@ static void ibmvscsi_task(void *data)
                while ((crq = crq_queue_next_crq(&hostdata->queue)) != NULL) {
                        ibmvscsi_handle_crq(crq, hostdata);
                        crq->valid = VIOSRP_CRQ_FREE;
+                       wmb();
                }
 
                vio_enable_interrupts(vdev);
@@ -240,6 +242,7 @@ static void ibmvscsi_task(void *data)
                        vio_disable_interrupts(vdev);
                        ibmvscsi_handle_crq(crq, hostdata);
                        crq->valid = VIOSRP_CRQ_FREE;
+                       wmb();
                } else {
                        done = 1;
                }
@@ -992,7 +995,7 @@ static void handle_cmd_rsp(struct srp_event_struct *evt_struct)
        if (unlikely(rsp->opcode != SRP_RSP)) {
                if (printk_ratelimit())
                        dev_warn(evt_struct->hostdata->dev,
-                                "bad SRP RSP type %d\n", rsp->opcode);
+                                "bad SRP RSP type %#02x\n", rsp->opcode);
        }
        
        if (cmnd) {
@@ -2069,6 +2072,7 @@ static struct scsi_host_template driver_template = {
        .name = "IBM POWER Virtual SCSI Adapter " IBMVSCSI_VERSION,
        .proc_name = "ibmvscsi",
        .queuecommand = ibmvscsi_queuecommand,
+       .eh_timed_out = srp_timed_out,
        .eh_abort_handler = ibmvscsi_eh_abort_handler,
        .eh_device_reset_handler = ibmvscsi_eh_device_reset_handler,
        .eh_host_reset_handler = ibmvscsi_eh_host_reset_handler,
@@ -2270,6 +2274,7 @@ static int ibmvscsi_probe(struct vio_dev *vdev, const struct vio_device_id *id)
        }
 
        dev_set_drvdata(&vdev->dev, hostdata);
+       list_add_tail(&hostdata->host_list, &ibmvscsi_head);
        return 0;
 
       add_srp_port_failed:
@@ -2291,6 +2296,7 @@ static int ibmvscsi_probe(struct vio_dev *vdev, const struct vio_device_id *id)
 static int ibmvscsi_remove(struct vio_dev *vdev)
 {
        struct ibmvscsi_host_data *hostdata = dev_get_drvdata(&vdev->dev);
+       list_del(&hostdata->host_list);
        unmap_persist_bufs(hostdata);
        release_event_pool(&hostdata->pool, hostdata);
        ibmvscsi_release_crq_queue(&hostdata->queue, hostdata,