Switch work_queue from TAILQ to STAILQ.
It is mostly FIFO and we don't need random removal there. MFC after: 2 weeks
This commit is contained in:
parent
45400376e0
commit
832529c5bd
@ -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;
|
||||
};
|
||||
|
||||
@ -460,7 +460,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;
|
||||
|
||||
@ -749,14 +749,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;
|
||||
@ -881,7 +880,7 @@ ctlfestart(struct cam_periph *periph, union ccb *start_ccb)
|
||||
/*
|
||||
* 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);
|
||||
}
|
||||
|
||||
@ -1207,8 +1206,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;
|
||||
}
|
||||
@ -1823,7 +1822,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++;
|
||||
@ -1878,8 +1877,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);
|
||||
}
|
||||
@ -1931,8 +1930,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);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user