blkcg: use @pol instead of @plid in update_root_blkg_pd() and blkcg_print_blkgs()
[linux-2.6-block.git] / block / cfq-iosched.c
1 /*
2  *  CFQ, or complete fairness queueing, disk scheduler.
3  *
4  *  Based on ideas from a previously unfinished io
5  *  scheduler (round robin per-process disk scheduling) and Andrea Arcangeli.
6  *
7  *  Copyright (C) 2003 Jens Axboe <axboe@kernel.dk>
8  */
9 #include <linux/module.h>
10 #include <linux/slab.h>
11 #include <linux/blkdev.h>
12 #include <linux/elevator.h>
13 #include <linux/jiffies.h>
14 #include <linux/rbtree.h>
15 #include <linux/ioprio.h>
16 #include <linux/blktrace_api.h>
17 #include "blk.h"
18 #include "blk-cgroup.h"
19
20 static struct blkio_policy_type blkio_policy_cfq __maybe_unused;
21
22 /*
23  * tunables
24  */
25 /* max queue in one round of service */
26 static const int cfq_quantum = 8;
27 static const int cfq_fifo_expire[2] = { HZ / 4, HZ / 8 };
28 /* maximum backwards seek, in KiB */
29 static const int cfq_back_max = 16 * 1024;
30 /* penalty of a backwards seek */
31 static const int cfq_back_penalty = 2;
32 static const int cfq_slice_sync = HZ / 10;
33 static int cfq_slice_async = HZ / 25;
34 static const int cfq_slice_async_rq = 2;
35 static int cfq_slice_idle = HZ / 125;
36 static int cfq_group_idle = HZ / 125;
37 static const int cfq_target_latency = HZ * 3/10; /* 300 ms */
38 static const int cfq_hist_divisor = 4;
39
40 /*
41  * offset from end of service tree
42  */
43 #define CFQ_IDLE_DELAY          (HZ / 5)
44
45 /*
46  * below this threshold, we consider thinktime immediate
47  */
48 #define CFQ_MIN_TT              (2)
49
50 #define CFQ_SLICE_SCALE         (5)
51 #define CFQ_HW_QUEUE_MIN        (5)
52 #define CFQ_SERVICE_SHIFT       12
53
54 #define CFQQ_SEEK_THR           (sector_t)(8 * 100)
55 #define CFQQ_CLOSE_THR          (sector_t)(8 * 1024)
56 #define CFQQ_SECT_THR_NONROT    (sector_t)(2 * 32)
57 #define CFQQ_SEEKY(cfqq)        (hweight32(cfqq->seek_history) > 32/8)
58
59 #define RQ_CIC(rq)              icq_to_cic((rq)->elv.icq)
60 #define RQ_CFQQ(rq)             (struct cfq_queue *) ((rq)->elv.priv[0])
61 #define RQ_CFQG(rq)             (struct cfq_group *) ((rq)->elv.priv[1])
62
63 static struct kmem_cache *cfq_pool;
64
65 #define CFQ_PRIO_LISTS          IOPRIO_BE_NR
66 #define cfq_class_idle(cfqq)    ((cfqq)->ioprio_class == IOPRIO_CLASS_IDLE)
67 #define cfq_class_rt(cfqq)      ((cfqq)->ioprio_class == IOPRIO_CLASS_RT)
68
69 #define sample_valid(samples)   ((samples) > 80)
70 #define rb_entry_cfqg(node)     rb_entry((node), struct cfq_group, rb_node)
71
72 struct cfq_ttime {
73         unsigned long last_end_request;
74
75         unsigned long ttime_total;
76         unsigned long ttime_samples;
77         unsigned long ttime_mean;
78 };
79
80 /*
81  * Most of our rbtree usage is for sorting with min extraction, so
82  * if we cache the leftmost node we don't have to walk down the tree
83  * to find it. Idea borrowed from Ingo Molnars CFS scheduler. We should
84  * move this into the elevator for the rq sorting as well.
85  */
86 struct cfq_rb_root {
87         struct rb_root rb;
88         struct rb_node *left;
89         unsigned count;
90         unsigned total_weight;
91         u64 min_vdisktime;
92         struct cfq_ttime ttime;
93 };
94 #define CFQ_RB_ROOT     (struct cfq_rb_root) { .rb = RB_ROOT, \
95                         .ttime = {.last_end_request = jiffies,},}
96
97 /*
98  * Per process-grouping structure
99  */
100 struct cfq_queue {
101         /* reference count */
102         int ref;
103         /* various state flags, see below */
104         unsigned int flags;
105         /* parent cfq_data */
106         struct cfq_data *cfqd;
107         /* service_tree member */
108         struct rb_node rb_node;
109         /* service_tree key */
110         unsigned long rb_key;
111         /* prio tree member */
112         struct rb_node p_node;
113         /* prio tree root we belong to, if any */
114         struct rb_root *p_root;
115         /* sorted list of pending requests */
116         struct rb_root sort_list;
117         /* if fifo isn't expired, next request to serve */
118         struct request *next_rq;
119         /* requests queued in sort_list */
120         int queued[2];
121         /* currently allocated requests */
122         int allocated[2];
123         /* fifo list of requests in sort_list */
124         struct list_head fifo;
125
126         /* time when queue got scheduled in to dispatch first request. */
127         unsigned long dispatch_start;
128         unsigned int allocated_slice;
129         unsigned int slice_dispatch;
130         /* time when first request from queue completed and slice started. */
131         unsigned long slice_start;
132         unsigned long slice_end;
133         long slice_resid;
134
135         /* pending priority requests */
136         int prio_pending;
137         /* number of requests that are on the dispatch list or inside driver */
138         int dispatched;
139
140         /* io prio of this group */
141         unsigned short ioprio, org_ioprio;
142         unsigned short ioprio_class;
143
144         pid_t pid;
145
146         u32 seek_history;
147         sector_t last_request_pos;
148
149         struct cfq_rb_root *service_tree;
150         struct cfq_queue *new_cfqq;
151         struct cfq_group *cfqg;
152         /* Number of sectors dispatched from queue in single dispatch round */
153         unsigned long nr_sectors;
154 };
155
156 /*
157  * First index in the service_trees.
158  * IDLE is handled separately, so it has negative index
159  */
160 enum wl_prio_t {
161         BE_WORKLOAD = 0,
162         RT_WORKLOAD = 1,
163         IDLE_WORKLOAD = 2,
164         CFQ_PRIO_NR,
165 };
166
167 /*
168  * Second index in the service_trees.
169  */
170 enum wl_type_t {
171         ASYNC_WORKLOAD = 0,
172         SYNC_NOIDLE_WORKLOAD = 1,
173         SYNC_WORKLOAD = 2
174 };
175
176 struct cfqg_stats {
177 #ifdef CONFIG_CFQ_GROUP_IOSCHED
178         /* total bytes transferred */
179         struct blkg_rwstat              service_bytes;
180         /* total IOs serviced, post merge */
181         struct blkg_rwstat              serviced;
182         /* number of ios merged */
183         struct blkg_rwstat              merged;
184         /* total time spent on device in ns, may not be accurate w/ queueing */
185         struct blkg_rwstat              service_time;
186         /* total time spent waiting in scheduler queue in ns */
187         struct blkg_rwstat              wait_time;
188         /* number of IOs queued up */
189         struct blkg_rwstat              queued;
190         /* total sectors transferred */
191         struct blkg_stat                sectors;
192         /* total disk time and nr sectors dispatched by this group */
193         struct blkg_stat                time;
194 #ifdef CONFIG_DEBUG_BLK_CGROUP
195         /* time not charged to this cgroup */
196         struct blkg_stat                unaccounted_time;
197         /* sum of number of ios queued across all samples */
198         struct blkg_stat                avg_queue_size_sum;
199         /* count of samples taken for average */
200         struct blkg_stat                avg_queue_size_samples;
201         /* how many times this group has been removed from service tree */
202         struct blkg_stat                dequeue;
203         /* total time spent waiting for it to be assigned a timeslice. */
204         struct blkg_stat                group_wait_time;
205         /* time spent idling for this blkio_group */
206         struct blkg_stat                idle_time;
207         /* total time with empty current active q with other requests queued */
208         struct blkg_stat                empty_time;
209         /* fields after this shouldn't be cleared on stat reset */
210         uint64_t                        start_group_wait_time;
211         uint64_t                        start_idle_time;
212         uint64_t                        start_empty_time;
213         uint16_t                        flags;
214 #endif  /* CONFIG_DEBUG_BLK_CGROUP */
215 #endif  /* CONFIG_CFQ_GROUP_IOSCHED */
216 };
217
218 /* This is per cgroup per device grouping structure */
219 struct cfq_group {
220         /* group service_tree member */
221         struct rb_node rb_node;
222
223         /* group service_tree key */
224         u64 vdisktime;
225         unsigned int weight;
226         unsigned int new_weight;
227         unsigned int dev_weight;
228
229         /* number of cfqq currently on this group */
230         int nr_cfqq;
231
232         /*
233          * Per group busy queues average. Useful for workload slice calc. We
234          * create the array for each prio class but at run time it is used
235          * only for RT and BE class and slot for IDLE class remains unused.
236          * This is primarily done to avoid confusion and a gcc warning.
237          */
238         unsigned int busy_queues_avg[CFQ_PRIO_NR];
239         /*
240          * rr lists of queues with requests. We maintain service trees for
241          * RT and BE classes. These trees are subdivided in subclasses
242          * of SYNC, SYNC_NOIDLE and ASYNC based on workload type. For IDLE
243          * class there is no subclassification and all the cfq queues go on
244          * a single tree service_tree_idle.
245          * Counts are embedded in the cfq_rb_root
246          */
247         struct cfq_rb_root service_trees[2][3];
248         struct cfq_rb_root service_tree_idle;
249
250         unsigned long saved_workload_slice;
251         enum wl_type_t saved_workload;
252         enum wl_prio_t saved_serving_prio;
253
254         /* number of requests that are on the dispatch list or inside driver */
255         int dispatched;
256         struct cfq_ttime ttime;
257         struct cfqg_stats stats;
258 };
259
260 struct cfq_io_cq {
261         struct io_cq            icq;            /* must be the first member */
262         struct cfq_queue        *cfqq[2];
263         struct cfq_ttime        ttime;
264         int                     ioprio;         /* the current ioprio */
265 #ifdef CONFIG_CFQ_GROUP_IOSCHED
266         uint64_t                blkcg_id;       /* the current blkcg ID */
267 #endif
268 };
269
270 /*
271  * Per block device queue structure
272  */
273 struct cfq_data {
274         struct request_queue *queue;
275         /* Root service tree for cfq_groups */
276         struct cfq_rb_root grp_service_tree;
277         struct cfq_group *root_group;
278
279         /*
280          * The priority currently being served
281          */
282         enum wl_prio_t serving_prio;
283         enum wl_type_t serving_type;
284         unsigned long workload_expires;
285         struct cfq_group *serving_group;
286
287         /*
288          * Each priority tree is sorted by next_request position.  These
289          * trees are used when determining if two or more queues are
290          * interleaving requests (see cfq_close_cooperator).
291          */
292         struct rb_root prio_trees[CFQ_PRIO_LISTS];
293
294         unsigned int busy_queues;
295         unsigned int busy_sync_queues;
296
297         int rq_in_driver;
298         int rq_in_flight[2];
299
300         /*
301          * queue-depth detection
302          */
303         int rq_queued;
304         int hw_tag;
305         /*
306          * hw_tag can be
307          * -1 => indeterminate, (cfq will behave as if NCQ is present, to allow better detection)
308          *  1 => NCQ is present (hw_tag_est_depth is the estimated max depth)
309          *  0 => no NCQ
310          */
311         int hw_tag_est_depth;
312         unsigned int hw_tag_samples;
313
314         /*
315          * idle window management
316          */
317         struct timer_list idle_slice_timer;
318         struct work_struct unplug_work;
319
320         struct cfq_queue *active_queue;
321         struct cfq_io_cq *active_cic;
322
323         /*
324          * async queue for each priority case
325          */
326         struct cfq_queue *async_cfqq[2][IOPRIO_BE_NR];
327         struct cfq_queue *async_idle_cfqq;
328
329         sector_t last_position;
330
331         /*
332          * tunables, see top of file
333          */
334         unsigned int cfq_quantum;
335         unsigned int cfq_fifo_expire[2];
336         unsigned int cfq_back_penalty;
337         unsigned int cfq_back_max;
338         unsigned int cfq_slice[2];
339         unsigned int cfq_slice_async_rq;
340         unsigned int cfq_slice_idle;
341         unsigned int cfq_group_idle;
342         unsigned int cfq_latency;
343
344         /*
345          * Fallback dummy cfqq for extreme OOM conditions
346          */
347         struct cfq_queue oom_cfqq;
348
349         unsigned long last_delayed_sync;
350 };
351
352 static struct cfq_group *cfq_get_next_cfqg(struct cfq_data *cfqd);
353
354 static struct cfq_rb_root *service_tree_for(struct cfq_group *cfqg,
355                                             enum wl_prio_t prio,
356                                             enum wl_type_t type)
357 {
358         if (!cfqg)
359                 return NULL;
360
361         if (prio == IDLE_WORKLOAD)
362                 return &cfqg->service_tree_idle;
363
364         return &cfqg->service_trees[prio][type];
365 }
366
367 enum cfqq_state_flags {
368         CFQ_CFQQ_FLAG_on_rr = 0,        /* on round-robin busy list */
369         CFQ_CFQQ_FLAG_wait_request,     /* waiting for a request */
370         CFQ_CFQQ_FLAG_must_dispatch,    /* must be allowed a dispatch */
371         CFQ_CFQQ_FLAG_must_alloc_slice, /* per-slice must_alloc flag */
372         CFQ_CFQQ_FLAG_fifo_expire,      /* FIFO checked in this slice */
373         CFQ_CFQQ_FLAG_idle_window,      /* slice idling enabled */
374         CFQ_CFQQ_FLAG_prio_changed,     /* task priority has changed */
375         CFQ_CFQQ_FLAG_slice_new,        /* no requests dispatched in slice */
376         CFQ_CFQQ_FLAG_sync,             /* synchronous queue */
377         CFQ_CFQQ_FLAG_coop,             /* cfqq is shared */
378         CFQ_CFQQ_FLAG_split_coop,       /* shared cfqq will be splitted */
379         CFQ_CFQQ_FLAG_deep,             /* sync cfqq experienced large depth */
380         CFQ_CFQQ_FLAG_wait_busy,        /* Waiting for next request */
381 };
382
383 #define CFQ_CFQQ_FNS(name)                                              \
384 static inline void cfq_mark_cfqq_##name(struct cfq_queue *cfqq)         \
385 {                                                                       \
386         (cfqq)->flags |= (1 << CFQ_CFQQ_FLAG_##name);                   \
387 }                                                                       \
388 static inline void cfq_clear_cfqq_##name(struct cfq_queue *cfqq)        \
389 {                                                                       \
390         (cfqq)->flags &= ~(1 << CFQ_CFQQ_FLAG_##name);                  \
391 }                                                                       \
392 static inline int cfq_cfqq_##name(const struct cfq_queue *cfqq)         \
393 {                                                                       \
394         return ((cfqq)->flags & (1 << CFQ_CFQQ_FLAG_##name)) != 0;      \
395 }
396
397 CFQ_CFQQ_FNS(on_rr);
398 CFQ_CFQQ_FNS(wait_request);
399 CFQ_CFQQ_FNS(must_dispatch);
400 CFQ_CFQQ_FNS(must_alloc_slice);
401 CFQ_CFQQ_FNS(fifo_expire);
402 CFQ_CFQQ_FNS(idle_window);
403 CFQ_CFQQ_FNS(prio_changed);
404 CFQ_CFQQ_FNS(slice_new);
405 CFQ_CFQQ_FNS(sync);
406 CFQ_CFQQ_FNS(coop);
407 CFQ_CFQQ_FNS(split_coop);
408 CFQ_CFQQ_FNS(deep);
409 CFQ_CFQQ_FNS(wait_busy);
410 #undef CFQ_CFQQ_FNS
411
412 #if defined(CONFIG_CFQ_GROUP_IOSCHED) && defined(CONFIG_DEBUG_BLK_CGROUP)
413
414 /* cfqg stats flags */
415 enum cfqg_stats_flags {
416         CFQG_stats_waiting = 0,
417         CFQG_stats_idling,
418         CFQG_stats_empty,
419 };
420
421 #define CFQG_FLAG_FNS(name)                                             \
422 static inline void cfqg_stats_mark_##name(struct cfqg_stats *stats)     \
423 {                                                                       \
424         stats->flags |= (1 << CFQG_stats_##name);                       \
425 }                                                                       \
426 static inline void cfqg_stats_clear_##name(struct cfqg_stats *stats)    \
427 {                                                                       \
428         stats->flags &= ~(1 << CFQG_stats_##name);                      \
429 }                                                                       \
430 static inline int cfqg_stats_##name(struct cfqg_stats *stats)           \
431 {                                                                       \
432         return (stats->flags & (1 << CFQG_stats_##name)) != 0;          \
433 }                                                                       \
434
435 CFQG_FLAG_FNS(waiting)
436 CFQG_FLAG_FNS(idling)
437 CFQG_FLAG_FNS(empty)
438 #undef CFQG_FLAG_FNS
439
440 /* This should be called with the queue_lock held. */
441 static void cfqg_stats_update_group_wait_time(struct cfqg_stats *stats)
442 {
443         unsigned long long now;
444
445         if (!cfqg_stats_waiting(stats))
446                 return;
447
448         now = sched_clock();
449         if (time_after64(now, stats->start_group_wait_time))
450                 blkg_stat_add(&stats->group_wait_time,
451                               now - stats->start_group_wait_time);
452         cfqg_stats_clear_waiting(stats);
453 }
454
455 /* This should be called with the queue_lock held. */
456 static void cfqg_stats_set_start_group_wait_time(struct cfq_group *cfqg,
457                                                  struct cfq_group *curr_cfqg)
458 {
459         struct cfqg_stats *stats = &cfqg->stats;
460
461         if (cfqg_stats_waiting(stats))
462                 return;
463         if (cfqg == curr_cfqg)
464                 return;
465         stats->start_group_wait_time = sched_clock();
466         cfqg_stats_mark_waiting(stats);
467 }
468
469 /* This should be called with the queue_lock held. */
470 static void cfqg_stats_end_empty_time(struct cfqg_stats *stats)
471 {
472         unsigned long long now;
473
474         if (!cfqg_stats_empty(stats))
475                 return;
476
477         now = sched_clock();
478         if (time_after64(now, stats->start_empty_time))
479                 blkg_stat_add(&stats->empty_time,
480                               now - stats->start_empty_time);
481         cfqg_stats_clear_empty(stats);
482 }
483
484 static void cfqg_stats_update_dequeue(struct cfq_group *cfqg)
485 {
486         blkg_stat_add(&cfqg->stats.dequeue, 1);
487 }
488
489 static void cfqg_stats_set_start_empty_time(struct cfq_group *cfqg)
490 {
491         struct cfqg_stats *stats = &cfqg->stats;
492
493         if (blkg_rwstat_sum(&stats->queued))
494                 return;
495
496         /*
497          * group is already marked empty. This can happen if cfqq got new
498          * request in parent group and moved to this group while being added
499          * to service tree. Just ignore the event and move on.
500          */
501         if (cfqg_stats_empty(stats))
502                 return;
503
504         stats->start_empty_time = sched_clock();
505         cfqg_stats_mark_empty(stats);
506 }
507
508 static void cfqg_stats_update_idle_time(struct cfq_group *cfqg)
509 {
510         struct cfqg_stats *stats = &cfqg->stats;
511
512         if (cfqg_stats_idling(stats)) {
513                 unsigned long long now = sched_clock();
514
515                 if (time_after64(now, stats->start_idle_time))
516                         blkg_stat_add(&stats->idle_time,
517                                       now - stats->start_idle_time);
518                 cfqg_stats_clear_idling(stats);
519         }
520 }
521
522 static void cfqg_stats_set_start_idle_time(struct cfq_group *cfqg)
523 {
524         struct cfqg_stats *stats = &cfqg->stats;
525
526         BUG_ON(cfqg_stats_idling(stats));
527
528         stats->start_idle_time = sched_clock();
529         cfqg_stats_mark_idling(stats);
530 }
531
532 static void cfqg_stats_update_avg_queue_size(struct cfq_group *cfqg)
533 {
534         struct cfqg_stats *stats = &cfqg->stats;
535
536         blkg_stat_add(&stats->avg_queue_size_sum,
537                       blkg_rwstat_sum(&stats->queued));
538         blkg_stat_add(&stats->avg_queue_size_samples, 1);
539         cfqg_stats_update_group_wait_time(stats);
540 }
541
542 #else   /* CONFIG_CFQ_GROUP_IOSCHED && CONFIG_DEBUG_BLK_CGROUP */
543
544 static inline void cfqg_stats_set_start_group_wait_time(struct cfq_group *cfqg, struct cfq_group *curr_cfqg) { }
545 static inline void cfqg_stats_end_empty_time(struct cfqg_stats *stats) { }
546 static inline void cfqg_stats_update_dequeue(struct cfq_group *cfqg) { }
547 static inline void cfqg_stats_set_start_empty_time(struct cfq_group *cfqg) { }
548 static inline void cfqg_stats_update_idle_time(struct cfq_group *cfqg) { }
549 static inline void cfqg_stats_set_start_idle_time(struct cfq_group *cfqg) { }
550 static inline void cfqg_stats_update_avg_queue_size(struct cfq_group *cfqg) { }
551
552 #endif  /* CONFIG_CFQ_GROUP_IOSCHED && CONFIG_DEBUG_BLK_CGROUP */
553
554 #ifdef CONFIG_CFQ_GROUP_IOSCHED
555
556 static inline struct cfq_group *blkg_to_cfqg(struct blkio_group *blkg)
557 {
558         return blkg_to_pdata(blkg, &blkio_policy_cfq);
559 }
560
561 static inline struct blkio_group *cfqg_to_blkg(struct cfq_group *cfqg)
562 {
563         return pdata_to_blkg(cfqg);
564 }
565
566 static inline void cfqg_get(struct cfq_group *cfqg)
567 {
568         return blkg_get(cfqg_to_blkg(cfqg));
569 }
570
571 static inline void cfqg_put(struct cfq_group *cfqg)
572 {
573         return blkg_put(cfqg_to_blkg(cfqg));
574 }
575
576 #define cfq_log_cfqq(cfqd, cfqq, fmt, args...)  \
577         blk_add_trace_msg((cfqd)->queue, "cfq%d%c %s " fmt, (cfqq)->pid, \
578                         cfq_cfqq_sync((cfqq)) ? 'S' : 'A', \
579                         blkg_path(cfqg_to_blkg((cfqq)->cfqg)), ##args)
580
581 #define cfq_log_cfqg(cfqd, cfqg, fmt, args...)                          \
582         blk_add_trace_msg((cfqd)->queue, "%s " fmt,                     \
583                         blkg_path(cfqg_to_blkg((cfqg))), ##args)        \
584
585 static inline void cfqg_stats_update_io_add(struct cfq_group *cfqg,
586                                             struct cfq_group *curr_cfqg, int rw)
587 {
588         blkg_rwstat_add(&cfqg->stats.queued, rw, 1);
589         cfqg_stats_end_empty_time(&cfqg->stats);
590         cfqg_stats_set_start_group_wait_time(cfqg, curr_cfqg);
591 }
592
593 static inline void cfqg_stats_update_timeslice_used(struct cfq_group *cfqg,
594                         unsigned long time, unsigned long unaccounted_time)
595 {
596         blkg_stat_add(&cfqg->stats.time, time);
597 #ifdef CONFIG_DEBUG_BLK_CGROUP
598         blkg_stat_add(&cfqg->stats.unaccounted_time, unaccounted_time);
599 #endif
600 }
601
602 static inline void cfqg_stats_update_io_remove(struct cfq_group *cfqg, int rw)
603 {
604         blkg_rwstat_add(&cfqg->stats.queued, rw, -1);
605 }
606
607 static inline void cfqg_stats_update_io_merged(struct cfq_group *cfqg, int rw)
608 {
609         blkg_rwstat_add(&cfqg->stats.merged, rw, 1);
610 }
611
612 static inline void cfqg_stats_update_dispatch(struct cfq_group *cfqg,
613                                               uint64_t bytes, int rw)
614 {
615         blkg_stat_add(&cfqg->stats.sectors, bytes >> 9);
616         blkg_rwstat_add(&cfqg->stats.serviced, rw, 1);
617         blkg_rwstat_add(&cfqg->stats.service_bytes, rw, bytes);
618 }
619
620 static inline void cfqg_stats_update_completion(struct cfq_group *cfqg,
621                         uint64_t start_time, uint64_t io_start_time, int rw)
622 {
623         struct cfqg_stats *stats = &cfqg->stats;
624         unsigned long long now = sched_clock();
625
626         if (time_after64(now, io_start_time))
627                 blkg_rwstat_add(&stats->service_time, rw, now - io_start_time);
628         if (time_after64(io_start_time, start_time))
629                 blkg_rwstat_add(&stats->wait_time, rw,
630                                 io_start_time - start_time);
631 }
632
633 static void cfqg_stats_reset(struct blkio_group *blkg)
634 {
635         struct cfq_group *cfqg = blkg_to_cfqg(blkg);
636         struct cfqg_stats *stats = &cfqg->stats;
637
638         /* queued stats shouldn't be cleared */
639         blkg_rwstat_reset(&stats->service_bytes);
640         blkg_rwstat_reset(&stats->serviced);
641         blkg_rwstat_reset(&stats->merged);
642         blkg_rwstat_reset(&stats->service_time);
643         blkg_rwstat_reset(&stats->wait_time);
644         blkg_stat_reset(&stats->time);
645 #ifdef CONFIG_DEBUG_BLK_CGROUP
646         blkg_stat_reset(&stats->unaccounted_time);
647         blkg_stat_reset(&stats->avg_queue_size_sum);
648         blkg_stat_reset(&stats->avg_queue_size_samples);
649         blkg_stat_reset(&stats->dequeue);
650         blkg_stat_reset(&stats->group_wait_time);
651         blkg_stat_reset(&stats->idle_time);
652         blkg_stat_reset(&stats->empty_time);
653 #endif
654 }
655
656 #else   /* CONFIG_CFQ_GROUP_IOSCHED */
657
658 static inline struct cfq_group *blkg_to_cfqg(struct blkio_group *blkg) { return NULL; }
659 static inline struct blkio_group *cfqg_to_blkg(struct cfq_group *cfqg) { return NULL; }
660 static inline void cfqg_get(struct cfq_group *cfqg) { }
661 static inline void cfqg_put(struct cfq_group *cfqg) { }
662
663 #define cfq_log_cfqq(cfqd, cfqq, fmt, args...)  \
664         blk_add_trace_msg((cfqd)->queue, "cfq%d " fmt, (cfqq)->pid, ##args)
665 #define cfq_log_cfqg(cfqd, cfqg, fmt, args...)          do {} while (0)
666
667 static inline void cfqg_stats_update_io_add(struct cfq_group *cfqg,
668                         struct cfq_group *curr_cfqg, int rw) { }
669 static inline void cfqg_stats_update_timeslice_used(struct cfq_group *cfqg,
670                         unsigned long time, unsigned long unaccounted_time) { }
671 static inline void cfqg_stats_update_io_remove(struct cfq_group *cfqg, int rw) { }
672 static inline void cfqg_stats_update_io_merged(struct cfq_group *cfqg, int rw) { }
673 static inline void cfqg_stats_update_dispatch(struct cfq_group *cfqg,
674                                               uint64_t bytes, int rw) { }
675 static inline void cfqg_stats_update_completion(struct cfq_group *cfqg,
676                         uint64_t start_time, uint64_t io_start_time, int rw) { }
677
678 #endif  /* CONFIG_CFQ_GROUP_IOSCHED */
679
680 #define cfq_log(cfqd, fmt, args...)     \
681         blk_add_trace_msg((cfqd)->queue, "cfq " fmt, ##args)
682
683 /* Traverses through cfq group service trees */
684 #define for_each_cfqg_st(cfqg, i, j, st) \
685         for (i = 0; i <= IDLE_WORKLOAD; i++) \
686                 for (j = 0, st = i < IDLE_WORKLOAD ? &cfqg->service_trees[i][j]\
687                         : &cfqg->service_tree_idle; \
688                         (i < IDLE_WORKLOAD && j <= SYNC_WORKLOAD) || \
689                         (i == IDLE_WORKLOAD && j == 0); \
690                         j++, st = i < IDLE_WORKLOAD ? \
691                         &cfqg->service_trees[i][j]: NULL) \
692
693 static inline bool cfq_io_thinktime_big(struct cfq_data *cfqd,
694         struct cfq_ttime *ttime, bool group_idle)
695 {
696         unsigned long slice;
697         if (!sample_valid(ttime->ttime_samples))
698                 return false;
699         if (group_idle)
700                 slice = cfqd->cfq_group_idle;
701         else
702                 slice = cfqd->cfq_slice_idle;
703         return ttime->ttime_mean > slice;
704 }
705
706 static inline bool iops_mode(struct cfq_data *cfqd)
707 {
708         /*
709          * If we are not idling on queues and it is a NCQ drive, parallel
710          * execution of requests is on and measuring time is not possible
711          * in most of the cases until and unless we drive shallower queue
712          * depths and that becomes a performance bottleneck. In such cases
713          * switch to start providing fairness in terms of number of IOs.
714          */
715         if (!cfqd->cfq_slice_idle && cfqd->hw_tag)
716                 return true;
717         else
718                 return false;
719 }
720
721 static inline enum wl_prio_t cfqq_prio(struct cfq_queue *cfqq)
722 {
723         if (cfq_class_idle(cfqq))
724                 return IDLE_WORKLOAD;
725         if (cfq_class_rt(cfqq))
726                 return RT_WORKLOAD;
727         return BE_WORKLOAD;
728 }
729
730
731 static enum wl_type_t cfqq_type(struct cfq_queue *cfqq)
732 {
733         if (!cfq_cfqq_sync(cfqq))
734                 return ASYNC_WORKLOAD;
735         if (!cfq_cfqq_idle_window(cfqq))
736                 return SYNC_NOIDLE_WORKLOAD;
737         return SYNC_WORKLOAD;
738 }
739
740 static inline int cfq_group_busy_queues_wl(enum wl_prio_t wl,
741                                         struct cfq_data *cfqd,
742                                         struct cfq_group *cfqg)
743 {
744         if (wl == IDLE_WORKLOAD)
745                 return cfqg->service_tree_idle.count;
746
747         return cfqg->service_trees[wl][ASYNC_WORKLOAD].count
748                 + cfqg->service_trees[wl][SYNC_NOIDLE_WORKLOAD].count
749                 + cfqg->service_trees[wl][SYNC_WORKLOAD].count;
750 }
751
752 static inline int cfqg_busy_async_queues(struct cfq_data *cfqd,
753                                         struct cfq_group *cfqg)
754 {
755         return cfqg->service_trees[RT_WORKLOAD][ASYNC_WORKLOAD].count
756                 + cfqg->service_trees[BE_WORKLOAD][ASYNC_WORKLOAD].count;
757 }
758
759 static void cfq_dispatch_insert(struct request_queue *, struct request *);
760 static struct cfq_queue *cfq_get_queue(struct cfq_data *cfqd, bool is_sync,
761                                        struct cfq_io_cq *cic, struct bio *bio,
762                                        gfp_t gfp_mask);
763
764 static inline struct cfq_io_cq *icq_to_cic(struct io_cq *icq)
765 {
766         /* cic->icq is the first member, %NULL will convert to %NULL */
767         return container_of(icq, struct cfq_io_cq, icq);
768 }
769
770 static inline struct cfq_io_cq *cfq_cic_lookup(struct cfq_data *cfqd,
771                                                struct io_context *ioc)
772 {
773         if (ioc)
774                 return icq_to_cic(ioc_lookup_icq(ioc, cfqd->queue));
775         return NULL;
776 }
777
778 static inline struct cfq_queue *cic_to_cfqq(struct cfq_io_cq *cic, bool is_sync)
779 {
780         return cic->cfqq[is_sync];
781 }
782
783 static inline void cic_set_cfqq(struct cfq_io_cq *cic, struct cfq_queue *cfqq,
784                                 bool is_sync)
785 {
786         cic->cfqq[is_sync] = cfqq;
787 }
788
789 static inline struct cfq_data *cic_to_cfqd(struct cfq_io_cq *cic)
790 {
791         return cic->icq.q->elevator->elevator_data;
792 }
793
794 /*
795  * We regard a request as SYNC, if it's either a read or has the SYNC bit
796  * set (in which case it could also be direct WRITE).
797  */
798 static inline bool cfq_bio_sync(struct bio *bio)
799 {
800         return bio_data_dir(bio) == READ || (bio->bi_rw & REQ_SYNC);
801 }
802
803 /*
804  * scheduler run of queue, if there are requests pending and no one in the
805  * driver that will restart queueing
806  */
807 static inline void cfq_schedule_dispatch(struct cfq_data *cfqd)
808 {
809         if (cfqd->busy_queues) {
810                 cfq_log(cfqd, "schedule dispatch");
811                 kblockd_schedule_work(cfqd->queue, &cfqd->unplug_work);
812         }
813 }
814
815 /*
816  * Scale schedule slice based on io priority. Use the sync time slice only
817  * if a queue is marked sync and has sync io queued. A sync queue with async
818  * io only, should not get full sync slice length.
819  */
820 static inline int cfq_prio_slice(struct cfq_data *cfqd, bool sync,
821                                  unsigned short prio)
822 {
823         const int base_slice = cfqd->cfq_slice[sync];
824
825         WARN_ON(prio >= IOPRIO_BE_NR);
826
827         return base_slice + (base_slice/CFQ_SLICE_SCALE * (4 - prio));
828 }
829
830 static inline int
831 cfq_prio_to_slice(struct cfq_data *cfqd, struct cfq_queue *cfqq)
832 {
833         return cfq_prio_slice(cfqd, cfq_cfqq_sync(cfqq), cfqq->ioprio);
834 }
835
836 static inline u64 cfq_scale_slice(unsigned long delta, struct cfq_group *cfqg)
837 {
838         u64 d = delta << CFQ_SERVICE_SHIFT;
839
840         d = d * CFQ_WEIGHT_DEFAULT;
841         do_div(d, cfqg->weight);
842         return d;
843 }
844
845 static inline u64 max_vdisktime(u64 min_vdisktime, u64 vdisktime)
846 {
847         s64 delta = (s64)(vdisktime - min_vdisktime);
848         if (delta > 0)
849                 min_vdisktime = vdisktime;
850
851         return min_vdisktime;
852 }
853
854 static inline u64 min_vdisktime(u64 min_vdisktime, u64 vdisktime)
855 {
856         s64 delta = (s64)(vdisktime - min_vdisktime);
857         if (delta < 0)
858                 min_vdisktime = vdisktime;
859
860         return min_vdisktime;
861 }
862
863 static void update_min_vdisktime(struct cfq_rb_root *st)
864 {
865         struct cfq_group *cfqg;
866
867         if (st->left) {
868                 cfqg = rb_entry_cfqg(st->left);
869                 st->min_vdisktime = max_vdisktime(st->min_vdisktime,
870                                                   cfqg->vdisktime);
871         }
872 }
873
874 /*
875  * get averaged number of queues of RT/BE priority.
876  * average is updated, with a formula that gives more weight to higher numbers,
877  * to quickly follows sudden increases and decrease slowly
878  */
879
880 static inline unsigned cfq_group_get_avg_queues(struct cfq_data *cfqd,
881                                         struct cfq_group *cfqg, bool rt)
882 {
883         unsigned min_q, max_q;
884         unsigned mult  = cfq_hist_divisor - 1;
885         unsigned round = cfq_hist_divisor / 2;
886         unsigned busy = cfq_group_busy_queues_wl(rt, cfqd, cfqg);
887
888         min_q = min(cfqg->busy_queues_avg[rt], busy);
889         max_q = max(cfqg->busy_queues_avg[rt], busy);
890         cfqg->busy_queues_avg[rt] = (mult * max_q + min_q + round) /
891                 cfq_hist_divisor;
892         return cfqg->busy_queues_avg[rt];
893 }
894
895 static inline unsigned
896 cfq_group_slice(struct cfq_data *cfqd, struct cfq_group *cfqg)
897 {
898         struct cfq_rb_root *st = &cfqd->grp_service_tree;
899
900         return cfq_target_latency * cfqg->weight / st->total_weight;
901 }
902
903 static inline unsigned
904 cfq_scaled_cfqq_slice(struct cfq_data *cfqd, struct cfq_queue *cfqq)
905 {
906         unsigned slice = cfq_prio_to_slice(cfqd, cfqq);
907         if (cfqd->cfq_latency) {
908                 /*
909                  * interested queues (we consider only the ones with the same
910                  * priority class in the cfq group)
911                  */
912                 unsigned iq = cfq_group_get_avg_queues(cfqd, cfqq->cfqg,
913                                                 cfq_class_rt(cfqq));
914                 unsigned sync_slice = cfqd->cfq_slice[1];
915                 unsigned expect_latency = sync_slice * iq;
916                 unsigned group_slice = cfq_group_slice(cfqd, cfqq->cfqg);
917
918                 if (expect_latency > group_slice) {
919                         unsigned base_low_slice = 2 * cfqd->cfq_slice_idle;
920                         /* scale low_slice according to IO priority
921                          * and sync vs async */
922                         unsigned low_slice =
923                                 min(slice, base_low_slice * slice / sync_slice);
924                         /* the adapted slice value is scaled to fit all iqs
925                          * into the target latency */
926                         slice = max(slice * group_slice / expect_latency,
927                                     low_slice);
928                 }
929         }
930         return slice;
931 }
932
933 static inline void
934 cfq_set_prio_slice(struct cfq_data *cfqd, struct cfq_queue *cfqq)
935 {
936         unsigned slice = cfq_scaled_cfqq_slice(cfqd, cfqq);
937
938         cfqq->slice_start = jiffies;
939         cfqq->slice_end = jiffies + slice;
940         cfqq->allocated_slice = slice;
941         cfq_log_cfqq(cfqd, cfqq, "set_slice=%lu", cfqq->slice_end - jiffies);
942 }
943
944 /*
945  * We need to wrap this check in cfq_cfqq_slice_new(), since ->slice_end
946  * isn't valid until the first request from the dispatch is activated
947  * and the slice time set.
948  */
949 static inline bool cfq_slice_used(struct cfq_queue *cfqq)
950 {
951         if (cfq_cfqq_slice_new(cfqq))
952                 return false;
953         if (time_before(jiffies, cfqq->slice_end))
954                 return false;
955
956         return true;
957 }
958
959 /*
960  * Lifted from AS - choose which of rq1 and rq2 that is best served now.
961  * We choose the request that is closest to the head right now. Distance
962  * behind the head is penalized and only allowed to a certain extent.
963  */
964 static struct request *
965 cfq_choose_req(struct cfq_data *cfqd, struct request *rq1, struct request *rq2, sector_t last)
966 {
967         sector_t s1, s2, d1 = 0, d2 = 0;
968         unsigned long back_max;
969 #define CFQ_RQ1_WRAP    0x01 /* request 1 wraps */
970 #define CFQ_RQ2_WRAP    0x02 /* request 2 wraps */
971         unsigned wrap = 0; /* bit mask: requests behind the disk head? */
972
973         if (rq1 == NULL || rq1 == rq2)
974                 return rq2;
975         if (rq2 == NULL)
976                 return rq1;
977
978         if (rq_is_sync(rq1) != rq_is_sync(rq2))
979                 return rq_is_sync(rq1) ? rq1 : rq2;
980
981         if ((rq1->cmd_flags ^ rq2->cmd_flags) & REQ_PRIO)
982                 return rq1->cmd_flags & REQ_PRIO ? rq1 : rq2;
983
984         s1 = blk_rq_pos(rq1);
985         s2 = blk_rq_pos(rq2);
986
987         /*
988          * by definition, 1KiB is 2 sectors
989          */
990         back_max = cfqd->cfq_back_max * 2;
991
992         /*
993          * Strict one way elevator _except_ in the case where we allow
994          * short backward seeks which are biased as twice the cost of a
995          * similar forward seek.
996          */
997         if (s1 >= last)
998                 d1 = s1 - last;
999         else if (s1 + back_max >= last)
1000                 d1 = (last - s1) * cfqd->cfq_back_penalty;
1001         else
1002                 wrap |= CFQ_RQ1_WRAP;
1003
1004         if (s2 >= last)
1005                 d2 = s2 - last;
1006         else if (s2 + back_max >= last)
1007                 d2 = (last - s2) * cfqd->cfq_back_penalty;
1008         else
1009                 wrap |= CFQ_RQ2_WRAP;
1010
1011         /* Found required data */
1012
1013         /*
1014          * By doing switch() on the bit mask "wrap" we avoid having to
1015          * check two variables for all permutations: --> faster!
1016          */
1017         switch (wrap) {
1018         case 0: /* common case for CFQ: rq1 and rq2 not wrapped */
1019                 if (d1 < d2)
1020                         return rq1;
1021                 else if (d2 < d1)
1022                         return rq2;
1023                 else {
1024                         if (s1 >= s2)
1025                                 return rq1;
1026                         else
1027                                 return rq2;
1028                 }
1029
1030         case CFQ_RQ2_WRAP:
1031                 return rq1;
1032         case CFQ_RQ1_WRAP:
1033                 return rq2;
1034         case (CFQ_RQ1_WRAP|CFQ_RQ2_WRAP): /* both rqs wrapped */
1035         default:
1036                 /*
1037                  * Since both rqs are wrapped,
1038                  * start with the one that's further behind head
1039                  * (--> only *one* back seek required),
1040                  * since back seek takes more time than forward.
1041                  */
1042                 if (s1 <= s2)
1043                         return rq1;
1044                 else
1045                         return rq2;
1046         }
1047 }
1048
1049 /*
1050  * The below is leftmost cache rbtree addon
1051  */
1052 static struct cfq_queue *cfq_rb_first(struct cfq_rb_root *root)
1053 {
1054         /* Service tree is empty */
1055         if (!root->count)
1056                 return NULL;
1057
1058         if (!root->left)
1059                 root->left = rb_first(&root->rb);
1060
1061         if (root->left)
1062                 return rb_entry(root->left, struct cfq_queue, rb_node);
1063
1064         return NULL;
1065 }
1066
1067 static struct cfq_group *cfq_rb_first_group(struct cfq_rb_root *root)
1068 {
1069         if (!root->left)
1070                 root->left = rb_first(&root->rb);
1071
1072         if (root->left)
1073                 return rb_entry_cfqg(root->left);
1074
1075         return NULL;
1076 }
1077
1078 static void rb_erase_init(struct rb_node *n, struct rb_root *root)
1079 {
1080         rb_erase(n, root);
1081         RB_CLEAR_NODE(n);
1082 }
1083
1084 static void cfq_rb_erase(struct rb_node *n, struct cfq_rb_root *root)
1085 {
1086         if (root->left == n)
1087                 root->left = NULL;
1088         rb_erase_init(n, &root->rb);
1089         --root->count;
1090 }
1091
1092 /*
1093  * would be nice to take fifo expire time into account as well
1094  */
1095 static struct request *
1096 cfq_find_next_rq(struct cfq_data *cfqd, struct cfq_queue *cfqq,
1097                   struct request *last)
1098 {
1099         struct rb_node *rbnext = rb_next(&last->rb_node);
1100         struct rb_node *rbprev = rb_prev(&last->rb_node);
1101         struct request *next = NULL, *prev = NULL;
1102
1103         BUG_ON(RB_EMPTY_NODE(&last->rb_node));
1104
1105         if (rbprev)
1106                 prev = rb_entry_rq(rbprev);
1107
1108         if (rbnext)
1109                 next = rb_entry_rq(rbnext);
1110         else {
1111                 rbnext = rb_first(&cfqq->sort_list);
1112                 if (rbnext && rbnext != &last->rb_node)
1113                         next = rb_entry_rq(rbnext);
1114         }
1115
1116         return cfq_choose_req(cfqd, next, prev, blk_rq_pos(last));
1117 }
1118
1119 static unsigned long cfq_slice_offset(struct cfq_data *cfqd,
1120                                       struct cfq_queue *cfqq)
1121 {
1122         /*
1123          * just an approximation, should be ok.
1124          */
1125         return (cfqq->cfqg->nr_cfqq - 1) * (cfq_prio_slice(cfqd, 1, 0) -
1126                        cfq_prio_slice(cfqd, cfq_cfqq_sync(cfqq), cfqq->ioprio));
1127 }
1128
1129 static inline s64
1130 cfqg_key(struct cfq_rb_root *st, struct cfq_group *cfqg)
1131 {
1132         return cfqg->vdisktime - st->min_vdisktime;
1133 }
1134
1135 static void
1136 __cfq_group_service_tree_add(struct cfq_rb_root *st, struct cfq_group *cfqg)
1137 {
1138         struct rb_node **node = &st->rb.rb_node;
1139         struct rb_node *parent = NULL;
1140         struct cfq_group *__cfqg;
1141         s64 key = cfqg_key(st, cfqg);
1142         int left = 1;
1143
1144         while (*node != NULL) {
1145                 parent = *node;
1146                 __cfqg = rb_entry_cfqg(parent);
1147
1148                 if (key < cfqg_key(st, __cfqg))
1149                         node = &parent->rb_left;
1150                 else {
1151                         node = &parent->rb_right;
1152                         left = 0;
1153                 }
1154         }
1155
1156         if (left)
1157                 st->left = &cfqg->rb_node;
1158
1159         rb_link_node(&cfqg->rb_node, parent, node);
1160         rb_insert_color(&cfqg->rb_node, &st->rb);
1161 }
1162
1163 static void
1164 cfq_update_group_weight(struct cfq_group *cfqg)
1165 {
1166         BUG_ON(!RB_EMPTY_NODE(&cfqg->rb_node));
1167         if (cfqg->new_weight) {
1168                 cfqg->weight = cfqg->new_weight;
1169                 cfqg->new_weight = 0;
1170         }
1171 }
1172
1173 static void
1174 cfq_group_service_tree_add(struct cfq_rb_root *st, struct cfq_group *cfqg)
1175 {
1176         BUG_ON(!RB_EMPTY_NODE(&cfqg->rb_node));
1177
1178         cfq_update_group_weight(cfqg);
1179         __cfq_group_service_tree_add(st, cfqg);
1180         st->total_weight += cfqg->weight;
1181 }
1182
1183 static void
1184 cfq_group_notify_queue_add(struct cfq_data *cfqd, struct cfq_group *cfqg)
1185 {
1186         struct cfq_rb_root *st = &cfqd->grp_service_tree;
1187         struct cfq_group *__cfqg;
1188         struct rb_node *n;
1189
1190         cfqg->nr_cfqq++;
1191         if (!RB_EMPTY_NODE(&cfqg->rb_node))
1192                 return;
1193
1194         /*
1195          * Currently put the group at the end. Later implement something
1196          * so that groups get lesser vtime based on their weights, so that
1197          * if group does not loose all if it was not continuously backlogged.
1198          */
1199         n = rb_last(&st->rb);
1200         if (n) {
1201                 __cfqg = rb_entry_cfqg(n);
1202                 cfqg->vdisktime = __cfqg->vdisktime + CFQ_IDLE_DELAY;
1203         } else
1204                 cfqg->vdisktime = st->min_vdisktime;
1205         cfq_group_service_tree_add(st, cfqg);
1206 }
1207
1208 static void
1209 cfq_group_service_tree_del(struct cfq_rb_root *st, struct cfq_group *cfqg)
1210 {
1211         st->total_weight -= cfqg->weight;
1212         if (!RB_EMPTY_NODE(&cfqg->rb_node))
1213                 cfq_rb_erase(&cfqg->rb_node, st);
1214 }
1215
1216 static void
1217 cfq_group_notify_queue_del(struct cfq_data *cfqd, struct cfq_group *cfqg)
1218 {
1219         struct cfq_rb_root *st = &cfqd->grp_service_tree;
1220
1221         BUG_ON(cfqg->nr_cfqq < 1);
1222         cfqg->nr_cfqq--;
1223
1224         /* If there are other cfq queues under this group, don't delete it */
1225         if (cfqg->nr_cfqq)
1226                 return;
1227
1228         cfq_log_cfqg(cfqd, cfqg, "del_from_rr group");
1229         cfq_group_service_tree_del(st, cfqg);
1230         cfqg->saved_workload_slice = 0;
1231         cfqg_stats_update_dequeue(cfqg);
1232 }
1233
1234 static inline unsigned int cfq_cfqq_slice_usage(struct cfq_queue *cfqq,
1235                                                 unsigned int *unaccounted_time)
1236 {
1237         unsigned int slice_used;
1238
1239         /*
1240          * Queue got expired before even a single request completed or
1241          * got expired immediately after first request completion.
1242          */
1243         if (!cfqq->slice_start || cfqq->slice_start == jiffies) {
1244                 /*
1245                  * Also charge the seek time incurred to the group, otherwise
1246                  * if there are mutiple queues in the group, each can dispatch
1247                  * a single request on seeky media and cause lots of seek time
1248                  * and group will never know it.
1249                  */
1250                 slice_used = max_t(unsigned, (jiffies - cfqq->dispatch_start),
1251                                         1);
1252         } else {
1253                 slice_used = jiffies - cfqq->slice_start;
1254                 if (slice_used > cfqq->allocated_slice) {
1255                         *unaccounted_time = slice_used - cfqq->allocated_slice;
1256                         slice_used = cfqq->allocated_slice;
1257                 }
1258                 if (time_after(cfqq->slice_start, cfqq->dispatch_start))
1259                         *unaccounted_time += cfqq->slice_start -
1260                                         cfqq->dispatch_start;
1261         }
1262
1263         return slice_used;
1264 }
1265
1266 static void cfq_group_served(struct cfq_data *cfqd, struct cfq_group *cfqg,
1267                                 struct cfq_queue *cfqq)
1268 {
1269         struct cfq_rb_root *st = &cfqd->grp_service_tree;
1270         unsigned int used_sl, charge, unaccounted_sl = 0;
1271         int nr_sync = cfqg->nr_cfqq - cfqg_busy_async_queues(cfqd, cfqg)
1272                         - cfqg->service_tree_idle.count;
1273
1274         BUG_ON(nr_sync < 0);
1275         used_sl = charge = cfq_cfqq_slice_usage(cfqq, &unaccounted_sl);
1276
1277         if (iops_mode(cfqd))
1278                 charge = cfqq->slice_dispatch;
1279         else if (!cfq_cfqq_sync(cfqq) && !nr_sync)
1280                 charge = cfqq->allocated_slice;
1281
1282         /* Can't update vdisktime while group is on service tree */
1283         cfq_group_service_tree_del(st, cfqg);
1284         cfqg->vdisktime += cfq_scale_slice(charge, cfqg);
1285         /* If a new weight was requested, update now, off tree */
1286         cfq_group_service_tree_add(st, cfqg);
1287
1288         /* This group is being expired. Save the context */
1289         if (time_after(cfqd->workload_expires, jiffies)) {
1290                 cfqg->saved_workload_slice = cfqd->workload_expires
1291                                                 - jiffies;
1292                 cfqg->saved_workload = cfqd->serving_type;
1293                 cfqg->saved_serving_prio = cfqd->serving_prio;
1294         } else
1295                 cfqg->saved_workload_slice = 0;
1296
1297         cfq_log_cfqg(cfqd, cfqg, "served: vt=%llu min_vt=%llu", cfqg->vdisktime,
1298                                         st->min_vdisktime);
1299         cfq_log_cfqq(cfqq->cfqd, cfqq,
1300                      "sl_used=%u disp=%u charge=%u iops=%u sect=%lu",
1301                      used_sl, cfqq->slice_dispatch, charge,
1302                      iops_mode(cfqd), cfqq->nr_sectors);
1303         cfqg_stats_update_timeslice_used(cfqg, used_sl, unaccounted_sl);
1304         cfqg_stats_set_start_empty_time(cfqg);
1305 }
1306
1307 /**
1308  * cfq_init_cfqg_base - initialize base part of a cfq_group
1309  * @cfqg: cfq_group to initialize
1310  *
1311  * Initialize the base part which is used whether %CONFIG_CFQ_GROUP_IOSCHED
1312  * is enabled or not.
1313  */
1314 static void cfq_init_cfqg_base(struct cfq_group *cfqg)
1315 {
1316         struct cfq_rb_root *st;
1317         int i, j;
1318
1319         for_each_cfqg_st(cfqg, i, j, st)
1320                 *st = CFQ_RB_ROOT;
1321         RB_CLEAR_NODE(&cfqg->rb_node);
1322
1323         cfqg->ttime.last_end_request = jiffies;
1324 }
1325
1326 #ifdef CONFIG_CFQ_GROUP_IOSCHED
1327 static void cfq_init_blkio_group(struct blkio_group *blkg)
1328 {
1329         struct cfq_group *cfqg = blkg_to_cfqg(blkg);
1330
1331         cfq_init_cfqg_base(cfqg);
1332         cfqg->weight = blkg->blkcg->cfq_weight;
1333 }
1334
1335 /*
1336  * Search for the cfq group current task belongs to. request_queue lock must
1337  * be held.
1338  */
1339 static struct cfq_group *cfq_lookup_create_cfqg(struct cfq_data *cfqd,
1340                                                 struct blkio_cgroup *blkcg)
1341 {
1342         struct request_queue *q = cfqd->queue;
1343         struct cfq_group *cfqg = NULL;
1344
1345         /* avoid lookup for the common case where there's no blkio cgroup */
1346         if (blkcg == &blkio_root_cgroup) {
1347                 cfqg = cfqd->root_group;
1348         } else {
1349                 struct blkio_group *blkg;
1350
1351                 blkg = blkg_lookup_create(blkcg, q, false);
1352                 if (!IS_ERR(blkg))
1353                         cfqg = blkg_to_cfqg(blkg);
1354         }
1355
1356         return cfqg;
1357 }
1358
1359 static void cfq_link_cfqq_cfqg(struct cfq_queue *cfqq, struct cfq_group *cfqg)
1360 {
1361         /* Currently, all async queues are mapped to root group */
1362         if (!cfq_cfqq_sync(cfqq))
1363                 cfqg = cfqq->cfqd->root_group;
1364
1365         cfqq->cfqg = cfqg;
1366         /* cfqq reference on cfqg */
1367         cfqg_get(cfqg);
1368 }
1369
1370 static u64 cfqg_prfill_weight_device(struct seq_file *sf, void *pdata, int off)
1371 {
1372         struct cfq_group *cfqg = pdata;
1373
1374         if (!cfqg->dev_weight)
1375                 return 0;
1376         return __blkg_prfill_u64(sf, pdata, cfqg->dev_weight);
1377 }
1378
1379 static int cfqg_print_weight_device(struct cgroup *cgrp, struct cftype *cft,
1380                                     struct seq_file *sf)
1381 {
1382         blkcg_print_blkgs(sf, cgroup_to_blkio_cgroup(cgrp),
1383                           cfqg_prfill_weight_device, &blkio_policy_cfq, 0,
1384                           false);
1385         return 0;
1386 }
1387
1388 static int cfq_print_weight(struct cgroup *cgrp, struct cftype *cft,
1389                             struct seq_file *sf)
1390 {
1391         seq_printf(sf, "%u\n", cgroup_to_blkio_cgroup(cgrp)->cfq_weight);
1392         return 0;
1393 }
1394
1395 static int cfqg_set_weight_device(struct cgroup *cgrp, struct cftype *cft,
1396                                   const char *buf)
1397 {
1398         struct blkio_cgroup *blkcg = cgroup_to_blkio_cgroup(cgrp);
1399         struct blkg_conf_ctx ctx;
1400         struct cfq_group *cfqg;
1401         int ret;
1402
1403         ret = blkg_conf_prep(blkcg, buf, &ctx);
1404         if (ret)
1405                 return ret;
1406
1407         ret = -EINVAL;
1408         cfqg = blkg_to_cfqg(ctx.blkg);
1409         if (cfqg && (!ctx.v || (ctx.v >= CFQ_WEIGHT_MIN &&
1410                                 ctx.v <= CFQ_WEIGHT_MAX))) {
1411                 cfqg->dev_weight = ctx.v;
1412                 cfqg->new_weight = cfqg->dev_weight ?: blkcg->cfq_weight;
1413                 ret = 0;
1414         }
1415
1416         blkg_conf_finish(&ctx);
1417         return ret;
1418 }
1419
1420 static int cfq_set_weight(struct cgroup *cgrp, struct cftype *cft, u64 val)
1421 {
1422         struct blkio_cgroup *blkcg = cgroup_to_blkio_cgroup(cgrp);
1423         struct blkio_group *blkg;
1424         struct hlist_node *n;
1425
1426         if (val < CFQ_WEIGHT_MIN || val > CFQ_WEIGHT_MAX)
1427                 return -EINVAL;
1428
1429         spin_lock_irq(&blkcg->lock);
1430         blkcg->cfq_weight = (unsigned int)val;
1431
1432         hlist_for_each_entry(blkg, n, &blkcg->blkg_list, blkcg_node) {
1433                 struct cfq_group *cfqg = blkg_to_cfqg(blkg);
1434
1435                 if (cfqg && !cfqg->dev_weight)
1436                         cfqg->new_weight = blkcg->cfq_weight;
1437         }
1438
1439         spin_unlock_irq(&blkcg->lock);
1440         return 0;
1441 }
1442
1443 static int cfqg_print_stat(struct cgroup *cgrp, struct cftype *cft,
1444                            struct seq_file *sf)
1445 {
1446         struct blkio_cgroup *blkcg = cgroup_to_blkio_cgroup(cgrp);
1447
1448         blkcg_print_blkgs(sf, blkcg, blkg_prfill_stat, &blkio_policy_cfq,
1449                           cft->private, false);
1450         return 0;
1451 }
1452
1453 static int cfqg_print_rwstat(struct cgroup *cgrp, struct cftype *cft,
1454                              struct seq_file *sf)
1455 {
1456         struct blkio_cgroup *blkcg = cgroup_to_blkio_cgroup(cgrp);
1457
1458         blkcg_print_blkgs(sf, blkcg, blkg_prfill_rwstat, &blkio_policy_cfq,
1459                           cft->private, true);
1460         return 0;
1461 }
1462
1463 #ifdef CONFIG_DEBUG_BLK_CGROUP
1464 static u64 cfqg_prfill_avg_queue_size(struct seq_file *sf, void *pdata, int off)
1465 {
1466         struct cfq_group *cfqg = pdata;
1467         u64 samples = blkg_stat_read(&cfqg->stats.avg_queue_size_samples);
1468         u64 v = 0;
1469
1470         if (samples) {
1471                 v = blkg_stat_read(&cfqg->stats.avg_queue_size_sum);
1472                 do_div(v, samples);
1473         }
1474         __blkg_prfill_u64(sf, pdata, v);
1475         return 0;
1476 }
1477
1478 /* print avg_queue_size */
1479 static int cfqg_print_avg_queue_size(struct cgroup *cgrp, struct cftype *cft,
1480                                      struct seq_file *sf)
1481 {
1482         struct blkio_cgroup *blkcg = cgroup_to_blkio_cgroup(cgrp);
1483
1484         blkcg_print_blkgs(sf, blkcg, cfqg_prfill_avg_queue_size,
1485                           &blkio_policy_cfq, 0, false);
1486         return 0;
1487 }
1488 #endif  /* CONFIG_DEBUG_BLK_CGROUP */
1489
1490 static struct cftype cfq_blkcg_files[] = {
1491         {
1492                 .name = "weight_device",
1493                 .read_seq_string = cfqg_print_weight_device,
1494                 .write_string = cfqg_set_weight_device,
1495                 .max_write_len = 256,
1496         },
1497         {
1498                 .name = "weight",
1499                 .read_seq_string = cfq_print_weight,
1500                 .write_u64 = cfq_set_weight,
1501         },
1502         {
1503                 .name = "time",
1504                 .private = offsetof(struct cfq_group, stats.time),
1505                 .read_seq_string = cfqg_print_stat,
1506         },
1507         {
1508                 .name = "sectors",
1509                 .private = offsetof(struct cfq_group, stats.sectors),
1510                 .read_seq_string = cfqg_print_stat,
1511         },
1512         {
1513                 .name = "io_service_bytes",
1514                 .private = offsetof(struct cfq_group, stats.service_bytes),
1515                 .read_seq_string = cfqg_print_rwstat,
1516         },
1517         {
1518                 .name = "io_serviced",
1519                 .private = offsetof(struct cfq_group, stats.serviced),
1520                 .read_seq_string = cfqg_print_rwstat,
1521         },
1522         {
1523                 .name = "io_service_time",
1524                 .private = offsetof(struct cfq_group, stats.service_time),
1525                 .read_seq_string = cfqg_print_rwstat,
1526         },
1527         {
1528                 .name = "io_wait_time",
1529                 .private = offsetof(struct cfq_group, stats.wait_time),
1530                 .read_seq_string = cfqg_print_rwstat,
1531         },
1532         {
1533                 .name = "io_merged",
1534                 .private = offsetof(struct cfq_group, stats.merged),
1535                 .read_seq_string = cfqg_print_rwstat,
1536         },
1537         {
1538                 .name = "io_queued",
1539                 .private = offsetof(struct cfq_group, stats.queued),
1540                 .read_seq_string = cfqg_print_rwstat,
1541         },
1542 #ifdef CONFIG_DEBUG_BLK_CGROUP
1543         {
1544                 .name = "avg_queue_size",
1545                 .read_seq_string = cfqg_print_avg_queue_size,
1546         },
1547         {
1548                 .name = "group_wait_time",
1549                 .private = offsetof(struct cfq_group, stats.group_wait_time),
1550                 .read_seq_string = cfqg_print_stat,
1551         },
1552         {
1553                 .name = "idle_time",
1554                 .private = offsetof(struct cfq_group, stats.idle_time),
1555                 .read_seq_string = cfqg_print_stat,
1556         },
1557         {
1558                 .name = "empty_time",
1559                 .private = offsetof(struct cfq_group, stats.empty_time),
1560                 .read_seq_string = cfqg_print_stat,
1561         },
1562         {
1563                 .name = "dequeue",
1564                 .private = offsetof(struct cfq_group, stats.dequeue),
1565                 .read_seq_string = cfqg_print_stat,
1566         },
1567         {
1568                 .name = "unaccounted_time",
1569                 .private = offsetof(struct cfq_group, stats.unaccounted_time),
1570                 .read_seq_string = cfqg_print_stat,
1571         },
1572 #endif  /* CONFIG_DEBUG_BLK_CGROUP */
1573         { }     /* terminate */
1574 };
1575 #else /* GROUP_IOSCHED */
1576 static struct cfq_group *cfq_lookup_create_cfqg(struct cfq_data *cfqd,
1577                                                 struct blkio_cgroup *blkcg)
1578 {
1579         return cfqd->root_group;
1580 }
1581
1582 static inline void
1583 cfq_link_cfqq_cfqg(struct cfq_queue *cfqq, struct cfq_group *cfqg) {
1584         cfqq->cfqg = cfqg;
1585 }
1586
1587 #endif /* GROUP_IOSCHED */
1588
1589 /*
1590  * The cfqd->service_trees holds all pending cfq_queue's that have
1591  * requests waiting to be processed. It is sorted in the order that
1592  * we will service the queues.
1593  */
1594 static void cfq_service_tree_add(struct cfq_data *cfqd, struct cfq_queue *cfqq,
1595                                  bool add_front)
1596 {
1597         struct rb_node **p, *parent;
1598         struct cfq_queue *__cfqq;
1599         unsigned long rb_key;
1600         struct cfq_rb_root *service_tree;
1601         int left;
1602         int new_cfqq = 1;
1603
1604         service_tree = service_tree_for(cfqq->cfqg, cfqq_prio(cfqq),
1605                                                 cfqq_type(cfqq));
1606         if (cfq_class_idle(cfqq)) {
1607                 rb_key = CFQ_IDLE_DELAY;
1608                 parent = rb_last(&service_tree->rb);
1609                 if (parent && parent != &cfqq->rb_node) {
1610                         __cfqq = rb_entry(parent, struct cfq_queue, rb_node);
1611                         rb_key += __cfqq->rb_key;
1612                 } else
1613                         rb_key += jiffies;
1614         } else if (!add_front) {
1615                 /*
1616                  * Get our rb key offset. Subtract any residual slice
1617                  * value carried from last service. A negative resid
1618                  * count indicates slice overrun, and this should position
1619                  * the next service time further away in the tree.
1620                  */
1621                 rb_key = cfq_slice_offset(cfqd, cfqq) + jiffies;
1622                 rb_key -= cfqq->slice_resid;
1623                 cfqq->slice_resid = 0;
1624         } else {
1625                 rb_key = -HZ;
1626                 __cfqq = cfq_rb_first(service_tree);
1627                 rb_key += __cfqq ? __cfqq->rb_key : jiffies;
1628         }
1629
1630         if (!RB_EMPTY_NODE(&cfqq->rb_node)) {
1631                 new_cfqq = 0;
1632                 /*
1633                  * same position, nothing more to do
1634                  */
1635                 if (rb_key == cfqq->rb_key &&
1636                     cfqq->service_tree == service_tree)
1637                         return;
1638
1639                 cfq_rb_erase(&cfqq->rb_node, cfqq->service_tree);
1640                 cfqq->service_tree = NULL;
1641         }
1642
1643         left = 1;
1644         parent = NULL;
1645         cfqq->service_tree = service_tree;
1646         p = &service_tree->rb.rb_node;
1647         while (*p) {
1648                 struct rb_node **n;
1649
1650                 parent = *p;
1651                 __cfqq = rb_entry(parent, struct cfq_queue, rb_node);
1652
1653                 /*
1654                  * sort by key, that represents service time.
1655                  */
1656                 if (time_before(rb_key, __cfqq->rb_key))
1657                         n = &(*p)->rb_left;
1658                 else {
1659                         n = &(*p)->rb_right;
1660                         left = 0;
1661                 }
1662
1663                 p = n;
1664         }
1665
1666         if (left)
1667                 service_tree->left = &cfqq->rb_node;
1668
1669         cfqq->rb_key = rb_key;
1670         rb_link_node(&cfqq->rb_node, parent, p);
1671         rb_insert_color(&cfqq->rb_node, &service_tree->rb);
1672         service_tree->count++;
1673         if (add_front || !new_cfqq)
1674                 return;
1675         cfq_group_notify_queue_add(cfqd, cfqq->cfqg);
1676 }
1677
1678 static struct cfq_queue *
1679 cfq_prio_tree_lookup(struct cfq_data *cfqd, struct rb_root *root,
1680                      sector_t sector, struct rb_node **ret_parent,
1681                      struct rb_node ***rb_link)
1682 {
1683         struct rb_node **p, *parent;
1684         struct cfq_queue *cfqq = NULL;
1685
1686         parent = NULL;
1687         p = &root->rb_node;
1688         while (*p) {
1689                 struct rb_node **n;
1690
1691                 parent = *p;
1692                 cfqq = rb_entry(parent, struct cfq_queue, p_node);
1693
1694                 /*
1695                  * Sort strictly based on sector.  Smallest to the left,
1696                  * largest to the right.
1697                  */
1698                 if (sector > blk_rq_pos(cfqq->next_rq))
1699                         n = &(*p)->rb_right;
1700                 else if (sector < blk_rq_pos(cfqq->next_rq))
1701                         n = &(*p)->rb_left;
1702                 else
1703                         break;
1704                 p = n;
1705                 cfqq = NULL;
1706         }
1707
1708         *ret_parent = parent;
1709         if (rb_link)
1710                 *rb_link = p;
1711         return cfqq;
1712 }
1713
1714 static void cfq_prio_tree_add(struct cfq_data *cfqd, struct cfq_queue *cfqq)
1715 {
1716         struct rb_node **p, *parent;
1717         struct cfq_queue *__cfqq;
1718
1719         if (cfqq->p_root) {
1720                 rb_erase(&cfqq->p_node, cfqq->p_root);
1721                 cfqq->p_root = NULL;
1722         }
1723
1724         if (cfq_class_idle(cfqq))
1725                 return;
1726         if (!cfqq->next_rq)
1727                 return;
1728
1729         cfqq->p_root = &cfqd->prio_trees[cfqq->org_ioprio];
1730         __cfqq = cfq_prio_tree_lookup(cfqd, cfqq->p_root,
1731                                       blk_rq_pos(cfqq->next_rq), &parent, &p);
1732         if (!__cfqq) {
1733                 rb_link_node(&cfqq->p_node, parent, p);
1734                 rb_insert_color(&cfqq->p_node, cfqq->p_root);
1735         } else
1736                 cfqq->p_root = NULL;
1737 }
1738
1739 /*
1740  * Update cfqq's position in the service tree.
1741  */
1742 static void cfq_resort_rr_list(struct cfq_data *cfqd, struct cfq_queue *cfqq)
1743 {
1744         /*
1745          * Resorting requires the cfqq to be on the RR list already.
1746          */
1747         if (cfq_cfqq_on_rr(cfqq)) {
1748                 cfq_service_tree_add(cfqd, cfqq, 0);
1749                 cfq_prio_tree_add(cfqd, cfqq);
1750         }
1751 }
1752
1753 /*
1754  * add to busy list of queues for service, trying to be fair in ordering
1755  * the pending list according to last request service
1756  */
1757 static void cfq_add_cfqq_rr(struct cfq_data *cfqd, struct cfq_queue *cfqq)
1758 {
1759         cfq_log_cfqq(cfqd, cfqq, "add_to_rr");
1760         BUG_ON(cfq_cfqq_on_rr(cfqq));
1761         cfq_mark_cfqq_on_rr(cfqq);
1762         cfqd->busy_queues++;
1763         if (cfq_cfqq_sync(cfqq))
1764                 cfqd->busy_sync_queues++;
1765
1766         cfq_resort_rr_list(cfqd, cfqq);
1767 }
1768
1769 /*
1770  * Called when the cfqq no longer has requests pending, remove it from
1771  * the service tree.
1772  */
1773 static void cfq_del_cfqq_rr(struct cfq_data *cfqd, struct cfq_queue *cfqq)
1774 {
1775         cfq_log_cfqq(cfqd, cfqq, "del_from_rr");
1776         BUG_ON(!cfq_cfqq_on_rr(cfqq));
1777         cfq_clear_cfqq_on_rr(cfqq);
1778
1779         if (!RB_EMPTY_NODE(&cfqq->rb_node)) {
1780                 cfq_rb_erase(&cfqq->rb_node, cfqq->service_tree);
1781                 cfqq->service_tree = NULL;
1782         }
1783         if (cfqq->p_root) {
1784                 rb_erase(&cfqq->p_node, cfqq->p_root);
1785                 cfqq->p_root = NULL;
1786         }
1787
1788         cfq_group_notify_queue_del(cfqd, cfqq->cfqg);
1789         BUG_ON(!cfqd->busy_queues);
1790         cfqd->busy_queues--;
1791         if (cfq_cfqq_sync(cfqq))
1792                 cfqd->busy_sync_queues--;
1793 }
1794
1795 /*
1796  * rb tree support functions
1797  */
1798 static void cfq_del_rq_rb(struct request *rq)
1799 {
1800         struct cfq_queue *cfqq = RQ_CFQQ(rq);
1801         const int sync = rq_is_sync(rq);
1802
1803         BUG_ON(!cfqq->queued[sync]);
1804         cfqq->queued[sync]--;
1805
1806         elv_rb_del(&cfqq->sort_list, rq);
1807
1808         if (cfq_cfqq_on_rr(cfqq) && RB_EMPTY_ROOT(&cfqq->sort_list)) {
1809                 /*
1810                  * Queue will be deleted from service tree when we actually
1811                  * expire it later. Right now just remove it from prio tree
1812                  * as it is empty.
1813                  */
1814                 if (cfqq->p_root) {
1815                         rb_erase(&cfqq->p_node, cfqq->p_root);
1816                         cfqq->p_root = NULL;
1817                 }
1818         }
1819 }
1820
1821 static void cfq_add_rq_rb(struct request *rq)
1822 {
1823         struct cfq_queue *cfqq = RQ_CFQQ(rq);
1824         struct cfq_data *cfqd = cfqq->cfqd;
1825         struct request *prev;
1826
1827         cfqq->queued[rq_is_sync(rq)]++;
1828
1829         elv_rb_add(&cfqq->sort_list, rq);
1830
1831         if (!cfq_cfqq_on_rr(cfqq))
1832                 cfq_add_cfqq_rr(cfqd, cfqq);
1833
1834         /*
1835          * check if this request is a better next-serve candidate
1836          */
1837         prev = cfqq->next_rq;
1838         cfqq->next_rq = cfq_choose_req(cfqd, cfqq->next_rq, rq, cfqd->last_position);
1839
1840         /*
1841          * adjust priority tree position, if ->next_rq changes
1842          */
1843         if (prev != cfqq->next_rq)
1844                 cfq_prio_tree_add(cfqd, cfqq);
1845
1846         BUG_ON(!cfqq->next_rq);
1847 }
1848
1849 static void cfq_reposition_rq_rb(struct cfq_queue *cfqq, struct request *rq)
1850 {
1851         elv_rb_del(&cfqq->sort_list, rq);
1852         cfqq->queued[rq_is_sync(rq)]--;
1853         cfqg_stats_update_io_remove(RQ_CFQG(rq), rq->cmd_flags);
1854         cfq_add_rq_rb(rq);
1855         cfqg_stats_update_io_add(RQ_CFQG(rq), cfqq->cfqd->serving_group,
1856                                  rq->cmd_flags);
1857 }
1858
1859 static struct request *
1860 cfq_find_rq_fmerge(struct cfq_data *cfqd, struct bio *bio)
1861 {
1862         struct task_struct *tsk = current;
1863         struct cfq_io_cq *cic;
1864         struct cfq_queue *cfqq;
1865
1866         cic = cfq_cic_lookup(cfqd, tsk->io_context);
1867         if (!cic)
1868                 return NULL;
1869
1870         cfqq = cic_to_cfqq(cic, cfq_bio_sync(bio));
1871         if (cfqq) {
1872                 sector_t sector = bio->bi_sector + bio_sectors(bio);
1873
1874                 return elv_rb_find(&cfqq->sort_list, sector);
1875         }
1876
1877         return NULL;
1878 }
1879
1880 static void cfq_activate_request(struct request_queue *q, struct request *rq)
1881 {
1882         struct cfq_data *cfqd = q->elevator->elevator_data;
1883
1884         cfqd->rq_in_driver++;
1885         cfq_log_cfqq(cfqd, RQ_CFQQ(rq), "activate rq, drv=%d",
1886                                                 cfqd->rq_in_driver);
1887
1888         cfqd->last_position = blk_rq_pos(rq) + blk_rq_sectors(rq);
1889 }
1890
1891 static void cfq_deactivate_request(struct request_queue *q, struct request *rq)
1892 {
1893         struct cfq_data *cfqd = q->elevator->elevator_data;
1894
1895         WARN_ON(!cfqd->rq_in_driver);
1896         cfqd->rq_in_driver--;
1897         cfq_log_cfqq(cfqd, RQ_CFQQ(rq), "deactivate rq, drv=%d",
1898                                                 cfqd->rq_in_driver);
1899 }
1900
1901 static void cfq_remove_request(struct request *rq)
1902 {
1903         struct cfq_queue *cfqq = RQ_CFQQ(rq);
1904
1905         if (cfqq->next_rq == rq)
1906                 cfqq->next_rq = cfq_find_next_rq(cfqq->cfqd, cfqq, rq);
1907
1908         list_del_init(&rq->queuelist);
1909         cfq_del_rq_rb(rq);
1910
1911         cfqq->cfqd->rq_queued--;
1912         cfqg_stats_update_io_remove(RQ_CFQG(rq), rq->cmd_flags);
1913         if (rq->cmd_flags & REQ_PRIO) {
1914                 WARN_ON(!cfqq->prio_pending);
1915                 cfqq->prio_pending--;
1916         }
1917 }
1918
1919 static int cfq_merge(struct request_queue *q, struct request **req,
1920                      struct bio *bio)
1921 {
1922         struct cfq_data *cfqd = q->elevator->elevator_data;
1923         struct request *__rq;
1924
1925         __rq = cfq_find_rq_fmerge(cfqd, bio);
1926         if (__rq && elv_rq_merge_ok(__rq, bio)) {
1927                 *req = __rq;
1928                 return ELEVATOR_FRONT_MERGE;
1929         }
1930
1931         return ELEVATOR_NO_MERGE;
1932 }
1933
1934 static void cfq_merged_request(struct request_queue *q, struct request *req,
1935                                int type)
1936 {
1937         if (type == ELEVATOR_FRONT_MERGE) {
1938                 struct cfq_queue *cfqq = RQ_CFQQ(req);
1939
1940                 cfq_reposition_rq_rb(cfqq, req);
1941         }
1942 }
1943
1944 static void cfq_bio_merged(struct request_queue *q, struct request *req,
1945                                 struct bio *bio)
1946 {
1947         cfqg_stats_update_io_merged(RQ_CFQG(req), bio->bi_rw);
1948 }
1949
1950 static void
1951 cfq_merged_requests(struct request_queue *q, struct request *rq,
1952                     struct request *next)
1953 {
1954         struct cfq_queue *cfqq = RQ_CFQQ(rq);
1955         struct cfq_data *cfqd = q->elevator->elevator_data;
1956
1957         /*
1958          * reposition in fifo if next is older than rq
1959          */
1960         if (!list_empty(&rq->queuelist) && !list_empty(&next->queuelist) &&
1961             time_before(rq_fifo_time(next), rq_fifo_time(rq))) {
1962                 list_move(&rq->queuelist, &next->queuelist);
1963                 rq_set_fifo_time(rq, rq_fifo_time(next));
1964         }
1965
1966         if (cfqq->next_rq == next)
1967                 cfqq->next_rq = rq;
1968         cfq_remove_request(next);
1969         cfqg_stats_update_io_merged(RQ_CFQG(rq), next->cmd_flags);
1970
1971         cfqq = RQ_CFQQ(next);
1972         /*
1973          * all requests of this queue are merged to other queues, delete it
1974          * from the service tree. If it's the active_queue,
1975          * cfq_dispatch_requests() will choose to expire it or do idle
1976          */
1977         if (cfq_cfqq_on_rr(cfqq) && RB_EMPTY_ROOT(&cfqq->sort_list) &&
1978             cfqq != cfqd->active_queue)
1979                 cfq_del_cfqq_rr(cfqd, cfqq);
1980 }
1981
1982 static int cfq_allow_merge(struct request_queue *q, struct request *rq,
1983                            struct bio *bio)
1984 {
1985         struct cfq_data *cfqd = q->elevator->elevator_data;
1986         struct cfq_io_cq *cic;
1987         struct cfq_queue *cfqq;
1988
1989         /*
1990          * Disallow merge of a sync bio into an async request.
1991          */
1992         if (cfq_bio_sync(bio) && !rq_is_sync(rq))
1993                 return false;
1994
1995         /*
1996          * Lookup the cfqq that this bio will be queued with and allow
1997          * merge only if rq is queued there.
1998          */
1999         cic = cfq_cic_lookup(cfqd, current->io_context);
2000         if (!cic)
2001                 return false;
2002
2003         cfqq = cic_to_cfqq(cic, cfq_bio_sync(bio));
2004         return cfqq == RQ_CFQQ(rq);
2005 }
2006
2007 static inline void cfq_del_timer(struct cfq_data *cfqd, struct cfq_queue *cfqq)
2008 {
2009         del_timer(&cfqd->idle_slice_timer);
2010         cfqg_stats_update_idle_time(cfqq->cfqg);
2011 }
2012
2013 static void __cfq_set_active_queue(struct cfq_data *cfqd,
2014                                    struct cfq_queue *cfqq)
2015 {
2016         if (cfqq) {
2017                 cfq_log_cfqq(cfqd, cfqq, "set_active wl_prio:%d wl_type:%d",
2018                                 cfqd->serving_prio, cfqd->serving_type);
2019                 cfqg_stats_update_avg_queue_size(cfqq->cfqg);
2020                 cfqq->slice_start = 0;
2021                 cfqq->dispatch_start = jiffies;
2022                 cfqq->allocated_slice = 0;
2023                 cfqq->slice_end = 0;
2024                 cfqq->slice_dispatch = 0;
2025                 cfqq->nr_sectors = 0;
2026
2027                 cfq_clear_cfqq_wait_request(cfqq);
2028                 cfq_clear_cfqq_must_dispatch(cfqq);
2029                 cfq_clear_cfqq_must_alloc_slice(cfqq);
2030                 cfq_clear_cfqq_fifo_expire(cfqq);
2031                 cfq_mark_cfqq_slice_new(cfqq);
2032
2033                 cfq_del_timer(cfqd, cfqq);
2034         }
2035
2036         cfqd->active_queue = cfqq;
2037 }
2038
2039 /*
2040  * current cfqq expired its slice (or was too idle), select new one
2041  */
2042 static void
2043 __cfq_slice_expired(struct cfq_data *cfqd, struct cfq_queue *cfqq,
2044                     bool timed_out)
2045 {
2046         cfq_log_cfqq(cfqd, cfqq, "slice expired t=%d", timed_out);
2047
2048         if (cfq_cfqq_wait_request(cfqq))
2049                 cfq_del_timer(cfqd, cfqq);
2050
2051         cfq_clear_cfqq_wait_request(cfqq);
2052         cfq_clear_cfqq_wait_busy(cfqq);
2053
2054         /*
2055          * If this cfqq is shared between multiple processes, check to
2056          * make sure that those processes are still issuing I/Os within
2057          * the mean seek distance.  If not, it may be time to break the
2058          * queues apart again.
2059          */
2060         if (cfq_cfqq_coop(cfqq) && CFQQ_SEEKY(cfqq))
2061                 cfq_mark_cfqq_split_coop(cfqq);
2062
2063         /*
2064          * store what was left of this slice, if the queue idled/timed out
2065          */
2066         if (timed_out) {
2067                 if (cfq_cfqq_slice_new(cfqq))
2068                         cfqq->slice_resid = cfq_scaled_cfqq_slice(cfqd, cfqq);
2069                 else
2070                         cfqq->slice_resid = cfqq->slice_end - jiffies;
2071                 cfq_log_cfqq(cfqd, cfqq, "resid=%ld", cfqq->slice_resid);
2072         }
2073
2074         cfq_group_served(cfqd, cfqq->cfqg, cfqq);
2075
2076         if (cfq_cfqq_on_rr(cfqq) && RB_EMPTY_ROOT(&cfqq->sort_list))
2077                 cfq_del_cfqq_rr(cfqd, cfqq);
2078
2079         cfq_resort_rr_list(cfqd, cfqq);
2080
2081         if (cfqq == cfqd->active_queue)
2082                 cfqd->active_queue = NULL;
2083
2084         if (cfqd->active_cic) {
2085                 put_io_context(cfqd->active_cic->icq.ioc);
2086                 cfqd->active_cic = NULL;
2087         }
2088 }
2089
2090 static inline void cfq_slice_expired(struct cfq_data *cfqd, bool timed_out)
2091 {
2092         struct cfq_queue *cfqq = cfqd->active_queue;
2093
2094         if (cfqq)
2095                 __cfq_slice_expired(cfqd, cfqq, timed_out);
2096 }
2097
2098 /*
2099  * Get next queue for service. Unless we have a queue preemption,
2100  * we'll simply select the first cfqq in the service tree.
2101  */
2102 static struct cfq_queue *cfq_get_next_queue(struct cfq_data *cfqd)
2103 {
2104         struct cfq_rb_root *service_tree =
2105                 service_tree_for(cfqd->serving_group, cfqd->serving_prio,
2106                                         cfqd->serving_type);
2107
2108         if (!cfqd->rq_queued)
2109                 return NULL;
2110
2111         /* There is nothing to dispatch */
2112         if (!service_tree)
2113                 return NULL;
2114         if (RB_EMPTY_ROOT(&service_tree->rb))
2115                 return NULL;
2116         return cfq_rb_first(service_tree);
2117 }
2118
2119 static struct cfq_queue *cfq_get_next_queue_forced(struct cfq_data *cfqd)
2120 {
2121         struct cfq_group *cfqg;
2122         struct cfq_queue *cfqq;
2123         int i, j;
2124         struct cfq_rb_root *st;
2125
2126         if (!cfqd->rq_queued)
2127                 return NULL;
2128
2129         cfqg = cfq_get_next_cfqg(cfqd);
2130         if (!cfqg)
2131                 return NULL;
2132
2133         for_each_cfqg_st(cfqg, i, j, st)
2134                 if ((cfqq = cfq_rb_first(st)) != NULL)
2135                         return cfqq;
2136         return NULL;
2137 }
2138
2139 /*
2140  * Get and set a new active queue for service.
2141  */
2142 static struct cfq_queue *cfq_set_active_queue(struct cfq_data *cfqd,
2143                                               struct cfq_queue *cfqq)
2144 {
2145         if (!cfqq)
2146                 cfqq = cfq_get_next_queue(cfqd);
2147
2148         __cfq_set_active_queue(cfqd, cfqq);
2149         return cfqq;
2150 }
2151
2152 static inline sector_t cfq_dist_from_last(struct cfq_data *cfqd,
2153                                           struct request *rq)
2154 {
2155         if (blk_rq_pos(rq) >= cfqd->last_position)
2156                 return blk_rq_pos(rq) - cfqd->last_position;
2157         else
2158                 return cfqd->last_position - blk_rq_pos(rq);
2159 }
2160
2161 static inline int cfq_rq_close(struct cfq_data *cfqd, struct cfq_queue *cfqq,
2162                                struct request *rq)
2163 {
2164         return cfq_dist_from_last(cfqd, rq) <= CFQQ_CLOSE_THR;
2165 }
2166
2167 static struct cfq_queue *cfqq_close(struct cfq_data *cfqd,
2168                                     struct cfq_queue *cur_cfqq)
2169 {
2170         struct rb_root *root = &cfqd->prio_trees[cur_cfqq->org_ioprio];
2171         struct rb_node *parent, *node;
2172         struct cfq_queue *__cfqq;
2173         sector_t sector = cfqd->last_position;
2174
2175         if (RB_EMPTY_ROOT(root))
2176                 return NULL;
2177
2178         /*
2179          * First, if we find a request starting at the end of the last
2180          * request, choose it.
2181          */
2182         __cfqq = cfq_prio_tree_lookup(cfqd, root, sector, &parent, NULL);
2183         if (__cfqq)
2184                 return __cfqq;
2185
2186         /*
2187          * If the exact sector wasn't found, the parent of the NULL leaf
2188          * will contain the closest sector.
2189          */
2190         __cfqq = rb_entry(parent, struct cfq_queue, p_node);
2191         if (cfq_rq_close(cfqd, cur_cfqq, __cfqq->next_rq))
2192                 return __cfqq;
2193
2194         if (blk_rq_pos(__cfqq->next_rq) < sector)
2195                 node = rb_next(&__cfqq->p_node);
2196         else
2197                 node = rb_prev(&__cfqq->p_node);
2198         if (!node)
2199                 return NULL;
2200
2201         __cfqq = rb_entry(node, struct cfq_queue, p_node);
2202         if (cfq_rq_close(cfqd, cur_cfqq, __cfqq->next_rq))
2203                 return __cfqq;
2204
2205         return NULL;
2206 }
2207
2208 /*
2209  * cfqd - obvious
2210  * cur_cfqq - passed in so that we don't decide that the current queue is
2211  *            closely cooperating with itself.
2212  *
2213  * So, basically we're assuming that that cur_cfqq has dispatched at least
2214  * one request, and that cfqd->last_position reflects a position on the disk
2215  * associated with the I/O issued by cur_cfqq.  I'm not sure this is a valid
2216  * assumption.
2217  */
2218 static struct cfq_queue *cfq_close_cooperator(struct cfq_data *cfqd,
2219                                               struct cfq_queue *cur_cfqq)
2220 {
2221         struct cfq_queue *cfqq;
2222
2223         if (cfq_class_idle(cur_cfqq))
2224                 return NULL;
2225         if (!cfq_cfqq_sync(cur_cfqq))
2226                 return NULL;
2227         if (CFQQ_SEEKY(cur_cfqq))
2228                 return NULL;
2229
2230         /*
2231          * Don't search priority tree if it's the only queue in the group.
2232          */
2233         if (cur_cfqq->cfqg->nr_cfqq == 1)
2234                 return NULL;
2235
2236         /*
2237          * We should notice if some of the queues are cooperating, eg
2238          * working closely on the same area of the disk. In that case,
2239          * we can group them together and don't waste time idling.
2240          */
2241         cfqq = cfqq_close(cfqd, cur_cfqq);
2242         if (!cfqq)
2243                 return NULL;
2244
2245         /* If new queue belongs to different cfq_group, don't choose it */
2246         if (cur_cfqq->cfqg != cfqq->cfqg)
2247                 return NULL;
2248
2249         /*
2250          * It only makes sense to merge sync queues.
2251          */
2252         if (!cfq_cfqq_sync(cfqq))
2253                 return NULL;
2254         if (CFQQ_SEEKY(cfqq))
2255                 return NULL;
2256
2257         /*
2258          * Do not merge queues of different priority classes
2259          */
2260         if (cfq_class_rt(cfqq) != cfq_class_rt(cur_cfqq))
2261                 return NULL;
2262
2263         return cfqq;
2264 }
2265
2266 /*
2267  * Determine whether we should enforce idle window for this queue.
2268  */
2269
2270 static bool cfq_should_idle(struct cfq_data *cfqd, struct cfq_queue *cfqq)
2271 {
2272         enum wl_prio_t prio = cfqq_prio(cfqq);
2273         struct cfq_rb_root *service_tree = cfqq->service_tree;
2274
2275         BUG_ON(!service_tree);
2276         BUG_ON(!service_tree->count);
2277
2278         if (!cfqd->cfq_slice_idle)
2279                 return false;
2280
2281         /* We never do for idle class queues. */
2282         if (prio == IDLE_WORKLOAD)
2283                 return false;
2284
2285         /* We do for queues that were marked with idle window flag. */
2286         if (cfq_cfqq_idle_window(cfqq) &&
2287            !(blk_queue_nonrot(cfqd->queue) && cfqd->hw_tag))
2288                 return true;
2289
2290         /*
2291          * Otherwise, we do only if they are the last ones
2292          * in their service tree.
2293          */
2294         if (service_tree->count == 1 && cfq_cfqq_sync(cfqq) &&
2295            !cfq_io_thinktime_big(cfqd, &service_tree->ttime, false))
2296                 return true;
2297         cfq_log_cfqq(cfqd, cfqq, "Not idling. st->count:%d",
2298                         service_tree->count);
2299         return false;
2300 }
2301
2302 static void cfq_arm_slice_timer(struct cfq_data *cfqd)
2303 {
2304         struct cfq_queue *cfqq = cfqd->active_queue;
2305         struct cfq_io_cq *cic;
2306         unsigned long sl, group_idle = 0;
2307
2308         /*
2309          * SSD device without seek penalty, disable idling. But only do so
2310          * for devices that support queuing, otherwise we still have a problem
2311          * with sync vs async workloads.
2312          */
2313         if (blk_queue_nonrot(cfqd->queue) && cfqd->hw_tag)
2314                 return;
2315
2316         WARN_ON(!RB_EMPTY_ROOT(&cfqq->sort_list));
2317         WARN_ON(cfq_cfqq_slice_new(cfqq));
2318
2319         /*
2320          * idle is disabled, either manually or by past process history
2321          */
2322         if (!cfq_should_idle(cfqd, cfqq)) {
2323                 /* no queue idling. Check for group idling */
2324                 if (cfqd->cfq_group_idle)
2325                         group_idle = cfqd->cfq_group_idle;
2326                 else
2327                         return;
2328         }
2329
2330         /*
2331          * still active requests from this queue, don't idle
2332          */
2333         if (cfqq->dispatched)
2334                 return;
2335
2336         /*
2337          * task has exited, don't wait
2338          */
2339         cic = cfqd->active_cic;
2340         if (!cic || !atomic_read(&cic->icq.ioc->active_ref))
2341                 return;
2342
2343         /*
2344          * If our average think time is larger than the remaining time
2345          * slice, then don't idle. This avoids overrunning the allotted
2346          * time slice.
2347          */
2348         if (sample_valid(cic->ttime.ttime_samples) &&
2349             (cfqq->slice_end - jiffies < cic->ttime.ttime_mean)) {
2350                 cfq_log_cfqq(cfqd, cfqq, "Not idling. think_time:%lu",
2351                              cic->ttime.ttime_mean);
2352                 return;
2353         }
2354
2355         /* There are other queues in the group, don't do group idle */
2356         if (group_idle && cfqq->cfqg->nr_cfqq > 1)
2357                 return;
2358
2359         cfq_mark_cfqq_wait_request(cfqq);
2360
2361         if (group_idle)
2362                 sl = cfqd->cfq_group_idle;
2363         else
2364                 sl = cfqd->cfq_slice_idle;
2365
2366         mod_timer(&cfqd->idle_slice_timer, jiffies + sl);
2367         cfqg_stats_set_start_idle_time(cfqq->cfqg);
2368         cfq_log_cfqq(cfqd, cfqq, "arm_idle: %lu group_idle: %d", sl,
2369                         group_idle ? 1 : 0);
2370 }
2371
2372 /*
2373  * Move request from internal lists to the request queue dispatch list.
2374  */
2375 static void cfq_dispatch_insert(struct request_queue *q, struct request *rq)
2376 {
2377         struct cfq_data *cfqd = q->elevator->elevator_data;
2378         struct cfq_queue *cfqq = RQ_CFQQ(rq);
2379
2380         cfq_log_cfqq(cfqd, cfqq, "dispatch_insert");
2381
2382         cfqq->next_rq = cfq_find_next_rq(cfqd, cfqq, rq);
2383         cfq_remove_request(rq);
2384         cfqq->dispatched++;
2385         (RQ_CFQG(rq))->dispatched++;
2386         elv_dispatch_sort(q, rq);
2387
2388         cfqd->rq_in_flight[cfq_cfqq_sync(cfqq)]++;
2389         cfqq->nr_sectors += blk_rq_sectors(rq);
2390         cfqg_stats_update_dispatch(cfqq->cfqg, blk_rq_bytes(rq), rq->cmd_flags);
2391 }
2392
2393 /*
2394  * return expired entry, or NULL to just start from scratch in rbtree
2395  */
2396 static struct request *cfq_check_fifo(struct cfq_queue *cfqq)
2397 {
2398         struct request *rq = NULL;
2399
2400         if (cfq_cfqq_fifo_expire(cfqq))
2401                 return NULL;
2402
2403         cfq_mark_cfqq_fifo_expire(cfqq);
2404
2405         if (list_empty(&cfqq->fifo))
2406                 return NULL;
2407
2408         rq = rq_entry_fifo(cfqq->fifo.next);
2409         if (time_before(jiffies, rq_fifo_time(rq)))
2410                 rq = NULL;
2411
2412         cfq_log_cfqq(cfqq->cfqd, cfqq, "fifo=%p", rq);
2413         return rq;
2414 }
2415
2416 static inline int
2417 cfq_prio_to_maxrq(struct cfq_data *cfqd, struct cfq_queue *cfqq)
2418 {
2419         const int base_rq = cfqd->cfq_slice_async_rq;
2420
2421         WARN_ON(cfqq->ioprio >= IOPRIO_BE_NR);
2422
2423         return 2 * base_rq * (IOPRIO_BE_NR - cfqq->ioprio);
2424 }
2425
2426 /*
2427  * Must be called with the queue_lock held.
2428  */
2429 static int cfqq_process_refs(struct cfq_queue *cfqq)
2430 {
2431         int process_refs, io_refs;
2432
2433         io_refs = cfqq->allocated[READ] + cfqq->allocated[WRITE];
2434         process_refs = cfqq->ref - io_refs;
2435         BUG_ON(process_refs < 0);
2436         return process_refs;
2437 }
2438
2439 static void cfq_setup_merge(struct cfq_queue *cfqq, struct cfq_queue *new_cfqq)
2440 {
2441         int process_refs, new_process_refs;
2442         struct cfq_queue *__cfqq;
2443
2444         /*
2445          * If there are no process references on the new_cfqq, then it is
2446          * unsafe to follow the ->new_cfqq chain as other cfqq's in the
2447          * chain may have dropped their last reference (not just their
2448          * last process reference).
2449          */
2450         if (!cfqq_process_refs(new_cfqq))
2451                 return;
2452
2453         /* Avoid a circular list and skip interim queue merges */
2454         while ((__cfqq = new_cfqq->new_cfqq)) {
2455                 if (__cfqq == cfqq)
2456                         return;
2457                 new_cfqq = __cfqq;
2458         }
2459
2460         process_refs = cfqq_process_refs(cfqq);
2461         new_process_refs = cfqq_process_refs(new_cfqq);
2462         /*
2463          * If the process for the cfqq has gone away, there is no
2464          * sense in merging the queues.
2465          */
2466         if (process_refs == 0 || new_process_refs == 0)
2467                 return;
2468
2469         /*
2470          * Merge in the direction of the lesser amount of work.
2471          */
2472         if (new_process_refs >= process_refs) {
2473                 cfqq->new_cfqq = new_cfqq;
2474                 new_cfqq->ref += process_refs;
2475         } else {
2476                 new_cfqq->new_cfqq = cfqq;
2477                 cfqq->ref += new_process_refs;
2478         }
2479 }
2480
2481 static enum wl_type_t cfq_choose_wl(struct cfq_data *cfqd,
2482                                 struct cfq_group *cfqg, enum wl_prio_t prio)
2483 {
2484         struct cfq_queue *queue;
2485         int i;
2486         bool key_valid = false;
2487         unsigned long lowest_key = 0;
2488         enum wl_type_t cur_best = SYNC_NOIDLE_WORKLOAD;
2489
2490         for (i = 0; i <= SYNC_WORKLOAD; ++i) {
2491                 /* select the one with lowest rb_key */
2492                 queue = cfq_rb_first(service_tree_for(cfqg, prio, i));
2493                 if (queue &&
2494                     (!key_valid || time_before(queue->rb_key, lowest_key))) {
2495                         lowest_key = queue->rb_key;
2496                         cur_best = i;
2497                         key_valid = true;
2498                 }
2499         }
2500
2501         return cur_best;
2502 }
2503
2504 static void choose_service_tree(struct cfq_data *cfqd, struct cfq_group *cfqg)
2505 {
2506         unsigned slice;
2507         unsigned count;
2508         struct cfq_rb_root *st;
2509         unsigned group_slice;
2510         enum wl_prio_t original_prio = cfqd->serving_prio;
2511
2512         /* Choose next priority. RT > BE > IDLE */
2513         if (cfq_group_busy_queues_wl(RT_WORKLOAD, cfqd, cfqg))
2514                 cfqd->serving_prio = RT_WORKLOAD;
2515         else if (cfq_group_busy_queues_wl(BE_WORKLOAD, cfqd, cfqg))
2516                 cfqd->serving_prio = BE_WORKLOAD;
2517         else {
2518                 cfqd->serving_prio = IDLE_WORKLOAD;
2519                 cfqd->workload_expires = jiffies + 1;
2520                 return;
2521         }
2522
2523         if (original_prio != cfqd->serving_prio)
2524                 goto new_workload;
2525
2526         /*
2527          * For RT and BE, we have to choose also the type
2528          * (SYNC, SYNC_NOIDLE, ASYNC), and to compute a workload
2529          * expiration time
2530          */
2531         st = service_tree_for(cfqg, cfqd->serving_prio, cfqd->serving_type);
2532         count = st->count;
2533
2534         /*
2535          * check workload expiration, and that we still have other queues ready
2536          */
2537         if (count && !time_after(jiffies, cfqd->workload_expires))
2538                 return;
2539
2540 new_workload:
2541         /* otherwise select new workload type */
2542         cfqd->serving_type =
2543                 cfq_choose_wl(cfqd, cfqg, cfqd->serving_prio);
2544         st = service_tree_for(cfqg, cfqd->serving_prio, cfqd->serving_type);
2545         count = st->count;
2546
2547         /*
2548          * the workload slice is computed as a fraction of target latency
2549          * proportional to the number of queues in that workload, over
2550          * all the queues in the same priority class
2551          */
2552         group_slice = cfq_group_slice(cfqd, cfqg);
2553
2554         slice = group_slice * count /
2555                 max_t(unsigned, cfqg->busy_queues_avg[cfqd->serving_prio],
2556                       cfq_group_busy_queues_wl(cfqd->serving_prio, cfqd, cfqg));
2557
2558         if (cfqd->serving_type == ASYNC_WORKLOAD) {
2559                 unsigned int tmp;
2560
2561                 /*
2562                  * Async queues are currently system wide. Just taking
2563                  * proportion of queues with-in same group will lead to higher
2564                  * async ratio system wide as generally root group is going
2565                  * to have higher weight. A more accurate thing would be to
2566                  * calculate system wide asnc/sync ratio.
2567                  */
2568                 tmp = cfq_target_latency * cfqg_busy_async_queues(cfqd, cfqg);
2569                 tmp = tmp/cfqd->busy_queues;
2570                 slice = min_t(unsigned, slice, tmp);
2571
2572                 /* async workload slice is scaled down according to
2573                  * the sync/async slice ratio. */
2574                 slice = slice * cfqd->cfq_slice[0] / cfqd->cfq_slice[1];
2575         } else
2576                 /* sync workload slice is at least 2 * cfq_slice_idle */
2577                 slice = max(slice, 2 * cfqd->cfq_slice_idle);
2578
2579         slice = max_t(unsigned, slice, CFQ_MIN_TT);
2580         cfq_log(cfqd, "workload slice:%d", slice);
2581         cfqd->workload_expires = jiffies + slice;
2582 }
2583
2584 static struct cfq_group *cfq_get_next_cfqg(struct cfq_data *cfqd)
2585 {
2586         struct cfq_rb_root *st = &cfqd->grp_service_tree;
2587         struct cfq_group *cfqg;
2588
2589         if (RB_EMPTY_ROOT(&st->rb))
2590                 return NULL;
2591         cfqg = cfq_rb_first_group(st);
2592         update_min_vdisktime(st);
2593         return cfqg;
2594 }
2595
2596 static void cfq_choose_cfqg(struct cfq_data *cfqd)
2597 {
2598         struct cfq_group *cfqg = cfq_get_next_cfqg(cfqd);
2599
2600         cfqd->serving_group = cfqg;
2601
2602         /* Restore the workload type data */
2603         if (cfqg->saved_workload_slice) {
2604                 cfqd->workload_expires = jiffies + cfqg->saved_workload_slice;
2605                 cfqd->serving_type = cfqg->saved_workload;
2606                 cfqd->serving_prio = cfqg->saved_serving_prio;
2607         } else
2608                 cfqd->workload_expires = jiffies - 1;
2609
2610         choose_service_tree(cfqd, cfqg);
2611 }
2612
2613 /*
2614  * Select a queue for service. If we have a current active queue,
2615  * check whether to continue servicing it, or retrieve and set a new one.
2616  */
2617 static struct cfq_queue *cfq_select_queue(struct cfq_data *cfqd)
2618 {
2619         struct cfq_queue *cfqq, *new_cfqq = NULL;
2620
2621         cfqq = cfqd->active_queue;
2622         if (!cfqq)
2623                 goto new_queue;
2624
2625         if (!cfqd->rq_queued)
2626                 return NULL;
2627
2628         /*
2629          * We were waiting for group to get backlogged. Expire the queue
2630          */
2631         if (cfq_cfqq_wait_busy(cfqq) && !RB_EMPTY_ROOT(&cfqq->sort_list))
2632                 goto expire;
2633
2634         /*
2635          * The active queue has run out of time, expire it and select new.
2636          */
2637         if (cfq_slice_used(cfqq) && !cfq_cfqq_must_dispatch(cfqq)) {
2638                 /*
2639                  * If slice had not expired at the completion of last request
2640                  * we might not have turned on wait_busy flag. Don't expire
2641                  * the queue yet. Allow the group to get backlogged.
2642                  *
2643                  * The very fact that we have used the slice, that means we
2644                  * have been idling all along on this queue and it should be
2645                  * ok to wait for this request to complete.
2646                  */
2647                 if (cfqq->cfqg->nr_cfqq == 1 && RB_EMPTY_ROOT(&cfqq->sort_list)
2648                     && cfqq->dispatched && cfq_should_idle(cfqd, cfqq)) {
2649                         cfqq = NULL;
2650                         goto keep_queue;
2651                 } else
2652                         goto check_group_idle;
2653         }
2654
2655         /*
2656          * The active queue has requests and isn't expired, allow it to
2657          * dispatch.
2658          */
2659         if (!RB_EMPTY_ROOT(&cfqq->sort_list))
2660                 goto keep_queue;
2661
2662         /*
2663          * If another queue has a request waiting within our mean seek
2664          * distance, let it run.  The expire code will check for close
2665          * cooperators and put the close queue at the front of the service
2666          * tree.  If possible, merge the expiring queue with the new cfqq.
2667          */
2668         new_cfqq = cfq_close_cooperator(cfqd, cfqq);
2669         if (new_cfqq) {
2670                 if (!cfqq->new_cfqq)
2671                         cfq_setup_merge(cfqq, new_cfqq);
2672                 goto expire;
2673         }
2674
2675         /*
2676          * No requests pending. If the active queue still has requests in
2677          * flight or is idling for a new request, allow either of these
2678          * conditions to happen (or time out) before selecting a new queue.
2679          */
2680         if (timer_pending(&cfqd->idle_slice_timer)) {
2681                 cfqq = NULL;
2682                 goto keep_queue;
2683         }
2684
2685         /*
2686          * This is a deep seek queue, but the device is much faster than
2687          * the queue can deliver, don't idle
2688          **/
2689         if (CFQQ_SEEKY(cfqq) && cfq_cfqq_idle_window(cfqq) &&
2690             (cfq_cfqq_slice_new(cfqq) ||
2691             (cfqq->slice_end - jiffies > jiffies - cfqq->slice_start))) {
2692                 cfq_clear_cfqq_deep(cfqq);
2693                 cfq_clear_cfqq_idle_window(cfqq);
2694         }
2695
2696         if (cfqq->dispatched && cfq_should_idle(cfqd, cfqq)) {
2697                 cfqq = NULL;
2698                 goto keep_queue;
2699         }
2700
2701         /*
2702          * If group idle is enabled and there are requests dispatched from
2703          * this group, wait for requests to complete.
2704          */
2705 check_group_idle:
2706         if (cfqd->cfq_group_idle && cfqq->cfqg->nr_cfqq == 1 &&
2707             cfqq->cfqg->dispatched &&
2708             !cfq_io_thinktime_big(cfqd, &cfqq->cfqg->ttime, true)) {
2709                 cfqq = NULL;
2710                 goto keep_queue;
2711         }
2712
2713 expire:
2714         cfq_slice_expired(cfqd, 0);
2715 new_queue:
2716         /*
2717          * Current queue expired. Check if we have to switch to a new
2718          * service tree
2719          */
2720         if (!new_cfqq)
2721                 cfq_choose_cfqg(cfqd);
2722
2723         cfqq = cfq_set_active_queue(cfqd, new_cfqq);
2724 keep_queue:
2725         return cfqq;
2726 }
2727
2728 static int __cfq_forced_dispatch_cfqq(struct cfq_queue *cfqq)
2729 {
2730         int dispatched = 0;
2731
2732         while (cfqq->next_rq) {
2733                 cfq_dispatch_insert(cfqq->cfqd->queue, cfqq->next_rq);
2734                 dispatched++;
2735         }
2736
2737         BUG_ON(!list_empty(&cfqq->fifo));
2738
2739         /* By default cfqq is not expired if it is empty. Do it explicitly */
2740         __cfq_slice_expired(cfqq->cfqd, cfqq, 0);
2741         return dispatched;
2742 }
2743
2744 /*
2745  * Drain our current requests. Used for barriers and when switching
2746  * io schedulers on-the-fly.
2747  */
2748 static int cfq_forced_dispatch(struct cfq_data *cfqd)
2749 {
2750         struct cfq_queue *cfqq;
2751         int dispatched = 0;
2752
2753         /* Expire the timeslice of the current active queue first */
2754         cfq_slice_expired(cfqd, 0);
2755         while ((cfqq = cfq_get_next_queue_forced(cfqd)) != NULL) {
2756                 __cfq_set_active_queue(cfqd, cfqq);
2757                 dispatched += __cfq_forced_dispatch_cfqq(cfqq);
2758         }
2759
2760         BUG_ON(cfqd->busy_queues);
2761
2762         cfq_log(cfqd, "forced_dispatch=%d", dispatched);
2763         return dispatched;
2764 }
2765
2766 static inline bool cfq_slice_used_soon(struct cfq_data *cfqd,
2767         struct cfq_queue *cfqq)
2768 {
2769         /* the queue hasn't finished any request, can't estimate */
2770         if (cfq_cfqq_slice_new(cfqq))
2771                 return true;
2772         if (time_after(jiffies + cfqd->cfq_slice_idle * cfqq->dispatched,
2773                 cfqq->slice_end))
2774                 return true;
2775
2776         return false;
2777 }
2778
2779 static bool cfq_may_dispatch(struct cfq_data *cfqd, struct cfq_queue *cfqq)
2780 {
2781         unsigned int max_dispatch;
2782
2783         /*
2784          * Drain async requests before we start sync IO
2785          */
2786         if (cfq_should_idle(cfqd, cfqq) && cfqd->rq_in_flight[BLK_RW_ASYNC])
2787                 return false;
2788
2789         /*
2790          * If this is an async queue and we have sync IO in flight, let it wait
2791          */
2792         if (cfqd->rq_in_flight[BLK_RW_SYNC] && !cfq_cfqq_sync(cfqq))
2793                 return false;
2794
2795         max_dispatch = max_t(unsigned int, cfqd->cfq_quantum / 2, 1);
2796         if (cfq_class_idle(cfqq))
2797                 max_dispatch = 1;
2798
2799         /*
2800          * Does this cfqq already have too much IO in flight?
2801          */
2802         if (cfqq->dispatched >= max_dispatch) {
2803                 bool promote_sync = false;
2804                 /*
2805                  * idle queue must always only have a single IO in flight
2806                  */
2807                 if (cfq_class_idle(cfqq))
2808                         return false;
2809
2810                 /*
2811                  * If there is only one sync queue
2812                  * we can ignore async queue here and give the sync
2813                  * queue no dispatch limit. The reason is a sync queue can
2814                  * preempt async queue, limiting the sync queue doesn't make
2815                  * sense. This is useful for aiostress test.
2816                  */
2817                 if (cfq_cfqq_sync(cfqq) && cfqd->busy_sync_queues == 1)
2818                         promote_sync = true;
2819
2820                 /*
2821                  * We have other queues, don't allow more IO from this one
2822                  */
2823                 if (cfqd->busy_queues > 1 && cfq_slice_used_soon(cfqd, cfqq) &&
2824                                 !promote_sync)
2825                         return false;
2826
2827                 /*
2828                  * Sole queue user, no limit
2829                  */
2830                 if (cfqd->busy_queues == 1 || promote_sync)
2831                         max_dispatch = -1;
2832                 else
2833                         /*
2834                          * Normally we start throttling cfqq when cfq_quantum/2
2835                          * requests have been dispatched. But we can drive
2836                          * deeper queue depths at the beginning of slice
2837                          * subjected to upper limit of cfq_quantum.
2838                          * */
2839                         max_dispatch = cfqd->cfq_quantum;
2840         }
2841
2842         /*
2843          * Async queues must wait a bit before being allowed dispatch.
2844          * We also ramp up the dispatch depth gradually for async IO,
2845          * based on the last sync IO we serviced
2846          */
2847         if (!cfq_cfqq_sync(cfqq) && cfqd->cfq_latency) {
2848                 unsigned long last_sync = jiffies - cfqd->last_delayed_sync;
2849                 unsigned int depth;
2850
2851                 depth = last_sync / cfqd->cfq_slice[1];
2852                 if (!depth && !cfqq->dispatched)
2853                         depth = 1;
2854                 if (depth < max_dispatch)
2855                         max_dispatch = depth;
2856         }
2857
2858         /*
2859          * If we're below the current max, allow a dispatch
2860          */
2861         return cfqq->dispatched < max_dispatch;
2862 }
2863
2864 /*
2865  * Dispatch a request from cfqq, moving them to the request queue
2866  * dispatch list.
2867  */
2868 static bool cfq_dispatch_request(struct cfq_data *cfqd, struct cfq_queue *cfqq)
2869 {
2870         struct request *rq;
2871
2872         BUG_ON(RB_EMPTY_ROOT(&cfqq->sort_list));
2873
2874         if (!cfq_may_dispatch(cfqd, cfqq))
2875                 return false;
2876
2877         /*
2878          * follow expired path, else get first next available
2879          */
2880         rq = cfq_check_fifo(cfqq);
2881         if (!rq)
2882                 rq = cfqq->next_rq;
2883
2884         /*
2885          * insert request into driver dispatch list
2886          */
2887         cfq_dispatch_insert(cfqd->queue, rq);
2888
2889         if (!cfqd->active_cic) {
2890                 struct cfq_io_cq *cic = RQ_CIC(rq);
2891
2892                 atomic_long_inc(&cic->icq.ioc->refcount);
2893                 cfqd->active_cic = cic;
2894         }
2895
2896         return true;
2897 }
2898
2899 /*
2900  * Find the cfqq that we need to service and move a request from that to the
2901  * dispatch list
2902  */
2903 static int cfq_dispatch_requests(struct request_queue *q, int force)
2904 {
2905         struct cfq_data *cfqd = q->elevator->elevator_data;
2906         struct cfq_queue *cfqq;
2907
2908         if (!cfqd->busy_queues)
2909                 return 0;
2910
2911         if (unlikely(force))
2912                 return cfq_forced_dispatch(cfqd);
2913
2914         cfqq = cfq_select_queue(cfqd);
2915         if (!cfqq)
2916                 return 0;
2917
2918         /*
2919          * Dispatch a request from this cfqq, if it is allowed
2920          */
2921         if (!cfq_dispatch_request(cfqd, cfqq))
2922                 return 0;
2923
2924         cfqq->slice_dispatch++;
2925         cfq_clear_cfqq_must_dispatch(cfqq);
2926
2927         /*
2928          * expire an async queue immediately if it has used up its slice. idle
2929          * queue always expire after 1 dispatch round.
2930          */
2931         if (cfqd->busy_queues > 1 && ((!cfq_cfqq_sync(cfqq) &&
2932             cfqq->slice_dispatch >= cfq_prio_to_maxrq(cfqd, cfqq)) ||
2933             cfq_class_idle(cfqq))) {
2934                 cfqq->slice_end = jiffies + 1;
2935                 cfq_slice_expired(cfqd, 0);
2936         }
2937
2938         cfq_log_cfqq(cfqd, cfqq, "dispatched a request");
2939         return 1;
2940 }
2941
2942 /*
2943  * task holds one reference to the queue, dropped when task exits. each rq
2944  * in-flight on this queue also holds a reference, dropped when rq is freed.
2945  *
2946  * Each cfq queue took a reference on the parent group. Drop it now.
2947  * queue lock must be held here.
2948  */
2949 static void cfq_put_queue(struct cfq_queue *cfqq)
2950 {
2951         struct cfq_data *cfqd = cfqq->cfqd;
2952         struct cfq_group *cfqg;
2953
2954         BUG_ON(cfqq->ref <= 0);
2955
2956         cfqq->ref--;
2957         if (cfqq->ref)
2958                 return;
2959
2960         cfq_log_cfqq(cfqd, cfqq, "put_queue");
2961         BUG_ON(rb_first(&cfqq->sort_list));
2962         BUG_ON(cfqq->allocated[READ] + cfqq->allocated[WRITE]);
2963         cfqg = cfqq->cfqg;
2964
2965         if (unlikely(cfqd->active_queue == cfqq)) {
2966                 __cfq_slice_expired(cfqd, cfqq, 0);
2967                 cfq_schedule_dispatch(cfqd);
2968         }
2969
2970         BUG_ON(cfq_cfqq_on_rr(cfqq));
2971         kmem_cache_free(cfq_pool, cfqq);
2972         cfqg_put(cfqg);
2973 }
2974
2975 static void cfq_put_cooperator(struct cfq_queue *cfqq)
2976 {
2977         struct cfq_queue *__cfqq, *next;
2978
2979         /*
2980          * If this queue was scheduled to merge with another queue, be
2981          * sure to drop the reference taken on that queue (and others in
2982          * the merge chain).  See cfq_setup_merge and cfq_merge_cfqqs.
2983          */
2984         __cfqq = cfqq->new_cfqq;
2985         while (__cfqq) {
2986                 if (__cfqq == cfqq) {
2987                         WARN(1, "cfqq->new_cfqq loop detected\n");
2988                         break;
2989                 }
2990                 next = __cfqq->new_cfqq;
2991                 cfq_put_queue(__cfqq);
2992                 __cfqq = next;
2993         }
2994 }
2995
2996 static void cfq_exit_cfqq(struct cfq_data *cfqd, struct cfq_queue *cfqq)
2997 {
2998         if (unlikely(cfqq == cfqd->active_queue)) {
2999                 __cfq_slice_expired(cfqd, cfqq, 0);
3000                 cfq_schedule_dispatch(cfqd);
3001         }
3002
3003         cfq_put_cooperator(cfqq);
3004
3005         cfq_put_queue(cfqq);
3006 }
3007
3008 static void cfq_init_icq(struct io_cq *icq)
3009 {
3010         struct cfq_io_cq *cic = icq_to_cic(icq);
3011
3012         cic->ttime.last_end_request = jiffies;
3013 }
3014
3015 static void cfq_exit_icq(struct io_cq *icq)
3016 {
3017         struct cfq_io_cq *cic = icq_to_cic(icq);
3018         struct cfq_data *cfqd = cic_to_cfqd(cic);
3019
3020         if (cic->cfqq[BLK_RW_ASYNC]) {
3021                 cfq_exit_cfqq(cfqd, cic->cfqq[BLK_RW_ASYNC]);
3022                 cic->cfqq[BLK_RW_ASYNC] = NULL;
3023         }
3024
3025         if (cic->cfqq[BLK_RW_SYNC]) {
3026                 cfq_exit_cfqq(cfqd, cic->cfqq[BLK_RW_SYNC]);
3027                 cic->cfqq[BLK_RW_SYNC] = NULL;
3028         }
3029 }
3030
3031 static void cfq_init_prio_data(struct cfq_queue *cfqq, struct cfq_io_cq *cic)
3032 {
3033         struct task_struct *tsk = current;
3034         int ioprio_class;
3035
3036         if (!cfq_cfqq_prio_changed(cfqq))
3037                 return;
3038
3039         ioprio_class = IOPRIO_PRIO_CLASS(cic->ioprio);
3040         switch (ioprio_class) {
3041         default:
3042                 printk(KERN_ERR "cfq: bad prio %x\n", ioprio_class);
3043         case IOPRIO_CLASS_NONE:
3044                 /*
3045                  * no prio set, inherit CPU scheduling settings
3046                  */
3047                 cfqq->ioprio = task_nice_ioprio(tsk);
3048                 cfqq->ioprio_class = task_nice_ioclass(tsk);
3049                 break;
3050         case IOPRIO_CLASS_RT:
3051                 cfqq->ioprio = IOPRIO_PRIO_DATA(cic->ioprio);
3052                 cfqq->ioprio_class = IOPRIO_CLASS_RT;
3053                 break;
3054         case IOPRIO_CLASS_BE:
3055                 cfqq->ioprio = IOPRIO_PRIO_DATA(cic->ioprio);
3056                 cfqq->ioprio_class = IOPRIO_CLASS_BE;
3057                 break;
3058         case IOPRIO_CLASS_IDLE:
3059                 cfqq->ioprio_class = IOPRIO_CLASS_IDLE;
3060                 cfqq->ioprio = 7;
3061                 cfq_clear_cfqq_idle_window(cfqq);
3062                 break;
3063         }
3064
3065         /*
3066          * keep track of original prio settings in case we have to temporarily
3067          * elevate the priority of this queue
3068          */
3069         cfqq->org_ioprio = cfqq->ioprio;
3070         cfq_clear_cfqq_prio_changed(cfqq);
3071 }
3072
3073 static void check_ioprio_changed(struct cfq_io_cq *cic, struct bio *bio)
3074 {
3075         int ioprio = cic->icq.ioc->ioprio;
3076         struct cfq_data *cfqd = cic_to_cfqd(cic);
3077         struct cfq_queue *cfqq;
3078
3079         /*
3080          * Check whether ioprio has changed.  The condition may trigger
3081          * spuriously on a newly created cic but there's no harm.
3082          */
3083         if (unlikely(!cfqd) || likely(cic->ioprio == ioprio))
3084                 return;
3085
3086         cfqq = cic->cfqq[BLK_RW_ASYNC];
3087         if (cfqq) {
3088                 struct cfq_queue *new_cfqq;
3089                 new_cfqq = cfq_get_queue(cfqd, BLK_RW_ASYNC, cic, bio,
3090                                          GFP_ATOMIC);
3091                 if (new_cfqq) {
3092                         cic->cfqq[BLK_RW_ASYNC] = new_cfqq;
3093                         cfq_put_queue(cfqq);
3094                 }
3095         }
3096
3097         cfqq = cic->cfqq[BLK_RW_SYNC];
3098         if (cfqq)
3099                 cfq_mark_cfqq_prio_changed(cfqq);
3100
3101         cic->ioprio = ioprio;
3102 }
3103
3104 static void cfq_init_cfqq(struct cfq_data *cfqd, struct cfq_queue *cfqq,
3105                           pid_t pid, bool is_sync)
3106 {
3107         RB_CLEAR_NODE(&cfqq->rb_node);
3108         RB_CLEAR_NODE(&cfqq->p_node);
3109         INIT_LIST_HEAD(&cfqq->fifo);
3110
3111         cfqq->ref = 0;
3112         cfqq->cfqd = cfqd;
3113
3114         cfq_mark_cfqq_prio_changed(cfqq);
3115
3116         if (is_sync) {
3117                 if (!cfq_class_idle(cfqq))
3118                         cfq_mark_cfqq_idle_window(cfqq);
3119                 cfq_mark_cfqq_sync(cfqq);
3120         }
3121         cfqq->pid = pid;
3122 }
3123
3124 #ifdef CONFIG_CFQ_GROUP_IOSCHED
3125 static void check_blkcg_changed(struct cfq_io_cq *cic, struct bio *bio)
3126 {
3127         struct cfq_data *cfqd = cic_to_cfqd(cic);
3128         struct cfq_queue *sync_cfqq;
3129         uint64_t id;
3130
3131         rcu_read_lock();
3132         id = bio_blkio_cgroup(bio)->id;
3133         rcu_read_unlock();
3134
3135         /*
3136          * Check whether blkcg has changed.  The condition may trigger
3137          * spuriously on a newly created cic but there's no harm.
3138          */
3139         if (unlikely(!cfqd) || likely(cic->blkcg_id == id))
3140                 return;
3141
3142         sync_cfqq = cic_to_cfqq(cic, 1);
3143         if (sync_cfqq) {
3144                 /*
3145                  * Drop reference to sync queue. A new sync queue will be
3146                  * assigned in new group upon arrival of a fresh request.
3147                  */
3148                 cfq_log_cfqq(cfqd, sync_cfqq, "changed cgroup");
3149                 cic_set_cfqq(cic, NULL, 1);
3150                 cfq_put_queue(sync_cfqq);
3151         }
3152
3153         cic->blkcg_id = id;
3154 }
3155 #else
3156 static inline void check_blkcg_changed(struct cfq_io_cq *cic, struct bio *bio) { }
3157 #endif  /* CONFIG_CFQ_GROUP_IOSCHED */
3158
3159 static struct cfq_queue *
3160 cfq_find_alloc_queue(struct cfq_data *cfqd, bool is_sync, struct cfq_io_cq *cic,
3161                      struct bio *bio, gfp_t gfp_mask)
3162 {
3163         struct blkio_cgroup *blkcg;
3164         struct cfq_queue *cfqq, *new_cfqq = NULL;
3165         struct cfq_group *cfqg;
3166
3167 retry:
3168         rcu_read_lock();
3169
3170         blkcg = bio_blkio_cgroup(bio);
3171         cfqg = cfq_lookup_create_cfqg(cfqd, blkcg);
3172         cfqq = cic_to_cfqq(cic, is_sync);
3173
3174         /*
3175          * Always try a new alloc if we fell back to the OOM cfqq
3176          * originally, since it should just be a temporary situation.
3177          */
3178         if (!cfqq || cfqq == &cfqd->oom_cfqq) {
3179                 cfqq = NULL;
3180                 if (new_cfqq) {
3181                         cfqq = new_cfqq;
3182                         new_cfqq = NULL;
3183                 } else if (gfp_mask & __GFP_WAIT) {
3184                         rcu_read_unlock();
3185                         spin_unlock_irq(cfqd->queue->queue_lock);
3186                         new_cfqq = kmem_cache_alloc_node(cfq_pool,
3187                                         gfp_mask | __GFP_ZERO,
3188                                         cfqd->queue->node);
3189                         spin_lock_irq(cfqd->queue->queue_lock);
3190                         if (new_cfqq)
3191                                 goto retry;
3192                 } else {
3193                         cfqq = kmem_cache_alloc_node(cfq_pool,
3194                                         gfp_mask | __GFP_ZERO,
3195                                         cfqd->queue->node);
3196                 }
3197
3198                 if (cfqq) {
3199                         cfq_init_cfqq(cfqd, cfqq, current->pid, is_sync);
3200                         cfq_init_prio_data(cfqq, cic);
3201                         cfq_link_cfqq_cfqg(cfqq, cfqg);
3202                         cfq_log_cfqq(cfqd, cfqq, "alloced");
3203                 } else
3204                         cfqq = &cfqd->oom_cfqq;
3205         }
3206
3207         if (new_cfqq)
3208                 kmem_cache_free(cfq_pool, new_cfqq);
3209
3210         rcu_read_unlock();
3211         return cfqq;
3212 }
3213
3214 static struct cfq_queue **
3215 cfq_async_queue_prio(struct cfq_data *cfqd, int ioprio_class, int ioprio)
3216 {
3217         switch (ioprio_class) {
3218         case IOPRIO_CLASS_RT:
3219                 return &cfqd->async_cfqq[0][ioprio];
3220         case IOPRIO_CLASS_NONE:
3221                 ioprio = IOPRIO_NORM;
3222                 /* fall through */
3223         case IOPRIO_CLASS_BE:
3224                 return &cfqd->async_cfqq[1][ioprio];
3225         case IOPRIO_CLASS_IDLE:
3226                 return &cfqd->async_idle_cfqq;
3227         default:
3228                 BUG();
3229         }
3230 }
3231
3232 static struct cfq_queue *
3233 cfq_get_queue(struct cfq_data *cfqd, bool is_sync, struct cfq_io_cq *cic,
3234               struct bio *bio, gfp_t gfp_mask)
3235 {
3236         const int ioprio_class = IOPRIO_PRIO_CLASS(cic->ioprio);
3237         const int ioprio = IOPRIO_PRIO_DATA(cic->ioprio);
3238         struct cfq_queue **async_cfqq = NULL;
3239         struct cfq_queue *cfqq = NULL;
3240
3241         if (!is_sync) {
3242                 async_cfqq = cfq_async_queue_prio(cfqd, ioprio_class, ioprio);
3243                 cfqq = *async_cfqq;
3244         }
3245
3246         if (!cfqq)
3247                 cfqq = cfq_find_alloc_queue(cfqd, is_sync, cic, bio, gfp_mask);
3248
3249         /*
3250          * pin the queue now that it's allocated, scheduler exit will prune it
3251          */
3252         if (!is_sync && !(*async_cfqq)) {
3253                 cfqq->ref++;
3254                 *async_cfqq = cfqq;
3255         }
3256
3257         cfqq->ref++;
3258         return cfqq;
3259 }
3260
3261 static void
3262 __cfq_update_io_thinktime(struct cfq_ttime *ttime, unsigned long slice_idle)
3263 {
3264         unsigned long elapsed = jiffies - ttime->last_end_request;
3265         elapsed = min(elapsed, 2UL * slice_idle);
3266
3267         ttime->ttime_samples = (7*ttime->ttime_samples + 256) / 8;
3268         ttime->ttime_total = (7*ttime->ttime_total + 256*elapsed) / 8;
3269         ttime->ttime_mean = (ttime->ttime_total + 128) / ttime->ttime_samples;
3270 }
3271
3272 static void
3273 cfq_update_io_thinktime(struct cfq_data *cfqd, struct cfq_queue *cfqq,
3274                         struct cfq_io_cq *cic)
3275 {
3276         if (cfq_cfqq_sync(cfqq)) {
3277                 __cfq_update_io_thinktime(&cic->ttime, cfqd->cfq_slice_idle);
3278                 __cfq_update_io_thinktime(&cfqq->service_tree->ttime,
3279                         cfqd->cfq_slice_idle);
3280         }
3281 #ifdef CONFIG_CFQ_GROUP_IOSCHED
3282         __cfq_update_io_thinktime(&cfqq->cfqg->ttime, cfqd->cfq_group_idle);
3283 #endif
3284 }
3285
3286 static void
3287 cfq_update_io_seektime(struct cfq_data *cfqd, struct cfq_queue *cfqq,
3288                        struct request *rq)
3289 {
3290         sector_t sdist = 0;
3291         sector_t n_sec = blk_rq_sectors(rq);
3292         if (cfqq->last_request_pos) {
3293                 if (cfqq->last_request_pos < blk_rq_pos(rq))
3294                         sdist = blk_rq_pos(rq) - cfqq->last_request_pos;
3295                 else
3296                         sdist = cfqq->last_request_pos - blk_rq_pos(rq);
3297         }
3298
3299         cfqq->seek_history <<= 1;
3300         if (blk_queue_nonrot(cfqd->queue))
3301                 cfqq->seek_history |= (n_sec < CFQQ_SECT_THR_NONROT);
3302         else
3303                 cfqq->seek_history |= (sdist > CFQQ_SEEK_THR);
3304 }
3305
3306 /*
3307  * Disable idle window if the process thinks too long or seeks so much that
3308  * it doesn't matter
3309  */
3310 static void
3311 cfq_update_idle_window(struct cfq_data *cfqd, struct cfq_queue *cfqq,
3312                        struct cfq_io_cq *cic)
3313 {
3314         int old_idle, enable_idle;
3315
3316         /*
3317          * Don't idle for async or idle io prio class
3318          */
3319         if (!cfq_cfqq_sync(cfqq) || cfq_class_idle(cfqq))
3320                 return;
3321
3322         enable_idle = old_idle = cfq_cfqq_idle_window(cfqq);
3323
3324         if (cfqq->queued[0] + cfqq->queued[1] >= 4)
3325                 cfq_mark_cfqq_deep(cfqq);
3326
3327         if (cfqq->next_rq && (cfqq->next_rq->cmd_flags & REQ_NOIDLE))
3328                 enable_idle = 0;
3329         else if (!atomic_read(&cic->icq.ioc->active_ref) ||
3330                  !cfqd->cfq_slice_idle ||
3331                  (!cfq_cfqq_deep(cfqq) && CFQQ_SEEKY(cfqq)))
3332                 enable_idle = 0;
3333         else if (sample_valid(cic->ttime.ttime_samples)) {
3334                 if (cic->ttime.ttime_mean > cfqd->cfq_slice_idle)
3335                         enable_idle = 0;
3336                 else
3337                         enable_idle = 1;
3338         }
3339
3340         if (old_idle != enable_idle) {
3341                 cfq_log_cfqq(cfqd, cfqq, "idle=%d", enable_idle);
3342                 if (enable_idle)
3343                         cfq_mark_cfqq_idle_window(cfqq);
3344                 else
3345                         cfq_clear_cfqq_idle_window(cfqq);
3346         }
3347 }
3348
3349 /*
3350  * Check if new_cfqq should preempt the currently active queue. Return 0 for
3351  * no or if we aren't sure, a 1 will cause a preempt.
3352  */
3353 static bool
3354 cfq_should_preempt(struct cfq_data *cfqd, struct cfq_queue *new_cfqq,
3355                    struct request *rq)
3356 {
3357         struct cfq_queue *cfqq;
3358
3359         cfqq = cfqd->active_queue;
3360         if (!cfqq)
3361                 return false;
3362
3363         if (cfq_class_idle(new_cfqq))
3364                 return false;
3365
3366         if (cfq_class_idle(cfqq))
3367                 return true;
3368
3369         /*
3370          * Don't allow a non-RT request to preempt an ongoing RT cfqq timeslice.
3371          */
3372         if (cfq_class_rt(cfqq) && !cfq_class_rt(new_cfqq))
3373                 return false;
3374
3375         /*
3376          * if the new request is sync, but the currently running queue is
3377          * not, let the sync request have priority.
3378          */
3379         if (rq_is_sync(rq) && !cfq_cfqq_sync(cfqq))
3380                 return true;
3381
3382         if (new_cfqq->cfqg != cfqq->cfqg)
3383                 return false;
3384
3385         if (cfq_slice_used(cfqq))
3386                 return true;
3387
3388         /* Allow preemption only if we are idling on sync-noidle tree */
3389         if (cfqd->serving_type == SYNC_NOIDLE_WORKLOAD &&
3390             cfqq_type(new_cfqq) == SYNC_NOIDLE_WORKLOAD &&
3391             new_cfqq->service_tree->count == 2 &&
3392             RB_EMPTY_ROOT(&cfqq->sort_list))
3393                 return true;
3394
3395         /*
3396          * So both queues are sync. Let the new request get disk time if
3397          * it's a metadata request and the current queue is doing regular IO.
3398          */
3399         if ((rq->cmd_flags & REQ_PRIO) && !cfqq->prio_pending)
3400                 return true;
3401
3402         /*
3403          * Allow an RT request to pre-empt an ongoing non-RT cfqq timeslice.
3404          */
3405         if (cfq_class_rt(new_cfqq) && !cfq_class_rt(cfqq))
3406                 return true;
3407
3408         /* An idle queue should not be idle now for some reason */
3409         if (RB_EMPTY_ROOT(&cfqq->sort_list) && !cfq_should_idle(cfqd, cfqq))
3410                 return true;
3411
3412         if (!cfqd->active_cic || !cfq_cfqq_wait_request(cfqq))
3413                 return false;
3414
3415         /*
3416          * if this request is as-good as one we would expect from the
3417          * current cfqq, let it preempt
3418          */
3419         if (cfq_rq_close(cfqd, cfqq, rq))
3420                 return true;
3421
3422         return false;
3423 }
3424
3425 /*
3426  * cfqq preempts the active queue. if we allowed preempt with no slice left,
3427  * let it have half of its nominal slice.
3428  */
3429 static void cfq_preempt_queue(struct cfq_data *cfqd, struct cfq_queue *cfqq)
3430 {
3431         enum wl_type_t old_type = cfqq_type(cfqd->active_queue);
3432
3433         cfq_log_cfqq(cfqd, cfqq, "preempt");
3434         cfq_slice_expired(cfqd, 1);
3435
3436         /*
3437          * workload type is changed, don't save slice, otherwise preempt
3438          * doesn't happen
3439          */
3440         if (old_type != cfqq_type(cfqq))
3441                 cfqq->cfqg->saved_workload_slice = 0;
3442
3443         /*
3444          * Put the new queue at the front of the of the current list,
3445          * so we know that it will be selected next.
3446          */
3447         BUG_ON(!cfq_cfqq_on_rr(cfqq));
3448
3449         cfq_service_tree_add(cfqd, cfqq, 1);
3450
3451         cfqq->slice_end = 0;
3452         cfq_mark_cfqq_slice_new(cfqq);
3453 }
3454
3455 /*
3456  * Called when a new fs request (rq) is added (to cfqq). Check if there's
3457  * something we should do about it
3458  */
3459 static void
3460 cfq_rq_enqueued(struct cfq_data *cfqd, struct cfq_queue *cfqq,
3461                 struct request *rq)
3462 {
3463         struct cfq_io_cq *cic = RQ_CIC(rq);
3464
3465         cfqd->rq_queued++;
3466         if (rq->cmd_flags & REQ_PRIO)
3467                 cfqq->prio_pending++;
3468
3469         cfq_update_io_thinktime(cfqd, cfqq, cic);
3470         cfq_update_io_seektime(cfqd, cfqq, rq);
3471         cfq_update_idle_window(cfqd, cfqq, cic);
3472
3473         cfqq->last_request_pos = blk_rq_pos(rq) + blk_rq_sectors(rq);
3474
3475         if (cfqq == cfqd->active_queue) {
3476                 /*
3477                  * Remember that we saw a request from this process, but
3478                  * don't start queuing just yet. Otherwise we risk seeing lots
3479                  * of tiny requests, because we disrupt the normal plugging
3480                  * and merging. If the request is already larger than a single
3481                  * page, let it rip immediately. For that case we assume that
3482                  * merging is already done. Ditto for a busy system that
3483                  * has other work pending, don't risk delaying until the
3484                  * idle timer unplug to continue working.
3485                  */
3486                 if (cfq_cfqq_wait_request(cfqq)) {
3487                         if (blk_rq_bytes(rq) > PAGE_CACHE_SIZE ||
3488                             cfqd->busy_queues > 1) {
3489                                 cfq_del_timer(cfqd, cfqq);
3490                                 cfq_clear_cfqq_wait_request(cfqq);
3491                                 __blk_run_queue(cfqd->queue);
3492                         } else {
3493                                 cfqg_stats_update_idle_time(cfqq->cfqg);
3494                                 cfq_mark_cfqq_must_dispatch(cfqq);
3495                         }
3496                 }
3497         } else if (cfq_should_preempt(cfqd, cfqq, rq)) {
3498                 /*
3499                  * not the active queue - expire current slice if it is
3500                  * idle and has expired it's mean thinktime or this new queue
3501                  * has some old slice time left and is of higher priority or
3502                  * this new queue is RT and the current one is BE
3503                  */
3504                 cfq_preempt_queue(cfqd, cfqq);
3505                 __blk_run_queue(cfqd->queue);
3506         }
3507 }
3508
3509 static void cfq_insert_request(struct request_queue *q, struct request *rq)
3510 {
3511         struct cfq_data *cfqd = q->elevator->elevator_data;
3512         struct cfq_queue *cfqq = RQ_CFQQ(rq);
3513
3514         cfq_log_cfqq(cfqd, cfqq, "insert_request");
3515         cfq_init_prio_data(cfqq, RQ_CIC(rq));
3516
3517         rq_set_fifo_time(rq, jiffies + cfqd->cfq_fifo_expire[rq_is_sync(rq)]);
3518         list_add_tail(&rq->queuelist, &cfqq->fifo);
3519         cfq_add_rq_rb(rq);
3520         cfqg_stats_update_io_add(RQ_CFQG(rq), cfqd->serving_group,
3521                                  rq->cmd_flags);
3522         cfq_rq_enqueued(cfqd, cfqq, rq);
3523 }
3524
3525 /*
3526  * Update hw_tag based on peak queue depth over 50 samples under
3527  * sufficient load.
3528  */
3529 static void cfq_update_hw_tag(struct cfq_data *cfqd)
3530 {
3531         struct cfq_queue *cfqq = cfqd->active_queue;
3532
3533         if (cfqd->rq_in_driver > cfqd->hw_tag_est_depth)
3534                 cfqd->hw_tag_est_depth = cfqd->rq_in_driver;
3535
3536         if (cfqd->hw_tag == 1)
3537                 return;
3538
3539         if (cfqd->rq_queued <= CFQ_HW_QUEUE_MIN &&
3540             cfqd->rq_in_driver <= CFQ_HW_QUEUE_MIN)
3541                 return;
3542
3543         /*
3544          * If active queue hasn't enough requests and can idle, cfq might not
3545          * dispatch sufficient requests to hardware. Don't zero hw_tag in this
3546          * case
3547          */
3548         if (cfqq && cfq_cfqq_idle_window(cfqq) &&
3549             cfqq->dispatched + cfqq->queued[0] + cfqq->queued[1] <
3550             CFQ_HW_QUEUE_MIN && cfqd->rq_in_driver < CFQ_HW_QUEUE_MIN)
3551                 return;
3552
3553         if (cfqd->hw_tag_samples++ < 50)
3554                 return;
3555
3556         if (cfqd->hw_tag_est_depth >= CFQ_HW_QUEUE_MIN)
3557                 cfqd->hw_tag = 1;
3558         else
3559                 cfqd->hw_tag = 0;
3560 }
3561
3562 static bool cfq_should_wait_busy(struct cfq_data *cfqd, struct cfq_queue *cfqq)
3563 {
3564         struct cfq_io_cq *cic = cfqd->active_cic;
3565
3566         /* If the queue already has requests, don't wait */
3567         if (!RB_EMPTY_ROOT(&cfqq->sort_list))
3568                 return false;
3569
3570         /* If there are other queues in the group, don't wait */
3571         if (cfqq->cfqg->nr_cfqq > 1)
3572                 return false;
3573
3574         /* the only queue in the group, but think time is big */
3575         if (cfq_io_thinktime_big(cfqd, &cfqq->cfqg->ttime, true))
3576                 return false;
3577
3578         if (cfq_slice_used(cfqq))
3579                 return true;
3580
3581         /* if slice left is less than think time, wait busy */
3582         if (cic && sample_valid(cic->ttime.ttime_samples)
3583             && (cfqq->slice_end - jiffies < cic->ttime.ttime_mean))
3584                 return true;
3585
3586         /*
3587          * If think times is less than a jiffy than ttime_mean=0 and above
3588          * will not be true. It might happen that slice has not expired yet
3589          * but will expire soon (4-5 ns) during select_queue(). To cover the
3590          * case where think time is less than a jiffy, mark the queue wait
3591          * busy if only 1 jiffy is left in the slice.
3592          */
3593         if (cfqq->slice_end - jiffies == 1)
3594                 return true;
3595
3596         return false;
3597 }
3598
3599 static void cfq_completed_request(struct request_queue *q, struct request *rq)
3600 {
3601         struct cfq_queue *cfqq = RQ_CFQQ(rq);
3602         struct cfq_data *cfqd = cfqq->cfqd;
3603         const int sync = rq_is_sync(rq);
3604         unsigned long now;
3605
3606         now = jiffies;
3607         cfq_log_cfqq(cfqd, cfqq, "complete rqnoidle %d",
3608                      !!(rq->cmd_flags & REQ_NOIDLE));
3609
3610         cfq_update_hw_tag(cfqd);
3611
3612         WARN_ON(!cfqd->rq_in_driver);
3613         WARN_ON(!cfqq->dispatched);
3614         cfqd->rq_in_driver--;
3615         cfqq->dispatched--;
3616         (RQ_CFQG(rq))->dispatched--;
3617         cfqg_stats_update_completion(cfqq->cfqg, rq_start_time_ns(rq),
3618                                      rq_io_start_time_ns(rq), rq->cmd_flags);
3619
3620         cfqd->rq_in_flight[cfq_cfqq_sync(cfqq)]--;
3621
3622         if (sync) {
3623                 struct cfq_rb_root *service_tree;
3624
3625                 RQ_CIC(rq)->ttime.last_end_request = now;
3626
3627                 if (cfq_cfqq_on_rr(cfqq))
3628                         service_tree = cfqq->service_tree;
3629                 else
3630                         service_tree = service_tree_for(cfqq->cfqg,
3631                                 cfqq_prio(cfqq), cfqq_type(cfqq));
3632                 service_tree->ttime.last_end_request = now;
3633                 if (!time_after(rq->start_time + cfqd->cfq_fifo_expire[1], now))
3634                         cfqd->last_delayed_sync = now;
3635         }
3636
3637 #ifdef CONFIG_CFQ_GROUP_IOSCHED
3638         cfqq->cfqg->ttime.last_end_request = now;
3639 #endif
3640
3641         /*
3642          * If this is the active queue, check if it needs to be expired,
3643          * or if we want to idle in case it has no pending requests.
3644          */
3645         if (cfqd->active_queue == cfqq) {
3646                 const bool cfqq_empty = RB_EMPTY_ROOT(&cfqq->sort_list);
3647
3648                 if (cfq_cfqq_slice_new(cfqq)) {
3649                         cfq_set_prio_slice(cfqd, cfqq);
3650                         cfq_clear_cfqq_slice_new(cfqq);
3651                 }
3652
3653                 /*
3654                  * Should we wait for next request to come in before we expire
3655                  * the queue.
3656                  */
3657                 if (cfq_should_wait_busy(cfqd, cfqq)) {
3658                         unsigned long extend_sl = cfqd->cfq_slice_idle;
3659                         if (!cfqd->cfq_slice_idle)
3660                                 extend_sl = cfqd->cfq_group_idle;
3661                         cfqq->slice_end = jiffies + extend_sl;
3662                         cfq_mark_cfqq_wait_busy(cfqq);
3663                         cfq_log_cfqq(cfqd, cfqq, "will busy wait");
3664                 }
3665
3666                 /*
3667                  * Idling is not enabled on:
3668                  * - expired queues
3669                  * - idle-priority queues
3670                  * - async queues
3671                  * - queues with still some requests queued
3672                  * - when there is a close cooperator
3673                  */
3674                 if (cfq_slice_used(cfqq) || cfq_class_idle(cfqq))
3675                         cfq_slice_expired(cfqd, 1);
3676                 else if (sync && cfqq_empty &&
3677                          !cfq_close_cooperator(cfqd, cfqq)) {
3678                         cfq_arm_slice_timer(cfqd);
3679                 }
3680         }
3681
3682         if (!cfqd->rq_in_driver)
3683                 cfq_schedule_dispatch(cfqd);
3684 }
3685
3686 static inline int __cfq_may_queue(struct cfq_queue *cfqq)
3687 {
3688         if (cfq_cfqq_wait_request(cfqq) && !cfq_cfqq_must_alloc_slice(cfqq)) {
3689                 cfq_mark_cfqq_must_alloc_slice(cfqq);
3690                 return ELV_MQUEUE_MUST;
3691         }
3692
3693         return ELV_MQUEUE_MAY;
3694 }
3695
3696 static int cfq_may_queue(struct request_queue *q, int rw)
3697 {
3698         struct cfq_data *cfqd = q->elevator->elevator_data;
3699         struct task_struct *tsk = current;
3700         struct cfq_io_cq *cic;
3701         struct cfq_queue *cfqq;
3702
3703         /*
3704          * don't force setup of a queue from here, as a call to may_queue
3705          * does not necessarily imply that a request actually will be queued.
3706          * so just lookup a possibly existing queue, or return 'may queue'
3707          * if that fails
3708          */
3709         cic = cfq_cic_lookup(cfqd, tsk->io_context);
3710         if (!cic)
3711                 return ELV_MQUEUE_MAY;
3712
3713         cfqq = cic_to_cfqq(cic, rw_is_sync(rw));
3714         if (cfqq) {
3715                 cfq_init_prio_data(cfqq, cic);
3716
3717                 return __cfq_may_queue(cfqq);
3718         }
3719
3720         return ELV_MQUEUE_MAY;
3721 }
3722
3723 /*
3724  * queue lock held here
3725  */
3726 static void cfq_put_request(struct request *rq)
3727 {
3728         struct cfq_queue *cfqq = RQ_CFQQ(rq);
3729
3730         if (cfqq) {
3731                 const int rw = rq_data_dir(rq);
3732
3733                 BUG_ON(!cfqq->allocated[rw]);
3734                 cfqq->allocated[rw]--;
3735
3736                 /* Put down rq reference on cfqg */
3737                 cfqg_put(RQ_CFQG(rq));
3738                 rq->elv.priv[0] = NULL;
3739                 rq->elv.priv[1] = NULL;
3740
3741                 cfq_put_queue(cfqq);
3742         }
3743 }
3744
3745 static struct cfq_queue *
3746 cfq_merge_cfqqs(struct cfq_data *cfqd, struct cfq_io_cq *cic,
3747                 struct cfq_queue *cfqq)
3748 {
3749         cfq_log_cfqq(cfqd, cfqq, "merging with queue %p", cfqq->new_cfqq);
3750         cic_set_cfqq(cic, cfqq->new_cfqq, 1);
3751         cfq_mark_cfqq_coop(cfqq->new_cfqq);
3752         cfq_put_queue(cfqq);
3753         return cic_to_cfqq(cic, 1);
3754 }
3755
3756 /*
3757  * Returns NULL if a new cfqq should be allocated, or the old cfqq if this
3758  * was the last process referring to said cfqq.
3759  */
3760 static struct cfq_queue *
3761 split_cfqq(struct cfq_io_cq *cic, struct cfq_queue *cfqq)
3762 {
3763         if (cfqq_process_refs(cfqq) == 1) {
3764                 cfqq->pid = current->pid;
3765                 cfq_clear_cfqq_coop(cfqq);
3766                 cfq_clear_cfqq_split_coop(cfqq);
3767                 return cfqq;
3768         }
3769
3770         cic_set_cfqq(cic, NULL, 1);
3771
3772         cfq_put_cooperator(cfqq);
3773
3774         cfq_put_queue(cfqq);
3775         return NULL;
3776 }
3777 /*
3778  * Allocate cfq data structures associated with this request.
3779  */
3780 static int
3781 cfq_set_request(struct request_queue *q, struct request *rq, struct bio *bio,
3782                 gfp_t gfp_mask)
3783 {
3784         struct cfq_data *cfqd = q->elevator->elevator_data;
3785         struct cfq_io_cq *cic = icq_to_cic(rq->elv.icq);
3786         const int rw = rq_data_dir(rq);
3787         const bool is_sync = rq_is_sync(rq);
3788         struct cfq_queue *cfqq;
3789
3790         might_sleep_if(gfp_mask & __GFP_WAIT);
3791
3792         spin_lock_irq(q->queue_lock);
3793
3794         check_ioprio_changed(cic, bio);
3795         check_blkcg_changed(cic, bio);
3796 new_queue:
3797         cfqq = cic_to_cfqq(cic, is_sync);
3798         if (!cfqq || cfqq == &cfqd->oom_cfqq) {
3799                 cfqq = cfq_get_queue(cfqd, is_sync, cic, bio, gfp_mask);
3800                 cic_set_cfqq(cic, cfqq, is_sync);
3801         } else {
3802                 /*
3803                  * If the queue was seeky for too long, break it apart.
3804                  */
3805                 if (cfq_cfqq_coop(cfqq) && cfq_cfqq_split_coop(cfqq)) {
3806                         cfq_log_cfqq(cfqd, cfqq, "breaking apart cfqq");
3807                         cfqq = split_cfqq(cic, cfqq);
3808                         if (!cfqq)
3809                                 goto new_queue;
3810                 }
3811
3812                 /*
3813                  * Check to see if this queue is scheduled to merge with
3814                  * another, closely cooperating queue.  The merging of
3815                  * queues happens here as it must be done in process context.
3816                  * The reference on new_cfqq was taken in merge_cfqqs.
3817                  */
3818                 if (cfqq->new_cfqq)
3819                         cfqq = cfq_merge_cfqqs(cfqd, cic, cfqq);
3820         }
3821
3822         cfqq->allocated[rw]++;
3823
3824         cfqq->ref++;
3825         cfqg_get(cfqq->cfqg);
3826         rq->elv.priv[0] = cfqq;
3827         rq->elv.priv[1] = cfqq->cfqg;
3828         spin_unlock_irq(q->queue_lock);
3829         return 0;
3830 }
3831
3832 static void cfq_kick_queue(struct work_struct *work)
3833 {
3834         struct cfq_data *cfqd =
3835                 container_of(work, struct cfq_data, unplug_work);
3836         struct request_queue *q = cfqd->queue;
3837
3838         spin_lock_irq(q->queue_lock);
3839         __blk_run_queue(cfqd->queue);
3840         spin_unlock_irq(q->queue_lock);
3841 }
3842
3843 /*
3844  * Timer running if the active_queue is currently idling inside its time slice
3845  */
3846 static void cfq_idle_slice_timer(unsigned long data)
3847 {
3848         struct cfq_data *cfqd = (struct cfq_data *) data;
3849         struct cfq_queue *cfqq;
3850         unsigned long flags;
3851         int timed_out = 1;
3852
3853         cfq_log(cfqd, "idle timer fired");
3854
3855         spin_lock_irqsave(cfqd->queue->queue_lock, flags);
3856
3857         cfqq = cfqd->active_queue;
3858         if (cfqq) {
3859                 timed_out = 0;
3860
3861                 /*
3862                  * We saw a request before the queue expired, let it through
3863                  */
3864                 if (cfq_cfqq_must_dispatch(cfqq))
3865                         goto out_kick;
3866
3867                 /*
3868                  * expired
3869                  */
3870                 if (cfq_slice_used(cfqq))
3871                         goto expire;
3872
3873                 /*
3874                  * only expire and reinvoke request handler, if there are
3875                  * other queues with pending requests
3876                  */
3877                 if (!cfqd->busy_queues)
3878                         goto out_cont;
3879
3880                 /*
3881                  * not expired and it has a request pending, let it dispatch
3882                  */
3883                 if (!RB_EMPTY_ROOT(&cfqq->sort_list))
3884                         goto out_kick;
3885
3886                 /*
3887                  * Queue depth flag is reset only when the idle didn't succeed
3888                  */
3889                 cfq_clear_cfqq_deep(cfqq);
3890         }
3891 expire:
3892         cfq_slice_expired(cfqd, timed_out);
3893 out_kick:
3894         cfq_schedule_dispatch(cfqd);
3895 out_cont:
3896         spin_unlock_irqrestore(cfqd->queue->queue_lock, flags);
3897 }
3898
3899 static void cfq_shutdown_timer_wq(struct cfq_data *cfqd)
3900 {
3901         del_timer_sync(&cfqd->idle_slice_timer);
3902         cancel_work_sync(&cfqd->unplug_work);
3903 }
3904
3905 static void cfq_put_async_queues(struct cfq_data *cfqd)
3906 {
3907         int i;
3908
3909         for (i = 0; i < IOPRIO_BE_NR; i++) {
3910                 if (cfqd->async_cfqq[0][i])
3911                         cfq_put_queue(cfqd->async_cfqq[0][i]);
3912                 if (cfqd->async_cfqq[1][i])
3913                         cfq_put_queue(cfqd->async_cfqq[1][i]);
3914         }
3915
3916         if (cfqd->async_idle_cfqq)
3917                 cfq_put_queue(cfqd->async_idle_cfqq);
3918 }
3919
3920 static void cfq_exit_queue(struct elevator_queue *e)
3921 {
3922         struct cfq_data *cfqd = e->elevator_data;
3923         struct request_queue *q = cfqd->queue;
3924
3925         cfq_shutdown_timer_wq(cfqd);
3926
3927         spin_lock_irq(q->queue_lock);
3928
3929         if (cfqd->active_queue)
3930                 __cfq_slice_expired(cfqd, cfqd->active_queue, 0);
3931
3932         cfq_put_async_queues(cfqd);
3933
3934         spin_unlock_irq(q->queue_lock);
3935
3936         cfq_shutdown_timer_wq(cfqd);
3937
3938 #ifndef CONFIG_CFQ_GROUP_IOSCHED
3939         kfree(cfqd->root_group);
3940 #endif
3941         update_root_blkg_pd(q, &blkio_policy_cfq);
3942         kfree(cfqd);
3943 }
3944
3945 static int cfq_init_queue(struct request_queue *q)
3946 {
3947         struct cfq_data *cfqd;
3948         struct blkio_group *blkg __maybe_unused;
3949         int i;
3950
3951         cfqd = kmalloc_node(sizeof(*cfqd), GFP_KERNEL | __GFP_ZERO, q->node);
3952         if (!cfqd)
3953                 return -ENOMEM;
3954
3955         cfqd->queue = q;
3956         q->elevator->elevator_data = cfqd;
3957
3958         /* Init root service tree */
3959         cfqd->grp_service_tree = CFQ_RB_ROOT;
3960
3961         /* Init root group and prefer root group over other groups by default */
3962 #ifdef CONFIG_CFQ_GROUP_IOSCHED
3963         rcu_read_lock();
3964         spin_lock_irq(q->queue_lock);
3965
3966         blkg = blkg_lookup_create(&blkio_root_cgroup, q, true);
3967         if (!IS_ERR(blkg))
3968                 cfqd->root_group = blkg_to_cfqg(blkg);
3969
3970         spin_unlock_irq(q->queue_lock);
3971         rcu_read_unlock();
3972 #else
3973         cfqd->root_group = kzalloc_node(sizeof(*cfqd->root_group),
3974                                         GFP_KERNEL, cfqd->queue->node);
3975         if (cfqd->root_group)
3976                 cfq_init_cfqg_base(cfqd->root_group);
3977 #endif
3978         if (!cfqd->root_group) {
3979                 kfree(cfqd);
3980                 return -ENOMEM;
3981         }
3982
3983         cfqd->root_group->weight = 2 * CFQ_WEIGHT_DEFAULT;
3984
3985         /*
3986          * Not strictly needed (since RB_ROOT just clears the node and we
3987          * zeroed cfqd on alloc), but better be safe in case someone decides
3988          * to add magic to the rb code
3989          */
3990         for (i = 0; i < CFQ_PRIO_LISTS; i++)
3991                 cfqd->prio_trees[i] = RB_ROOT;
3992
3993         /*
3994          * Our fallback cfqq if cfq_find_alloc_queue() runs into OOM issues.
3995          * Grab a permanent reference to it, so that the normal code flow
3996          * will not attempt to free it.  oom_cfqq is linked to root_group
3997          * but shouldn't hold a reference as it'll never be unlinked.  Lose
3998          * the reference from linking right away.
3999          */
4000         cfq_init_cfqq(cfqd, &cfqd->oom_cfqq, 1, 0);
4001         cfqd->oom_cfqq.ref++;
4002
4003         spin_lock_irq(q->queue_lock);
4004         cfq_link_cfqq_cfqg(&cfqd->oom_cfqq, cfqd->root_group);
4005         cfqg_put(cfqd->root_group);
4006         spin_unlock_irq(q->queue_lock);
4007
4008         init_timer(&cfqd->idle_slice_timer);
4009         cfqd->idle_slice_timer.function = cfq_idle_slice_timer;
4010         cfqd->idle_slice_timer.data = (unsigned long) cfqd;
4011
4012         INIT_WORK(&cfqd->unplug_work, cfq_kick_queue);
4013
4014         cfqd->cfq_quantum = cfq_quantum;
4015         cfqd->cfq_fifo_expire[0] = cfq_fifo_expire[0];
4016         cfqd->cfq_fifo_expire[1] = cfq_fifo_expire[1];
4017         cfqd->cfq_back_max = cfq_back_max;
4018         cfqd->cfq_back_penalty = cfq_back_penalty;
4019         cfqd->cfq_slice[0] = cfq_slice_async;
4020         cfqd->cfq_slice[1] = cfq_slice_sync;
4021         cfqd->cfq_slice_async_rq = cfq_slice_async_rq;
4022         cfqd->cfq_slice_idle = cfq_slice_idle;
4023         cfqd->cfq_group_idle = cfq_group_idle;
4024         cfqd->cfq_latency = 1;
4025         cfqd->hw_tag = -1;
4026         /*
4027          * we optimistically start assuming sync ops weren't delayed in last
4028          * second, in order to have larger depth for async operations.
4029          */
4030         cfqd->last_delayed_sync = jiffies - HZ;
4031         return 0;
4032 }
4033
4034 /*
4035  * sysfs parts below -->
4036  */
4037 static ssize_t
4038 cfq_var_show(unsigned int var, char *page)
4039 {
4040         return sprintf(page, "%d\n", var);
4041 }
4042
4043 static ssize_t
4044 cfq_var_store(unsigned int *var, const char *page, size_t count)
4045 {
4046         char *p = (char *) page;
4047
4048         *var = simple_strtoul(p, &p, 10);
4049         return count;
4050 }
4051
4052 #define SHOW_FUNCTION(__FUNC, __VAR, __CONV)                            \
4053 static ssize_t __FUNC(struct elevator_queue *e, char *page)             \
4054 {                                                                       \
4055         struct cfq_data *cfqd = e->elevator_data;                       \
4056         unsigned int __data = __VAR;                                    \
4057         if (__CONV)                                                     \
4058                 __data = jiffies_to_msecs(__data);                      \
4059         return cfq_var_show(__data, (page));                            \
4060 }
4061 SHOW_FUNCTION(cfq_quantum_show, cfqd->cfq_quantum, 0);
4062 SHOW_FUNCTION(cfq_fifo_expire_sync_show, cfqd->cfq_fifo_expire[1], 1);
4063 SHOW_FUNCTION(cfq_fifo_expire_async_show, cfqd->cfq_fifo_expire[0], 1);
4064 SHOW_FUNCTION(cfq_back_seek_max_show, cfqd->cfq_back_max, 0);
4065 SHOW_FUNCTION(cfq_back_seek_penalty_show, cfqd->cfq_back_penalty, 0);
4066 SHOW_FUNCTION(cfq_slice_idle_show, cfqd->cfq_slice_idle, 1);
4067 SHOW_FUNCTION(cfq_group_idle_show, cfqd->cfq_group_idle, 1);
4068 SHOW_FUNCTION(cfq_slice_sync_show, cfqd->cfq_slice[1], 1);
4069 SHOW_FUNCTION(cfq_slice_async_show, cfqd->cfq_slice[0], 1);
4070 SHOW_FUNCTION(cfq_slice_async_rq_show, cfqd->cfq_slice_async_rq, 0);
4071 SHOW_FUNCTION(cfq_low_latency_show, cfqd->cfq_latency, 0);
4072 #undef SHOW_FUNCTION
4073
4074 #define STORE_FUNCTION(__FUNC, __PTR, MIN, MAX, __CONV)                 \
4075 static ssize_t __FUNC(struct elevator_queue *e, const char *page, size_t count) \
4076 {                                                                       \
4077         struct cfq_data *cfqd = e->elevator_data;                       \
4078         unsigned int __data;                                            \
4079         int ret = cfq_var_store(&__data, (page), count);                \
4080         if (__data < (MIN))                                             \
4081                 __data = (MIN);                                         \
4082         else if (__data > (MAX))                                        \
4083                 __data = (MAX);                                         \
4084         if (__CONV)                                                     \
4085                 *(__PTR) = msecs_to_jiffies(__data);                    \
4086         else                                                            \
4087                 *(__PTR) = __data;                                      \
4088         return ret;                                                     \
4089 }
4090 STORE_FUNCTION(cfq_quantum_store, &cfqd->cfq_quantum, 1, UINT_MAX, 0);
4091 STORE_FUNCTION(cfq_fifo_expire_sync_store, &cfqd->cfq_fifo_expire[1], 1,
4092                 UINT_MAX, 1);
4093 STORE_FUNCTION(cfq_fifo_expire_async_store, &cfqd->cfq_fifo_expire[0], 1,
4094                 UINT_MAX, 1);
4095 STORE_FUNCTION(cfq_back_seek_max_store, &cfqd->cfq_back_max, 0, UINT_MAX, 0);
4096 STORE_FUNCTION(cfq_back_seek_penalty_store, &cfqd->cfq_back_penalty, 1,
4097                 UINT_MAX, 0);
4098 STORE_FUNCTION(cfq_slice_idle_store, &cfqd->cfq_slice_idle, 0, UINT_MAX, 1);
4099 STORE_FUNCTION(cfq_group_idle_store, &cfqd->cfq_group_idle, 0, UINT_MAX, 1);
4100 STORE_FUNCTION(cfq_slice_sync_store, &cfqd->cfq_slice[1], 1, UINT_MAX, 1);
4101 STORE_FUNCTION(cfq_slice_async_store, &cfqd->cfq_slice[0], 1, UINT_MAX, 1);
4102 STORE_FUNCTION(cfq_slice_async_rq_store, &cfqd->cfq_slice_async_rq, 1,
4103                 UINT_MAX, 0);
4104 STORE_FUNCTION(cfq_low_latency_store, &cfqd->cfq_latency, 0, 1, 0);
4105 #undef STORE_FUNCTION
4106
4107 #define CFQ_ATTR(name) \
4108         __ATTR(name, S_IRUGO|S_IWUSR, cfq_##name##_show, cfq_##name##_store)
4109
4110 static struct elv_fs_entry cfq_attrs[] = {
4111         CFQ_ATTR(quantum),
4112         CFQ_ATTR(fifo_expire_sync),
4113         CFQ_ATTR(fifo_expire_async),
4114         CFQ_ATTR(back_seek_max),
4115         CFQ_ATTR(back_seek_penalty),
4116         CFQ_ATTR(slice_sync),
4117         CFQ_ATTR(slice_async),
4118         CFQ_ATTR(slice_async_rq),
4119         CFQ_ATTR(slice_idle),
4120         CFQ_ATTR(group_idle),
4121         CFQ_ATTR(low_latency),
4122         __ATTR_NULL
4123 };
4124
4125 static struct elevator_type iosched_cfq = {
4126         .ops = {
4127                 .elevator_merge_fn =            cfq_merge,
4128                 .elevator_merged_fn =           cfq_merged_request,
4129                 .elevator_merge_req_fn =        cfq_merged_requests,
4130                 .elevator_allow_merge_fn =      cfq_allow_merge,
4131                 .elevator_bio_merged_fn =       cfq_bio_merged,
4132                 .elevator_dispatch_fn =         cfq_dispatch_requests,
4133                 .elevator_add_req_fn =          cfq_insert_request,
4134                 .elevator_activate_req_fn =     cfq_activate_request,
4135                 .elevator_deactivate_req_fn =   cfq_deactivate_request,
4136                 .elevator_completed_req_fn =    cfq_completed_request,
4137                 .elevator_former_req_fn =       elv_rb_former_request,
4138                 .elevator_latter_req_fn =       elv_rb_latter_request,
4139                 .elevator_init_icq_fn =         cfq_init_icq,
4140                 .elevator_exit_icq_fn =         cfq_exit_icq,
4141                 .elevator_set_req_fn =          cfq_set_request,
4142                 .elevator_put_req_fn =          cfq_put_request,
4143                 .elevator_may_queue_fn =        cfq_may_queue,
4144                 .elevator_init_fn =             cfq_init_queue,
4145                 .elevator_exit_fn =             cfq_exit_queue,
4146         },
4147         .icq_size       =       sizeof(struct cfq_io_cq),
4148         .icq_align      =       __alignof__(struct cfq_io_cq),
4149         .elevator_attrs =       cfq_attrs,
4150         .elevator_name  =       "cfq",
4151         .elevator_owner =       THIS_MODULE,
4152 };
4153
4154 #ifdef CONFIG_CFQ_GROUP_IOSCHED
4155 static struct blkio_policy_type blkio_policy_cfq = {
4156         .ops = {
4157                 .blkio_init_group_fn =          cfq_init_blkio_group,
4158                 .blkio_reset_group_stats_fn =   cfqg_stats_reset,
4159         },
4160         .plid = BLKIO_POLICY_PROP,
4161         .pdata_size = sizeof(struct cfq_group),
4162         .cftypes = cfq_blkcg_files,
4163 };
4164 #endif
4165
4166 static int __init cfq_init(void)
4167 {
4168         int ret;
4169
4170         /*
4171          * could be 0 on HZ < 1000 setups
4172          */
4173         if (!cfq_slice_async)
4174                 cfq_slice_async = 1;
4175         if (!cfq_slice_idle)
4176                 cfq_slice_idle = 1;
4177
4178 #ifdef CONFIG_CFQ_GROUP_IOSCHED
4179         if (!cfq_group_idle)
4180                 cfq_group_idle = 1;
4181 #else
4182                 cfq_group_idle = 0;
4183 #endif
4184         cfq_pool = KMEM_CACHE(cfq_queue, 0);
4185         if (!cfq_pool)
4186                 return -ENOMEM;
4187
4188         ret = elv_register(&iosched_cfq);
4189         if (ret) {
4190                 kmem_cache_destroy(cfq_pool);
4191                 return ret;
4192         }
4193
4194 #ifdef CONFIG_CFQ_GROUP_IOSCHED
4195         blkio_policy_register(&blkio_policy_cfq);
4196 #endif
4197         return 0;
4198 }
4199
4200 static void __exit cfq_exit(void)
4201 {
4202 #ifdef CONFIG_CFQ_GROUP_IOSCHED
4203         blkio_policy_unregister(&blkio_policy_cfq);
4204 #endif
4205         elv_unregister(&iosched_cfq);
4206         kmem_cache_destroy(cfq_pool);
4207 }
4208
4209 module_init(cfq_init);
4210 module_exit(cfq_exit);
4211
4212 MODULE_AUTHOR("Jens Axboe");
4213 MODULE_LICENSE("GPL");
4214 MODULE_DESCRIPTION("Completely Fair Queueing IO scheduler");