diff options
| author | Warner Losh <imp@FreeBSD.org> | 2023-11-29 01:49:30 +0000 |
|---|---|---|
| committer | Warner Losh <imp@FreeBSD.org> | 2023-11-29 01:49:30 +0000 |
| commit | cf8c23230aabd30aa9251975dbe705da559a2d02 (patch) | |
| tree | f2fbf95287674ff36e28e038c1729b1d92e78aec /sys/dev/mpi3mr | |
| parent | 1cfd01111eb6a28ca5043e928aa8e9099064177a (diff) | |
Diffstat (limited to 'sys/dev/mpi3mr')
| -rw-r--r-- | sys/dev/mpi3mr/mpi3mr_cam.c | 15 |
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; } |
