void ElvDeadline::ElvMergedRequest(request *rq, int type) { if (type == ELEVATOR_FRONT_MERGE) { elv_rb_del(RQ_RB_ROOT(rq), rq); deadline_add_rq_rb(rq); } Elevator::ElvMergedRequest(rq, type); }
static inline void deadline_del_rq_rb(struct deadline_data *dd, struct request *rq) { const int data_dir = rq_data_dir(rq); if (dd->next_rq[data_dir] == rq) dd->next_rq[data_dir] = deadline_latter_request(rq); elv_rb_del(deadline_rb_root(dd, rq), rq); }
static void deadline_merged_request(struct request_queue *q, struct request *req, int type) { struct deadline_data *dd = q->elevator->elevator_data; if (type == ELEVATOR_FRONT_MERGE) { elv_rb_del(deadline_rb_root(dd, req), req); deadline_add_rq_rb(dd, req); } }
void ElvDeadline::deadline_del_rq_rb(request *rq) { if (next_rq[rq->cmd] == rq) { rb_node *next = Rbtree::rb_next(&rq->rbnode); next_rq[rq->cmd] = NULL; if (next) next_rq[rq->cmd] = rb_entry_rq(next); } elv_rb_del(RQ_RB_ROOT(rq), rq); }
static void deadline_merged_request(struct request_queue *q, struct request *req, int type) { struct deadline_data *dd = q->elevator->elevator_data; /* * if the merge was a front merge, we need to reposition request */ if (type == ELEVATOR_FRONT_MERGE) { elv_rb_del(deadline_rb_root(dd, req), req); deadline_add_rq_rb(dd, req); } }
static inline void deadline_del_rq_rb(struct deadline_data *dd, struct request *rq) { const int data_dir = rq_data_dir(rq); if (dd->next_rq[data_dir] == rq) { struct rb_node *rbnext = rb_next(&rq->rb_node); dd->next_rq[data_dir] = NULL; if (rbnext) dd->next_rq[data_dir] = rb_entry_rq(rbnext); } elv_rb_del(RQ_RB_ROOT(dd, rq), rq); }
static void vr_del_rq_rb(struct vr_data *vd, struct request *rq) { /* * We might be deleting our cached next request. * If so, find its sucessor. */ if (vd->next_rq == rq) vd->next_rq = elv_rb_latter_request(NULL, rq); else if (vd->prev_rq == rq) vd->prev_rq = elv_rb_former_request(NULL, rq); BUG_ON(vd->next_rq && vd->next_rq == vd->prev_rq); BUG_ON(vd->next_rq && vd->prev_rq && blk_rq_pos(vd->next_rq) < blk_rq_pos(vd->prev_rq)); elv_rb_del(&vd->sort_list, rq); }
static int cscan_dispatch(struct request_queue *q, int force) { struct request *rq; struct cscan_data *cd = q->elevator->elevator_data; struct rb_node *node = rb_first(&(cd->sort_list[cd->curr])); if(!node) { cd->curr = 1-cd->curr; node = rb_first(&(cd->sort_list[cd->curr])); } if(node) { rq = rb_entry_rq(node); cd->last_sector = rq_end_sector(rq); elv_rb_del(&(cd->sort_list[cd->curr]), rq); elv_dispatch_add_tail(q, rq); return 1; } return 0; }
static void fiops_reposition_rq_rb(struct fiops_ioc *ioc, struct request *rq) { elv_rb_del(&ioc->sort_list, rq); fiops_add_rq_rb(rq); }
/* * rb tree support functions */ static void fiops_del_rq_rb(struct request *rq) { struct fiops_ioc *ioc = RQ_CIC(rq); elv_rb_del(&ioc->sort_list, rq); }