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);
}
Example #2
0
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);
}
Example #3
0
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);
}
Example #5
0
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);
	}
}
Example #6
0
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);
}
Example #7
0
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);
}