~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/block/cfq-iosched.c

Version: ~ [ linux-5.14-rc3 ] ~ [ linux-5.13.5 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.53 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.135 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.198 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.240 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.276 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.276 ] ~ [ linux-4.3.6 ] ~ [ linux-4.2.8 ] ~ [ linux-4.1.52 ] ~ [ linux-4.0.9 ] ~ [ linux-3.18.140 ] ~ [ linux-3.16.85 ] ~ [ linux-3.14.79 ] ~ [ linux-3.12.74 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.5 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

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

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | Wiki (Japanese) | Wiki (English) | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

osdn.jp