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

Configure Feed

Select the types of activity you want to include in your feed.

xen/scsifront: use new command result macros

Add a translation layer for the command result values.

Signed-off-by: Juergen Gross <jgross@suse.com>
Reviewed-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Link: https://lore.kernel.org/r/20220428075323.12853-4-jgross@suse.com
Signed-off-by: Juergen Gross <jgross@suse.com>

+56 -8
+56 -8
drivers/scsi/xen-scsifront.c
··· 243 243 kfree(shadow->sg); 244 244 } 245 245 246 + static unsigned int scsifront_host_byte(int32_t rslt) 247 + { 248 + switch (XEN_VSCSIIF_RSLT_HOST(rslt)) { 249 + case XEN_VSCSIIF_RSLT_HOST_OK: 250 + return DID_OK; 251 + case XEN_VSCSIIF_RSLT_HOST_NO_CONNECT: 252 + return DID_NO_CONNECT; 253 + case XEN_VSCSIIF_RSLT_HOST_BUS_BUSY: 254 + return DID_BUS_BUSY; 255 + case XEN_VSCSIIF_RSLT_HOST_TIME_OUT: 256 + return DID_TIME_OUT; 257 + case XEN_VSCSIIF_RSLT_HOST_BAD_TARGET: 258 + return DID_BAD_TARGET; 259 + case XEN_VSCSIIF_RSLT_HOST_ABORT: 260 + return DID_ABORT; 261 + case XEN_VSCSIIF_RSLT_HOST_PARITY: 262 + return DID_PARITY; 263 + case XEN_VSCSIIF_RSLT_HOST_ERROR: 264 + return DID_ERROR; 265 + case XEN_VSCSIIF_RSLT_HOST_RESET: 266 + return DID_RESET; 267 + case XEN_VSCSIIF_RSLT_HOST_BAD_INTR: 268 + return DID_BAD_INTR; 269 + case XEN_VSCSIIF_RSLT_HOST_PASSTHROUGH: 270 + return DID_PASSTHROUGH; 271 + case XEN_VSCSIIF_RSLT_HOST_SOFT_ERROR: 272 + return DID_SOFT_ERROR; 273 + case XEN_VSCSIIF_RSLT_HOST_IMM_RETRY: 274 + return DID_IMM_RETRY; 275 + case XEN_VSCSIIF_RSLT_HOST_REQUEUE: 276 + return DID_REQUEUE; 277 + case XEN_VSCSIIF_RSLT_HOST_TRANSPORT_DISRUPTED: 278 + return DID_TRANSPORT_DISRUPTED; 279 + case XEN_VSCSIIF_RSLT_HOST_TRANSPORT_FAILFAST: 280 + return DID_TRANSPORT_FAILFAST; 281 + case XEN_VSCSIIF_RSLT_HOST_TARGET_FAILURE: 282 + return DID_TARGET_FAILURE; 283 + case XEN_VSCSIIF_RSLT_HOST_NEXUS_FAILURE: 284 + return DID_NEXUS_FAILURE; 285 + case XEN_VSCSIIF_RSLT_HOST_ALLOC_FAILURE: 286 + return DID_ALLOC_FAILURE; 287 + case XEN_VSCSIIF_RSLT_HOST_MEDIUM_ERROR: 288 + return DID_MEDIUM_ERROR; 289 + case XEN_VSCSIIF_RSLT_HOST_TRANSPORT_MARGINAL: 290 + return DID_TRANSPORT_MARGINAL; 291 + default: 292 + return DID_ERROR; 293 + } 294 + } 295 + 246 296 static void scsifront_cdb_cmd_done(struct vscsifrnt_info *info, 247 297 struct vscsiif_response *ring_rsp) 248 298 { ··· 300 250 struct scsi_cmnd *sc; 301 251 uint32_t id; 302 252 uint8_t sense_len; 303 - int result; 304 253 305 254 id = ring_rsp->rqid; 306 255 shadow = info->shadow[id]; ··· 310 261 scsifront_gnttab_done(info, shadow); 311 262 scsifront_put_rqid(info, id); 312 263 313 - result = ring_rsp->rslt; 314 - if (result >> 24) 315 - set_host_byte(sc, DID_ERROR); 316 - else 317 - set_host_byte(sc, host_byte(result)); 318 - set_status_byte(sc, result & 0xff); 264 + set_host_byte(sc, scsifront_host_byte(ring_rsp->rslt)); 265 + set_status_byte(sc, XEN_VSCSIIF_RSLT_STATUS(ring_rsp->rslt)); 319 266 scsi_set_resid(sc, ring_rsp->residual_len); 320 267 321 268 sense_len = min_t(uint8_t, VSCSIIF_SENSE_BUFFERSIZE, ··· 335 290 shadow->wait_reset = 1; 336 291 switch (shadow->rslt_reset) { 337 292 case RSLT_RESET_WAITING: 338 - shadow->rslt_reset = ring_rsp->rslt; 293 + if (ring_rsp->rslt == XEN_VSCSIIF_RSLT_RESET_SUCCESS) 294 + shadow->rslt_reset = SUCCESS; 295 + else 296 + shadow->rslt_reset = FAILED; 339 297 break; 340 298 case RSLT_RESET_ERR: 341 299 kick = _scsifront_put_rqid(info, id);