Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

+79 -3
+79 -3
drivers/xen/xen-scsiback.c
··· 280 280 kfree(entry); 281 281 } 282 282 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 + 283 359 static void scsiback_send_response(struct vscsibk_info *info, 284 360 char *sense_buffer, int32_t result, uint32_t resid, 285 361 uint16_t rqid) ··· 371 295 ring_res = RING_GET_RESPONSE(&info->ring, info->ring.rsp_prod_pvt); 372 296 info->ring.rsp_prod_pvt++; 373 297 374 - ring_res->rslt = result; 298 + ring_res->rslt = scsiback_result(result); 375 299 ring_res->rqid = rqid; 376 300 377 301 if (sense_buffer != NULL && ··· 631 555 struct scsiback_nexus *nexus = tpg->tpg_nexus; 632 556 struct se_cmd *se_cmd = &pending_req->se_cmd; 633 557 u64 unpacked_lun = pending_req->v2p->lun; 634 - int rc, err = FAILED; 558 + int rc, err = XEN_VSCSIIF_RSLT_RESET_FAILED; 635 559 636 560 init_completion(&pending_req->tmr_done); 637 561 ··· 645 569 wait_for_completion(&pending_req->tmr_done); 646 570 647 571 err = (se_cmd->se_tmr_req->response == TMR_FUNCTION_COMPLETE) ? 648 - SUCCESS : FAILED; 572 + XEN_VSCSIIF_RSLT_RESET_SUCCESS : XEN_VSCSIIF_RSLT_RESET_FAILED; 649 573 650 574 scsiback_do_resp_with_sense(NULL, err, 0, pending_req); 651 575 transport_generic_free_cmd(&pending_req->se_cmd, 0);