diff options
author | mav <mav@FreeBSD.org> | 2017-03-24 06:59:40 +0000 |
---|---|---|
committer | mav <mav@FreeBSD.org> | 2017-03-24 06:59:40 +0000 |
commit | 0d9d883e15e2055be3a26d1ec02ee71a85048117 (patch) | |
tree | 5a076d3902aa4379dc383dc4aa90b6e6918f5273 /sys/cam | |
parent | eecf393c421dd7e05c5913c21e12098e68a91a9a (diff) | |
download | FreeBSD-src-0d9d883e15e2055be3a26d1ec02ee71a85048117.zip FreeBSD-src-0d9d883e15e2055be3a26d1ec02ee71a85048117.tar.gz |
MFC r315025: Switch work_queue from TAILQ to STAILQ.
It is mostly FIFO and we don't need random removal there.
Diffstat (limited to 'sys/cam')
-rw-r--r-- | sys/cam/ctl/scsi_ctl.c | 27 |
1 files changed, 13 insertions, 14 deletions
diff --git a/sys/cam/ctl/scsi_ctl.c b/sys/cam/ctl/scsi_ctl.c index 5eeac4b..e0b1482 100644 --- a/sys/cam/ctl/scsi_ctl.c +++ b/sys/cam/ctl/scsi_ctl.c @@ -105,7 +105,7 @@ struct ctlfe_lun_softc { int atios_alloced; /* Number of ATIOs not freed */ int inots_alloced; /* Number of INOTs not freed */ struct task refdrain_task; - TAILQ_HEAD(, ccb_hdr) work_queue; + STAILQ_HEAD(, ccb_hdr) work_queue; STAILQ_ENTRY(ctlfe_lun_softc) links; }; @@ -449,7 +449,7 @@ ctlferegister(struct cam_periph *periph, void *arg) softc = (struct ctlfe_lun_softc *)arg; bus_softc = softc->parent_softc; - TAILQ_INIT(&softc->work_queue); + STAILQ_INIT(&softc->work_queue); softc->periph = periph; periph->softc = softc; @@ -738,14 +738,13 @@ ctlfestart(struct cam_periph *periph, union ccb *start_ccb) softc = (struct ctlfe_lun_softc *)periph->softc; next: - ccb_h = TAILQ_FIRST(&softc->work_queue); + /* Take the ATIO off the work queue */ + ccb_h = STAILQ_FIRST(&softc->work_queue); if (ccb_h == NULL) { xpt_release_ccb(start_ccb); return; } - - /* Take the ATIO off the work queue */ - TAILQ_REMOVE(&softc->work_queue, ccb_h, periph_links.tqe); + STAILQ_REMOVE_HEAD(&softc->work_queue, periph_links.stqe); atio = (struct ccb_accept_tio *)ccb_h; io = (union ctl_io *)ccb_h->io_ptr; csio = &start_ccb->csio; @@ -870,7 +869,7 @@ next: /* * If we still have work to do, ask for another CCB. */ - if (!TAILQ_EMPTY(&softc->work_queue)) + if (!STAILQ_EMPTY(&softc->work_queue)) xpt_schedule(periph, CAM_PRIORITY_NORMAL); } @@ -1196,8 +1195,8 @@ ctlfedone(struct cam_periph *periph, union ccb *done_ccb) io->scsiio.io_hdr.status = CTL_STATUS_NONE; io->io_hdr.flags |= CTL_FLAG_DMA_QUEUED; xpt_release_ccb(done_ccb); - TAILQ_INSERT_HEAD(&softc->work_queue, &atio->ccb_h, - periph_links.tqe); + STAILQ_INSERT_HEAD(&softc->work_queue, &atio->ccb_h, + periph_links.stqe); xpt_schedule(periph, CAM_PRIORITY_NORMAL); break; } @@ -1812,7 +1811,7 @@ ctlfe_dump_queue(struct ctlfe_lun_softc *softc) periph = softc->periph; num_items = 0; - TAILQ_FOREACH(hdr, &softc->work_queue, periph_links.tqe) { + STAILQ_FOREACH(hdr, &softc->work_queue, periph_links.stqe) { union ctl_io *io = hdr->io_ptr; num_items++; @@ -1867,8 +1866,8 @@ ctlfe_datamove(union ctl_io *io) io->io_hdr.flags |= CTL_FLAG_DMA_QUEUED; if ((io->io_hdr.status & CTL_STATUS_MASK) != CTL_STATUS_NONE) io->io_hdr.flags |= CTL_FLAG_STATUS_QUEUED; - TAILQ_INSERT_TAIL(&softc->work_queue, &ccb->ccb_h, - periph_links.tqe); + STAILQ_INSERT_TAIL(&softc->work_queue, &ccb->ccb_h, + periph_links.stqe); xpt_schedule(periph, CAM_PRIORITY_NORMAL); cam_periph_unlock(periph); } @@ -1920,8 +1919,8 @@ ctlfe_done(union ctl_io *io) return; } else { io->io_hdr.flags |= CTL_FLAG_STATUS_QUEUED; - TAILQ_INSERT_TAIL(&softc->work_queue, &ccb->ccb_h, - periph_links.tqe); + STAILQ_INSERT_TAIL(&softc->work_queue, &ccb->ccb_h, + periph_links.stqe); xpt_schedule(periph, CAM_PRIORITY_NORMAL); } |