Lines Matching refs:dd
54 deadline_rb_root(struct deadline_data *dd, struct request *rq) in deadline_rb_root() argument
56 return &dd->sort_list[rq_data_dir(rq)]; in deadline_rb_root()
74 deadline_add_rq_rb(struct deadline_data *dd, struct request *rq) in deadline_add_rq_rb() argument
76 struct rb_root *root = deadline_rb_root(dd, rq); in deadline_add_rq_rb()
82 deadline_del_rq_rb(struct deadline_data *dd, struct request *rq) in deadline_del_rq_rb() argument
86 if (dd->next_rq[data_dir] == rq) in deadline_del_rq_rb()
87 dd->next_rq[data_dir] = deadline_latter_request(rq); in deadline_del_rq_rb()
89 elv_rb_del(deadline_rb_root(dd, rq), rq); in deadline_del_rq_rb()
98 struct deadline_data *dd = q->elevator->elevator_data; in deadline_add_request() local
107 deadline_add_rq_rb(dd, rq); in deadline_add_request()
112 rq->fifo_time = jiffies + dd->fifo_expire[data_dir]; in deadline_add_request()
113 list_add_tail(&rq->queuelist, &dd->fifo_list[data_dir]); in deadline_add_request()
121 struct deadline_data *dd = q->elevator->elevator_data; in deadline_remove_request() local
124 deadline_del_rq_rb(dd, rq); in deadline_remove_request()
130 struct deadline_data *dd = q->elevator->elevator_data; in deadline_merge() local
136 if (dd->front_merges) { in deadline_merge()
139 __rq = elv_rb_find(&dd->sort_list[bio_data_dir(bio)], sector); in deadline_merge()
156 struct deadline_data *dd = q->elevator->elevator_data; in deadline_merged_request() local
162 elv_rb_del(deadline_rb_root(dd, req), req); in deadline_merged_request()
163 deadline_add_rq_rb(dd, req); in deadline_merged_request()
193 deadline_move_to_dispatch(struct deadline_data *dd, struct request *rq) in deadline_move_to_dispatch() argument
211 deadline_move_request(struct deadline_data *dd, struct request *rq) in deadline_move_request() argument
215 dd->next_rq[READ] = NULL; in deadline_move_request()
216 dd->next_rq[WRITE] = NULL; in deadline_move_request()
217 dd->next_rq[data_dir] = deadline_latter_request(rq); in deadline_move_request()
223 deadline_move_to_dispatch(dd, rq); in deadline_move_request()
230 static inline int deadline_check_fifo(struct deadline_data *dd, int ddir) in deadline_check_fifo() argument
232 struct request *rq = rq_entry_fifo(dd->fifo_list[ddir].next); in deadline_check_fifo()
248 deadline_fifo_request(struct deadline_data *dd, int data_dir) in deadline_fifo_request() argument
255 if (list_empty(&dd->fifo_list[data_dir])) in deadline_fifo_request()
258 rq = rq_entry_fifo(dd->fifo_list[data_dir].next); in deadline_fifo_request()
266 list_for_each_entry(rq, &dd->fifo_list[WRITE], queuelist) { in deadline_fifo_request()
279 deadline_next_request(struct deadline_data *dd, int data_dir) in deadline_next_request() argument
286 rq = dd->next_rq[data_dir]; in deadline_next_request()
312 struct deadline_data *dd = q->elevator->elevator_data; in deadline_dispatch_requests() local
313 const int reads = !list_empty(&dd->fifo_list[READ]); in deadline_dispatch_requests()
314 const int writes = !list_empty(&dd->fifo_list[WRITE]); in deadline_dispatch_requests()
321 rq = deadline_next_request(dd, WRITE); in deadline_dispatch_requests()
323 rq = deadline_next_request(dd, READ); in deadline_dispatch_requests()
325 if (rq && dd->batching < dd->fifo_batch) in deadline_dispatch_requests()
335 BUG_ON(RB_EMPTY_ROOT(&dd->sort_list[READ])); in deadline_dispatch_requests()
337 if (deadline_fifo_request(dd, WRITE) && in deadline_dispatch_requests()
338 (dd->starved++ >= dd->writes_starved)) in deadline_dispatch_requests()
352 BUG_ON(RB_EMPTY_ROOT(&dd->sort_list[WRITE])); in deadline_dispatch_requests()
354 dd->starved = 0; in deadline_dispatch_requests()
367 next_rq = deadline_next_request(dd, data_dir); in deadline_dispatch_requests()
368 if (deadline_check_fifo(dd, data_dir) || !next_rq) { in deadline_dispatch_requests()
374 rq = deadline_fifo_request(dd, data_dir); in deadline_dispatch_requests()
390 dd->batching = 0; in deadline_dispatch_requests()
396 dd->batching++; in deadline_dispatch_requests()
397 deadline_move_request(dd, rq); in deadline_dispatch_requests()
414 struct deadline_data *dd = e->elevator_data; in deadline_exit_queue() local
416 BUG_ON(!list_empty(&dd->fifo_list[READ])); in deadline_exit_queue()
417 BUG_ON(!list_empty(&dd->fifo_list[WRITE])); in deadline_exit_queue()
419 kfree(dd); in deadline_exit_queue()
427 struct deadline_data *dd; in deadline_init_queue() local
434 dd = kzalloc_node(sizeof(*dd), GFP_KERNEL, q->node); in deadline_init_queue()
435 if (!dd) { in deadline_init_queue()
439 eq->elevator_data = dd; in deadline_init_queue()
441 INIT_LIST_HEAD(&dd->fifo_list[READ]); in deadline_init_queue()
442 INIT_LIST_HEAD(&dd->fifo_list[WRITE]); in deadline_init_queue()
443 dd->sort_list[READ] = RB_ROOT; in deadline_init_queue()
444 dd->sort_list[WRITE] = RB_ROOT; in deadline_init_queue()
445 dd->fifo_expire[READ] = read_expire; in deadline_init_queue()
446 dd->fifo_expire[WRITE] = write_expire; in deadline_init_queue()
447 dd->writes_starved = writes_starved; in deadline_init_queue()
448 dd->front_merges = 1; in deadline_init_queue()
449 dd->fifo_batch = fifo_batch; in deadline_init_queue()
478 struct deadline_data *dd = e->elevator_data; \
484 SHOW_FUNCTION(deadline_read_expire_show, dd->fifo_expire[READ], 1);
485 SHOW_FUNCTION(deadline_write_expire_show, dd->fifo_expire[WRITE], 1);
486 SHOW_FUNCTION(deadline_writes_starved_show, dd->writes_starved, 0);
487 SHOW_FUNCTION(deadline_front_merges_show, dd->front_merges, 0);
488 SHOW_FUNCTION(deadline_fifo_batch_show, dd->fifo_batch, 0);
494 struct deadline_data *dd = e->elevator_data; \
507 STORE_FUNCTION(deadline_read_expire_store, &dd->fifo_expire[READ], 0, INT_MAX, 1);
508 STORE_FUNCTION(deadline_write_expire_store, &dd->fifo_expire[WRITE], 0, INT_MAX, 1);
509 STORE_FUNCTION(deadline_writes_starved_store, &dd->writes_starved, INT_MIN, INT_MAX, 0);
510 STORE_FUNCTION(deadline_front_merges_store, &dd->front_merges, 0, 1, 0);
511 STORE_FUNCTION(deadline_fifo_batch_store, &dd->fifo_batch, 0, INT_MAX, 0);