aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/mpi3mr
diff options
context:
space:
mode:
authorWarner Losh <imp@FreeBSD.org>2023-11-29 01:49:30 +0000
committerWarner Losh <imp@FreeBSD.org>2023-11-29 01:49:30 +0000
commitcf8c23230aabd30aa9251975dbe705da559a2d02 (patch)
treef2fbf95287674ff36e28e038c1729b1d92e78aec /sys/dev/mpi3mr
parent1cfd01111eb6a28ca5043e928aa8e9099064177a (diff)
Diffstat (limited to 'sys/dev/mpi3mr')
-rw-r--r--sys/dev/mpi3mr/mpi3mr_cam.c15
1 files changed, 7 insertions, 8 deletions
diff --git a/sys/dev/mpi3mr/mpi3mr_cam.c b/sys/dev/mpi3mr/mpi3mr_cam.c
index 691be827cf89..4a525a222577 100644
--- a/sys/dev/mpi3mr/mpi3mr_cam.c
+++ b/sys/dev/mpi3mr/mpi3mr_cam.c
@@ -1024,7 +1024,7 @@ mpi3mr_action_scsiio(struct mpi3mr_cam_softc *cam_sc, union ccb *ccb)
cam_sc->flags |= MPI3MRSAS_QUEUE_FROZEN;
}
ccb->ccb_h.status &= ~CAM_SIM_QUEUED;
- ccb->ccb_h.status |= CAM_REQUEUE_REQ;
+ mpi3mr_set_ccbstatus(ccb, CAM_REQUEUE_REQ);
xpt_done(ccb);
return;
}
@@ -1098,39 +1098,38 @@ mpi3mr_action_scsiio(struct mpi3mr_cam_softc *cam_sc, union ccb *ccb)
mpi3mr_dprint(sc, MPI3MR_TRACE, "[QID:%d]: func: %s line:%d CDB: 0x%x targetid: %x SMID: 0x%x\n",
(queue_idx + 1), __func__, __LINE__, scsi_opcode, csio->ccb_h.target_id, cm->hosttag);
- ccb->ccb_h.status |= CAM_SIM_QUEUED;
-
switch ((ccb->ccb_h.flags & CAM_DATA_MASK)) {
case CAM_DATA_PADDR:
case CAM_DATA_SG_PADDR:
device_printf(sc->mpi3mr_dev, "%s: physical addresses not supported\n",
__func__);
mpi3mr_release_command(cm);
- ccb->ccb_h.status = CAM_REQ_INVALID;
- ccb->ccb_h.status &= ~CAM_SIM_QUEUED;
+ mpi3mr_set_ccbstatus(ccb, CAM_REQ_INVALID);
xpt_done(ccb);
return;
case CAM_DATA_SG:
device_printf(sc->mpi3mr_dev, "%s: scatter gather is not supported\n",
__func__);
mpi3mr_release_command(cm);
- ccb->ccb_h.status = CAM_REQ_INVALID;
+ mpi3mr_set_ccbstatus(ccb, CAM_REQ_INVALID);
xpt_done(ccb);
return;
case CAM_DATA_VADDR:
case CAM_DATA_BIO:
if (csio->dxfer_len > (MPI3MR_SG_DEPTH * MPI3MR_4K_PGSZ)) {
+ mpi3mr_set_ccbstatus(ccb, CAM_REQ_TOO_BIG);
mpi3mr_release_command(cm);
- ccb->ccb_h.status = CAM_REQ_TOO_BIG;
xpt_done(ccb);
return;
}
+ ccb->ccb_h.status |= CAM_SIM_QUEUED;
cm->length = csio->dxfer_len;
if (cm->length)
cm->data = csio->data_ptr;
break;
default:
- ccb->ccb_h.status = CAM_REQ_INVALID;
+ mpi3mr_release_command(cm);
+ mpi3mr_set_ccbstatus(ccb, CAM_REQ_INVALID);
xpt_done(ccb);
return;
}