summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authorsimokawa <simokawa@FreeBSD.org>2003-11-12 03:45:10 +0000
committersimokawa <simokawa@FreeBSD.org>2003-11-12 03:45:10 +0000
commit1c9ed43eb59ce7605b6a9b777033e2d713d3f508 (patch)
tree8054a9465fc7eeb1132c837ea027ad0f2e6bd5bf /sys
parent32c9245797e02e2874cd02cbeb0409ed732f75a6 (diff)
downloadFreeBSD-src-1c9ed43eb59ce7605b6a9b777033e2d713d3f508.zip
FreeBSD-src-1c9ed43eb59ce7605b6a9b777033e2d713d3f508.tar.gz
- Reserve a ocb for management ORB.
- Requeue XPT_SCSI_IO if ocb is short.
Diffstat (limited to 'sys')
-rw-r--r--sys/dev/firewire/sbp.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/sys/dev/firewire/sbp.c b/sys/dev/firewire/sbp.c
index fc9db27..95ce8e0 100644
--- a/sys/dev/firewire/sbp.c
+++ b/sys/dev/firewire/sbp.c
@@ -1317,6 +1317,7 @@ sbp_mgm_orb(struct sbp_dev *sdev, int func, struct sbp_ocb *aocb)
}
if ((ocb = sbp_get_ocb(sdev)) == NULL) {
splx(s);
+ /* XXX */
return;
}
ocb->flags = OCB_ACT_MGM;
@@ -1903,7 +1904,7 @@ END_DEBUG
sbp->sim = cam_sim_alloc(sbp_action, sbp_poll, "sbp", sbp,
device_get_unit(dev),
/*untagged*/ 1,
- /*tagged*/ SBP_QUEUE_LEN,
+ /*tagged*/ SBP_QUEUE_LEN - 1,
devq);
if (sbp->sim == NULL) {
@@ -2325,8 +2326,11 @@ END_DEBUG
}
}
#endif
- if ((ocb = sbp_get_ocb(sdev)) == NULL)
+ if ((ocb = sbp_get_ocb(sdev)) == NULL) {
+ ccb->ccb_h.status = CAM_REQUEUE_REQ;
+ xpt_done(ccb);
return;
+ }
ocb->flags = OCB_ACT_CMD;
ocb->sdev = sdev;
OpenPOWER on IntegriCloud