diff options
-rw-r--r-- | sys/dev/isp/isp_pci.c | 6 | ||||
-rw-r--r-- | sys/pci/isp_pci.c | 6 |
2 files changed, 10 insertions, 2 deletions
diff --git a/sys/dev/isp/isp_pci.c b/sys/dev/isp/isp_pci.c index 50ed5ee..9ced6f8 100644 --- a/sys/dev/isp/isp_pci.c +++ b/sys/dev/isp/isp_pci.c @@ -1525,7 +1525,11 @@ dma2(void *arg, bus_dma_segment_t *dm_segs, int nseg, int error) ((ispreqt2_t *)rq)->req_flags |= REQFLAG_DATA_OUT; } } else { - seglim = ISP_RQDSEG; + if (csio->cdb_len > 12) { + seglim = 0; + } else { + seglim = ISP_RQDSEG; + } if ((csio->ccb_h.flags & CAM_DIR_MASK) == CAM_DIR_IN) { rq->req_flags |= REQFLAG_DATA_IN; } else { diff --git a/sys/pci/isp_pci.c b/sys/pci/isp_pci.c index 50ed5ee..9ced6f8 100644 --- a/sys/pci/isp_pci.c +++ b/sys/pci/isp_pci.c @@ -1525,7 +1525,11 @@ dma2(void *arg, bus_dma_segment_t *dm_segs, int nseg, int error) ((ispreqt2_t *)rq)->req_flags |= REQFLAG_DATA_OUT; } } else { - seglim = ISP_RQDSEG; + if (csio->cdb_len > 12) { + seglim = 0; + } else { + seglim = ISP_RQDSEG; + } if ((csio->ccb_h.flags & CAM_DIR_MASK) == CAM_DIR_IN) { rq->req_flags |= REQFLAG_DATA_IN; } else { |