Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5d1a5366 authored by Aaron Carroll's avatar Aaron Carroll Committed by Jens Axboe
Browse files

Deadline iosched: Factor out finding latter reques



Factor finding the next request in sector-sorted order into
a function deadline_latter_request.

Signed-off-by: default avatarAaron Carroll <aaronc@gelato.unsw.edu.au>
Signed-off-by: default avatarJens Axboe <jens.axboe@oracle.com>
parent 54866f03
Loading
Loading
Loading
Loading
+17 −11
Original line number Original line Diff line number Diff line
@@ -55,6 +55,20 @@ static void deadline_move_request(struct deadline_data *, struct request *);


#define RQ_RB_ROOT(dd, rq)	(&(dd)->sort_list[rq_data_dir((rq))])
#define RQ_RB_ROOT(dd, rq)	(&(dd)->sort_list[rq_data_dir((rq))])


/*
 * get the request after `rq' in sector-sorted order
 */
static inline struct request *
deadline_latter_request(struct request *rq)
{
	struct rb_node *node = rb_next(&rq->rb_node);

	if (node)
		return rb_entry_rq(node);

	return NULL;
}

static void
static void
deadline_add_rq_rb(struct deadline_data *dd, struct request *rq)
deadline_add_rq_rb(struct deadline_data *dd, struct request *rq)
{
{
@@ -74,13 +88,8 @@ deadline_del_rq_rb(struct deadline_data *dd, struct request *rq)
{
{
	const int data_dir = rq_data_dir(rq);
	const int data_dir = rq_data_dir(rq);


	if (dd->next_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] = deadline_latter_request(rq);

		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);
	elv_rb_del(RQ_RB_ROOT(dd, rq), rq);
}
}
@@ -198,13 +207,10 @@ static void
deadline_move_request(struct deadline_data *dd, struct request *rq)
deadline_move_request(struct deadline_data *dd, struct request *rq)
{
{
	const int data_dir = rq_data_dir(rq);
	const int data_dir = rq_data_dir(rq);
	struct rb_node *rbnext = rb_next(&rq->rb_node);


	dd->next_rq[READ] = NULL;
	dd->next_rq[READ] = NULL;
	dd->next_rq[WRITE] = NULL;
	dd->next_rq[WRITE] = NULL;

	dd->next_rq[data_dir] = deadline_latter_request(rq);
	if (rbnext)
		dd->next_rq[data_dir] = rb_entry_rq(rbnext);


	dd->last_sector = rq->sector + rq->nr_sectors;
	dd->last_sector = rq->sector + rq->nr_sectors;