diff options
Diffstat (limited to 'drivers/scsi/ibmvscsi/rpa_vscsi.c')
-rw-r--r-- | drivers/scsi/ibmvscsi/rpa_vscsi.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/drivers/scsi/ibmvscsi/rpa_vscsi.c b/drivers/scsi/ibmvscsi/rpa_vscsi.c index 8bf5652f1060..75db2f5c545e 100644 --- a/drivers/scsi/ibmvscsi/rpa_vscsi.c +++ b/drivers/scsi/ibmvscsi/rpa_vscsi.c | |||
@@ -230,6 +230,11 @@ int ibmvscsi_init_crq_queue(struct crq_queue *queue, | |||
230 | rc = plpar_hcall_norets(H_REG_CRQ, | 230 | rc = plpar_hcall_norets(H_REG_CRQ, |
231 | vdev->unit_address, | 231 | vdev->unit_address, |
232 | queue->msg_token, PAGE_SIZE); | 232 | queue->msg_token, PAGE_SIZE); |
233 | if (rc == H_Resource) | ||
234 | /* maybe kexecing and resource is busy. try a reset */ | ||
235 | rc = ibmvscsi_reset_crq_queue(queue, | ||
236 | hostdata); | ||
237 | |||
233 | if (rc == 2) { | 238 | if (rc == 2) { |
234 | /* Adapter is good, but other end is not ready */ | 239 | /* Adapter is good, but other end is not ready */ |
235 | printk(KERN_WARNING "ibmvscsi: Partner adapter not ready\n"); | 240 | printk(KERN_WARNING "ibmvscsi: Partner adapter not ready\n"); |
@@ -281,7 +286,7 @@ int ibmvscsi_init_crq_queue(struct crq_queue *queue, | |||
281 | * @hostdata: ibmvscsi_host_data of host | 286 | * @hostdata: ibmvscsi_host_data of host |
282 | * | 287 | * |
283 | */ | 288 | */ |
284 | void ibmvscsi_reset_crq_queue(struct crq_queue *queue, | 289 | int ibmvscsi_reset_crq_queue(struct crq_queue *queue, |
285 | struct ibmvscsi_host_data *hostdata) | 290 | struct ibmvscsi_host_data *hostdata) |
286 | { | 291 | { |
287 | int rc; | 292 | int rc; |
@@ -309,4 +314,5 @@ void ibmvscsi_reset_crq_queue(struct crq_queue *queue, | |||
309 | printk(KERN_WARNING | 314 | printk(KERN_WARNING |
310 | "ibmvscsi: couldn't register crq--rc 0x%x\n", rc); | 315 | "ibmvscsi: couldn't register crq--rc 0x%x\n", rc); |
311 | } | 316 | } |
317 | return rc; | ||
312 | } | 318 | } |