Skip to content

Commit 54aee68

Browse files
committed
xen/scsiback: use new command result macros
Instead of using the kernel's values for the result of PV scsi operations use the values of the interface definition. Signed-off-by: Juergen Gross <jgross@suse.com> Reviewed-by: Boris Ostrovsky <boris.ostrovsky@oracle.com> Link: https://lore.kernel.org/r/20220428075323.12853-3-jgross@suse.com Signed-off-by: Juergen Gross <jgross@suse.com>
1 parent 5ce9231 commit 54aee68

1 file changed

Lines changed: 79 additions & 3 deletions

File tree

drivers/xen/xen-scsiback.c

Lines changed: 79 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -280,6 +280,82 @@ static void scsiback_free_translation_entry(struct kref *kref)
280280
kfree(entry);
281281
}
282282

283+
static int32_t scsiback_result(int32_t result)
284+
{
285+
int32_t host_status;
286+
287+
switch (XEN_VSCSIIF_RSLT_HOST(result)) {
288+
case DID_OK:
289+
host_status = XEN_VSCSIIF_RSLT_HOST_OK;
290+
break;
291+
case DID_NO_CONNECT:
292+
host_status = XEN_VSCSIIF_RSLT_HOST_NO_CONNECT;
293+
break;
294+
case DID_BUS_BUSY:
295+
host_status = XEN_VSCSIIF_RSLT_HOST_BUS_BUSY;
296+
break;
297+
case DID_TIME_OUT:
298+
host_status = XEN_VSCSIIF_RSLT_HOST_TIME_OUT;
299+
break;
300+
case DID_BAD_TARGET:
301+
host_status = XEN_VSCSIIF_RSLT_HOST_BAD_TARGET;
302+
break;
303+
case DID_ABORT:
304+
host_status = XEN_VSCSIIF_RSLT_HOST_ABORT;
305+
break;
306+
case DID_PARITY:
307+
host_status = XEN_VSCSIIF_RSLT_HOST_PARITY;
308+
break;
309+
case DID_ERROR:
310+
host_status = XEN_VSCSIIF_RSLT_HOST_ERROR;
311+
break;
312+
case DID_RESET:
313+
host_status = XEN_VSCSIIF_RSLT_HOST_RESET;
314+
break;
315+
case DID_BAD_INTR:
316+
host_status = XEN_VSCSIIF_RSLT_HOST_BAD_INTR;
317+
break;
318+
case DID_PASSTHROUGH:
319+
host_status = XEN_VSCSIIF_RSLT_HOST_PASSTHROUGH;
320+
break;
321+
case DID_SOFT_ERROR:
322+
host_status = XEN_VSCSIIF_RSLT_HOST_SOFT_ERROR;
323+
break;
324+
case DID_IMM_RETRY:
325+
host_status = XEN_VSCSIIF_RSLT_HOST_IMM_RETRY;
326+
break;
327+
case DID_REQUEUE:
328+
host_status = XEN_VSCSIIF_RSLT_HOST_REQUEUE;
329+
break;
330+
case DID_TRANSPORT_DISRUPTED:
331+
host_status = XEN_VSCSIIF_RSLT_HOST_TRANSPORT_DISRUPTED;
332+
break;
333+
case DID_TRANSPORT_FAILFAST:
334+
host_status = XEN_VSCSIIF_RSLT_HOST_TRANSPORT_FAILFAST;
335+
break;
336+
case DID_TARGET_FAILURE:
337+
host_status = XEN_VSCSIIF_RSLT_HOST_TARGET_FAILURE;
338+
break;
339+
case DID_NEXUS_FAILURE:
340+
host_status = XEN_VSCSIIF_RSLT_HOST_NEXUS_FAILURE;
341+
break;
342+
case DID_ALLOC_FAILURE:
343+
host_status = XEN_VSCSIIF_RSLT_HOST_ALLOC_FAILURE;
344+
break;
345+
case DID_MEDIUM_ERROR:
346+
host_status = XEN_VSCSIIF_RSLT_HOST_MEDIUM_ERROR;
347+
break;
348+
case DID_TRANSPORT_MARGINAL:
349+
host_status = XEN_VSCSIIF_RSLT_HOST_TRANSPORT_MARGINAL;
350+
break;
351+
default:
352+
host_status = XEN_VSCSIIF_RSLT_HOST_ERROR;
353+
break;
354+
}
355+
356+
return (host_status << 16) | (result & 0x00ffff);
357+
}
358+
283359
static void scsiback_send_response(struct vscsibk_info *info,
284360
char *sense_buffer, int32_t result, uint32_t resid,
285361
uint16_t rqid)
@@ -295,7 +371,7 @@ static void scsiback_send_response(struct vscsibk_info *info,
295371
ring_res = RING_GET_RESPONSE(&info->ring, info->ring.rsp_prod_pvt);
296372
info->ring.rsp_prod_pvt++;
297373

298-
ring_res->rslt = result;
374+
ring_res->rslt = scsiback_result(result);
299375
ring_res->rqid = rqid;
300376

301377
if (sense_buffer != NULL &&
@@ -555,7 +631,7 @@ static void scsiback_device_action(struct vscsibk_pend *pending_req,
555631
struct scsiback_nexus *nexus = tpg->tpg_nexus;
556632
struct se_cmd *se_cmd = &pending_req->se_cmd;
557633
u64 unpacked_lun = pending_req->v2p->lun;
558-
int rc, err = FAILED;
634+
int rc, err = XEN_VSCSIIF_RSLT_RESET_FAILED;
559635

560636
init_completion(&pending_req->tmr_done);
561637

@@ -569,7 +645,7 @@ static void scsiback_device_action(struct vscsibk_pend *pending_req,
569645
wait_for_completion(&pending_req->tmr_done);
570646

571647
err = (se_cmd->se_tmr_req->response == TMR_FUNCTION_COMPLETE) ?
572-
SUCCESS : FAILED;
648+
XEN_VSCSIIF_RSLT_RESET_SUCCESS : XEN_VSCSIIF_RSLT_RESET_FAILED;
573649

574650
scsiback_do_resp_with_sense(NULL, err, 0, pending_req);
575651
transport_generic_free_cmd(&pending_req->se_cmd, 0);

0 commit comments

Comments
 (0)