Lines Matching refs:dd
57 deadline_rb_root(struct deadline_data *dd, struct request *rq) in deadline_rb_root() argument
59 return &dd->sort_list[rq_data_dir(rq)]; in deadline_rb_root()
77 deadline_add_rq_rb(struct deadline_data *dd, struct request *rq) in deadline_add_rq_rb() argument
79 struct rb_root *root = deadline_rb_root(dd, rq); in deadline_add_rq_rb()
85 deadline_del_rq_rb(struct deadline_data *dd, struct request *rq) in deadline_del_rq_rb() argument
89 if (dd->next_rq[data_dir] == rq) in deadline_del_rq_rb()
90 dd->next_rq[data_dir] = deadline_latter_request(rq); in deadline_del_rq_rb()
92 elv_rb_del(deadline_rb_root(dd, rq), rq); in deadline_del_rq_rb()
101 struct deadline_data *dd = q->elevator->elevator_data; in deadline_add_request() local
104 deadline_add_rq_rb(dd, rq); in deadline_add_request()
109 rq->fifo_time = jiffies + dd->fifo_expire[data_dir]; in deadline_add_request()
110 list_add_tail(&rq->queuelist, &dd->fifo_list[data_dir]); in deadline_add_request()
118 struct deadline_data *dd = q->elevator->elevator_data; in deadline_remove_request() local
121 deadline_del_rq_rb(dd, rq); in deadline_remove_request()
127 struct deadline_data *dd = q->elevator->elevator_data; in deadline_merge() local
134 if (dd->front_merges) { in deadline_merge()
137 __rq = elv_rb_find(&dd->sort_list[bio_data_dir(bio)], sector); in deadline_merge()
157 struct deadline_data *dd = q->elevator->elevator_data; in deadline_merged_request() local
163 elv_rb_del(deadline_rb_root(dd, req), req); in deadline_merged_request()
164 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
205 deadline_move_request(struct deadline_data *dd, struct request *rq) in deadline_move_request() argument
209 dd->next_rq[READ] = NULL; in deadline_move_request()
210 dd->next_rq[WRITE] = NULL; in deadline_move_request()
211 dd->next_rq[data_dir] = deadline_latter_request(rq); in deadline_move_request()
213 dd->last_sector = rq_end_sector(rq); in deadline_move_request()
219 deadline_move_to_dispatch(dd, rq); in deadline_move_request()
226 static inline int deadline_check_fifo(struct deadline_data *dd, int ddir) in deadline_check_fifo() argument
228 struct request *rq = rq_entry_fifo(dd->fifo_list[ddir].next); in deadline_check_fifo()
245 struct deadline_data *dd = q->elevator->elevator_data; in deadline_dispatch_requests() local
246 const int reads = !list_empty(&dd->fifo_list[READ]); in deadline_dispatch_requests()
247 const int writes = !list_empty(&dd->fifo_list[WRITE]); in deadline_dispatch_requests()
254 if (dd->next_rq[WRITE]) in deadline_dispatch_requests()
255 rq = dd->next_rq[WRITE]; in deadline_dispatch_requests()
257 rq = dd->next_rq[READ]; in deadline_dispatch_requests()
259 if (rq && dd->batching < dd->fifo_batch) in deadline_dispatch_requests()
269 BUG_ON(RB_EMPTY_ROOT(&dd->sort_list[READ])); in deadline_dispatch_requests()
271 if (writes && (dd->starved++ >= dd->writes_starved)) in deadline_dispatch_requests()
285 BUG_ON(RB_EMPTY_ROOT(&dd->sort_list[WRITE])); in deadline_dispatch_requests()
287 dd->starved = 0; in deadline_dispatch_requests()
300 if (deadline_check_fifo(dd, data_dir) || !dd->next_rq[data_dir]) { in deadline_dispatch_requests()
306 rq = rq_entry_fifo(dd->fifo_list[data_dir].next); in deadline_dispatch_requests()
312 rq = dd->next_rq[data_dir]; in deadline_dispatch_requests()
315 dd->batching = 0; in deadline_dispatch_requests()
321 dd->batching++; in deadline_dispatch_requests()
322 deadline_move_request(dd, rq); in deadline_dispatch_requests()
329 struct deadline_data *dd = e->elevator_data; in deadline_exit_queue() local
331 BUG_ON(!list_empty(&dd->fifo_list[READ])); in deadline_exit_queue()
332 BUG_ON(!list_empty(&dd->fifo_list[WRITE])); in deadline_exit_queue()
334 kfree(dd); in deadline_exit_queue()
342 struct deadline_data *dd; in deadline_init_queue() local
349 dd = kzalloc_node(sizeof(*dd), GFP_KERNEL, q->node); in deadline_init_queue()
350 if (!dd) { in deadline_init_queue()
354 eq->elevator_data = dd; in deadline_init_queue()
356 INIT_LIST_HEAD(&dd->fifo_list[READ]); in deadline_init_queue()
357 INIT_LIST_HEAD(&dd->fifo_list[WRITE]); in deadline_init_queue()
358 dd->sort_list[READ] = RB_ROOT; in deadline_init_queue()
359 dd->sort_list[WRITE] = RB_ROOT; in deadline_init_queue()
360 dd->fifo_expire[READ] = read_expire; in deadline_init_queue()
361 dd->fifo_expire[WRITE] = write_expire; in deadline_init_queue()
362 dd->writes_starved = writes_starved; in deadline_init_queue()
363 dd->front_merges = 1; in deadline_init_queue()
364 dd->fifo_batch = fifo_batch; in deadline_init_queue()
394 struct deadline_data *dd = e->elevator_data; \
400 SHOW_FUNCTION(deadline_read_expire_show, dd->fifo_expire[READ], 1);
401 SHOW_FUNCTION(deadline_write_expire_show, dd->fifo_expire[WRITE], 1);
402 SHOW_FUNCTION(deadline_writes_starved_show, dd->writes_starved, 0);
403 SHOW_FUNCTION(deadline_front_merges_show, dd->front_merges, 0);
404 SHOW_FUNCTION(deadline_fifo_batch_show, dd->fifo_batch, 0);
410 struct deadline_data *dd = e->elevator_data; \
423 STORE_FUNCTION(deadline_read_expire_store, &dd->fifo_expire[READ], 0, INT_MAX, 1);
424 STORE_FUNCTION(deadline_write_expire_store, &dd->fifo_expire[WRITE], 0, INT_MAX, 1);
425 STORE_FUNCTION(deadline_writes_starved_store, &dd->writes_starved, INT_MIN, INT_MAX, 0);
426 STORE_FUNCTION(deadline_front_merges_store, &dd->front_merges, 0, 1, 0);
427 STORE_FUNCTION(deadline_fifo_batch_store, &dd->fifo_batch, 0, INT_MAX, 0);