linux/block/cfq-iosched.c
<<
>>
Prefs
   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/blkdev.h>
  11#include <linux/elevator.h>
  12#include <linux/rbtree.h>
  13#include <linux/ioprio.h>
  14#include <linux/blktrace_api.h>
  15
  16/*
  17 * tunables
  18 */
  19/* max queue in one round of service */
  20static const int cfq_quantum = 4;
  21static const int cfq_fifo_expire[2] = { HZ / 4, HZ / 8 };
  22/* maximum backwards seek, in KiB */
  23static const int cfq_back_max = 16 * 1024;
  24/* penalty of a backwards seek */
  25static const int cfq_back_penalty = 2;
  26static const int cfq_slice_sync = HZ / 10;
  27static int cfq_slice_async = HZ / 25;
  28static const int cfq_slice_async_rq = 2;
  29static int cfq_slice_idle = HZ / 125;
  30
  31/*
  32 * offset from end of service tree
  33 */
  34#define CFQ_IDLE_DELAY          (HZ / 5)
  35
  36/*
  37 * below this threshold, we consider thinktime immediate
  38 */
  39#define CFQ_MIN_TT              (2)
  40
  41#define CFQ_SLICE_SCALE         (5)
  42#define CFQ_HW_QUEUE_MIN        (5)
  43
  44#define RQ_CIC(rq)              \
  45        ((struct cfq_io_context *) (rq)->elevator_private)
  46#define RQ_CFQQ(rq)             (struct cfq_queue *) ((rq)->elevator_private2)
  47
  48static struct kmem_cache *cfq_pool;
  49static struct kmem_cache *cfq_ioc_pool;
  50
  51static DEFINE_PER_CPU(unsigned long, ioc_count);
  52static struct completion *ioc_gone;
  53static DEFINE_SPINLOCK(ioc_gone_lock);
  54
  55#define CFQ_PRIO_LISTS          IOPRIO_BE_NR
  56#define cfq_class_idle(cfqq)    ((cfqq)->ioprio_class == IOPRIO_CLASS_IDLE)
  57#define cfq_class_rt(cfqq)      ((cfqq)->ioprio_class == IOPRIO_CLASS_RT)
  58
  59#define ASYNC                   (0)
  60#define SYNC                    (1)
  61
  62#define sample_valid(samples)   ((samples) > 80)
  63
  64/*
  65 * Most of our rbtree usage is for sorting with min extraction, so
  66 * if we cache the leftmost node we don't have to walk down the tree
  67 * to find it. Idea borrowed from Ingo Molnars CFS scheduler. We should
  68 * move this into the elevator for the rq sorting as well.
  69 */
  70struct cfq_rb_root {
  71        struct rb_root rb;
  72        struct rb_node *left;
  73};
  74#define CFQ_RB_ROOT     (struct cfq_rb_root) { RB_ROOT, NULL, }
  75
  76/*
  77 * Per block device queue structure
  78 */
  79struct cfq_data {
  80        struct request_queue *queue;
  81
  82        /*
  83         * rr list of queues with requests and the count of them
  84         */
  85        struct cfq_rb_root service_tree;
  86        unsigned int busy_queues;
  87        /*
  88         * Used to track any pending rt requests so we can pre-empt current
  89         * non-RT cfqq in service when this value is non-zero.
  90         */
  91        unsigned int busy_rt_queues;
  92
  93        int rq_in_driver;
  94        int sync_flight;
  95
  96        /*
  97         * queue-depth detection
  98         */
  99        int rq_queued;
 100        int hw_tag;
 101        int hw_tag_samples;
 102        int rq_in_driver_peak;
 103
 104        /*
 105         * idle window management
 106         */
 107        struct timer_list idle_slice_timer;
 108        struct work_struct unplug_work;
 109
 110        struct cfq_queue *active_queue;
 111        struct cfq_io_context *active_cic;
 112
 113        /*
 114         * async queue for each priority case
 115         */
 116        struct cfq_queue *async_cfqq[2][IOPRIO_BE_NR];
 117        struct cfq_queue *async_idle_cfqq;
 118
 119        sector_t last_position;
 120        unsigned long last_end_request;
 121
 122        /*
 123         * tunables, see top of file
 124         */
 125        unsigned int cfq_quantum;
 126        unsigned int cfq_fifo_expire[2];
 127        unsigned int cfq_back_penalty;
 128        unsigned int cfq_back_max;
 129        unsigned int cfq_slice[2];
 130        unsigned int cfq_slice_async_rq;
 131        unsigned int cfq_slice_idle;
 132
 133        struct list_head cic_list;
 134};
 135
 136/*
 137 * Per process-grouping structure
 138 */
 139struct cfq_queue {
 140        /* reference count */
 141        atomic_t ref;
 142        /* various state flags, see below */
 143        unsigned int flags;
 144        /* parent cfq_data */
 145        struct cfq_data *cfqd;
 146        /* service_tree member */
 147        struct rb_node rb_node;
 148        /* service_tree key */
 149        unsigned long rb_key;
 150        /* sorted list of pending requests */
 151        struct rb_root sort_list;
 152        /* if fifo isn't expired, next request to serve */
 153        struct request *next_rq;
 154        /* requests queued in sort_list */
 155        int queued[2];
 156        /* currently allocated requests */
 157        int allocated[2];
 158        /* fifo list of requests in sort_list */
 159        struct list_head fifo;
 160
 161        unsigned long slice_end;
 162        long slice_resid;
 163
 164        /* pending metadata requests */
 165        int meta_pending;
 166        /* number of requests that are on the dispatch list or inside driver */
 167        int dispatched;
 168
 169        /* io prio of this group */
 170        unsigned short ioprio, org_ioprio;
 171        unsigned short ioprio_class, org_ioprio_class;
 172
 173        pid_t pid;
 174};
 175
 176enum cfqq_state_flags {
 177        CFQ_CFQQ_FLAG_on_rr = 0,        /* on round-robin busy list */
 178        CFQ_CFQQ_FLAG_wait_request,     /* waiting for a request */
 179        CFQ_CFQQ_FLAG_must_alloc,       /* must be allowed rq alloc */
 180        CFQ_CFQQ_FLAG_must_alloc_slice, /* per-slice must_alloc flag */
 181        CFQ_CFQQ_FLAG_must_dispatch,    /* must dispatch, even if expired */
 182        CFQ_CFQQ_FLAG_fifo_expire,      /* FIFO checked in this slice */
 183        CFQ_CFQQ_FLAG_idle_window,      /* slice idling enabled */
 184        CFQ_CFQQ_FLAG_prio_changed,     /* task priority has changed */
 185        CFQ_CFQQ_FLAG_queue_new,        /* queue never been serviced */
 186        CFQ_CFQQ_FLAG_slice_new,        /* no requests dispatched in slice */
 187        CFQ_CFQQ_FLAG_sync,             /* synchronous queue */
 188};
 189
 190#define CFQ_CFQQ_FNS(name)                                              \
 191static inline void cfq_mark_cfqq_##name(struct cfq_queue *cfqq)         \
 192{                                                                       \
 193        (cfqq)->flags |= (1 << CFQ_CFQQ_FLAG_##name);                   \
 194}                                                                       \
 195static inline void cfq_clear_cfqq_##name(struct cfq_queue *cfqq)        \
 196{                                                                       \
 197        (cfqq)->flags &= ~(1 << CFQ_CFQQ_FLAG_##name);                  \
 198}                                                                       \
 199static inline int cfq_cfqq_##name(const struct cfq_queue *cfqq)         \
 200{                                                                       \
 201        return ((cfqq)->flags & (1 << CFQ_CFQQ_FLAG_##name)) != 0;      \
 202}
 203
 204CFQ_CFQQ_FNS(on_rr);
 205CFQ_CFQQ_FNS(wait_request);
 206CFQ_CFQQ_FNS(must_alloc);
 207CFQ_CFQQ_FNS(must_alloc_slice);
 208CFQ_CFQQ_FNS(must_dispatch);
 209CFQ_CFQQ_FNS(fifo_expire);
 210CFQ_CFQQ_FNS(idle_window);
 211CFQ_CFQQ_FNS(prio_changed);
 212CFQ_CFQQ_FNS(queue_new);
 213CFQ_CFQQ_FNS(slice_new);
 214CFQ_CFQQ_FNS(sync);
 215#undef CFQ_CFQQ_FNS
 216
 217#define cfq_log_cfqq(cfqd, cfqq, fmt, args...)  \
 218        blk_add_trace_msg((cfqd)->queue, "cfq%d " fmt, (cfqq)->pid, ##args)
 219#define cfq_log(cfqd, fmt, args...)     \
 220        blk_add_trace_msg((cfqd)->queue, "cfq " fmt, ##args)
 221
 222static void cfq_dispatch_insert(struct request_queue *, struct request *);
 223static struct cfq_queue *cfq_get_queue(struct cfq_data *, int,
 224                                       struct io_context *, gfp_t);
 225static struct cfq_io_context *cfq_cic_lookup(struct cfq_data *,
 226                                                struct io_context *);
 227
 228static inline struct cfq_queue *cic_to_cfqq(struct cfq_io_context *cic,
 229                                            int is_sync)
 230{
 231        return cic->cfqq[!!is_sync];
 232}
 233
 234static inline void cic_set_cfqq(struct cfq_io_context *cic,
 235                                struct cfq_queue *cfqq, int is_sync)
 236{
 237        cic->cfqq[!!is_sync] = cfqq;
 238}
 239
 240/*
 241 * We regard a request as SYNC, if it's either a read or has the SYNC bit
 242 * set (in which case it could also be direct WRITE).
 243 */
 244static inline int cfq_bio_sync(struct bio *bio)
 245{
 246        if (bio_data_dir(bio) == READ || bio_sync(bio))
 247                return 1;
 248
 249        return 0;
 250}
 251
 252/*
 253 * scheduler run of queue, if there are requests pending and no one in the
 254 * driver that will restart queueing
 255 */
 256static inline void cfq_schedule_dispatch(struct cfq_data *cfqd)
 257{
 258        if (cfqd->busy_queues) {
 259                cfq_log(cfqd, "schedule dispatch");
 260                kblockd_schedule_work(cfqd->queue, &cfqd->unplug_work);
 261        }
 262}
 263
 264static int cfq_queue_empty(struct request_queue *q)
 265{
 266        struct cfq_data *cfqd = q->elevator->elevator_data;
 267
 268        return !cfqd->busy_queues;
 269}
 270
 271/*
 272 * Scale schedule slice based on io priority. Use the sync time slice only
 273 * if a queue is marked sync and has sync io queued. A sync queue with async
 274 * io only, should not get full sync slice length.
 275 */
 276static inline int cfq_prio_slice(struct cfq_data *cfqd, int sync,
 277                                 unsigned short prio)
 278{
 279        const int base_slice = cfqd->cfq_slice[sync];
 280
 281        WARN_ON(prio >= IOPRIO_BE_NR);
 282
 283        return base_slice + (base_slice/CFQ_SLICE_SCALE * (4 - prio));
 284}
 285
 286static inline int
 287cfq_prio_to_slice(struct cfq_data *cfqd, struct cfq_queue *cfqq)
 288{
 289        return cfq_prio_slice(cfqd, cfq_cfqq_sync(cfqq), cfqq->ioprio);
 290}
 291
 292static inline void
 293cfq_set_prio_slice(struct cfq_data *cfqd, struct cfq_queue *cfqq)
 294{
 295        cfqq->slice_end = cfq_prio_to_slice(cfqd, cfqq) + jiffies;
 296        cfq_log_cfqq(cfqd, cfqq, "set_slice=%lu", cfqq->slice_end - jiffies);
 297}
 298
 299/*
 300 * We need to wrap this check in cfq_cfqq_slice_new(), since ->slice_end
 301 * isn't valid until the first request from the dispatch is activated
 302 * and the slice time set.
 303 */
 304static inline int cfq_slice_used(struct cfq_queue *cfqq)
 305{
 306        if (cfq_cfqq_slice_new(cfqq))
 307                return 0;
 308        if (time_before(jiffies, cfqq->slice_end))
 309                return 0;
 310
 311        return 1;
 312}
 313
 314/*
 315 * Lifted from AS - choose which of rq1 and rq2 that is best served now.
 316 * We choose the request that is closest to the head right now. Distance
 317 * behind the head is penalized and only allowed to a certain extent.
 318 */
 319static struct request *
 320cfq_choose_req(struct cfq_data *cfqd, struct request *rq1, struct request *rq2)
 321{
 322        sector_t last, s1, s2, d1 = 0, d2 = 0;
 323        unsigned long back_max;
 324#define CFQ_RQ1_WRAP    0x01 /* request 1 wraps */
 325#define CFQ_RQ2_WRAP    0x02 /* request 2 wraps */
 326        unsigned wrap = 0; /* bit mask: requests behind the disk head? */
 327
 328        if (rq1 == NULL || rq1 == rq2)
 329                return rq2;
 330        if (rq2 == NULL)
 331                return rq1;
 332
 333        if (rq_is_sync(rq1) && !rq_is_sync(rq2))
 334                return rq1;
 335        else if (rq_is_sync(rq2) && !rq_is_sync(rq1))
 336                return rq2;
 337        if (rq_is_meta(rq1) && !rq_is_meta(rq2))
 338                return rq1;
 339        else if (rq_is_meta(rq2) && !rq_is_meta(rq1))
 340                return rq2;
 341
 342        s1 = rq1->sector;
 343        s2 = rq2->sector;
 344
 345        last = cfqd->last_position;
 346
 347        /*
 348         * by definition, 1KiB is 2 sectors
 349         */
 350        back_max = cfqd->cfq_back_max * 2;
 351
 352        /*
 353         * Strict one way elevator _except_ in the case where we allow
 354         * short backward seeks which are biased as twice the cost of a
 355         * similar forward seek.
 356         */
 357        if (s1 >= last)
 358                d1 = s1 - last;
 359        else if (s1 + back_max >= last)
 360                d1 = (last - s1) * cfqd->cfq_back_penalty;
 361        else
 362                wrap |= CFQ_RQ1_WRAP;
 363
 364        if (s2 >= last)
 365                d2 = s2 - last;
 366        else if (s2 + back_max >= last)
 367                d2 = (last - s2) * cfqd->cfq_back_penalty;
 368        else
 369                wrap |= CFQ_RQ2_WRAP;
 370
 371        /* Found required data */
 372
 373        /*
 374         * By doing switch() on the bit mask "wrap" we avoid having to
 375         * check two variables for all permutations: --> faster!
 376         */
 377        switch (wrap) {
 378        case 0: /* common case for CFQ: rq1 and rq2 not wrapped */
 379                if (d1 < d2)
 380                        return rq1;
 381                else if (d2 < d1)
 382                        return rq2;
 383                else {
 384                        if (s1 >= s2)
 385                                return rq1;
 386                        else
 387                                return rq2;
 388                }
 389
 390        case CFQ_RQ2_WRAP:
 391                return rq1;
 392        case CFQ_RQ1_WRAP:
 393                return rq2;
 394        case (CFQ_RQ1_WRAP|CFQ_RQ2_WRAP): /* both rqs wrapped */
 395        default:
 396                /*
 397                 * Since both rqs are wrapped,
 398                 * start with the one that's further behind head
 399                 * (--> only *one* back seek required),
 400                 * since back seek takes more time than forward.
 401                 */
 402                if (s1 <= s2)
 403                        return rq1;
 404                else
 405                        return rq2;
 406        }
 407}
 408
 409/*
 410 * The below is leftmost cache rbtree addon
 411 */
 412static struct cfq_queue *cfq_rb_first(struct cfq_rb_root *root)
 413{
 414        if (!root->left)
 415                root->left = rb_first(&root->rb);
 416
 417        if (root->left)
 418                return rb_entry(root->left, struct cfq_queue, rb_node);
 419
 420        return NULL;
 421}
 422
 423static void cfq_rb_erase(struct rb_node *n, struct cfq_rb_root *root)
 424{
 425        if (root->left == n)
 426                root->left = NULL;
 427
 428        rb_erase(n, &root->rb);
 429        RB_CLEAR_NODE(n);
 430}
 431
 432/*
 433 * would be nice to take fifo expire time into account as well
 434 */
 435static struct request *
 436cfq_find_next_rq(struct cfq_data *cfqd, struct cfq_queue *cfqq,
 437                  struct request *last)
 438{
 439        struct rb_node *rbnext = rb_next(&last->rb_node);
 440        struct rb_node *rbprev = rb_prev(&last->rb_node);
 441        struct request *next = NULL, *prev = NULL;
 442
 443        BUG_ON(RB_EMPTY_NODE(&last->rb_node));
 444
 445        if (rbprev)
 446                prev = rb_entry_rq(rbprev);
 447
 448        if (rbnext)
 449                next = rb_entry_rq(rbnext);
 450        else {
 451                rbnext = rb_first(&cfqq->sort_list);
 452                if (rbnext && rbnext != &last->rb_node)
 453                        next = rb_entry_rq(rbnext);
 454        }
 455
 456        return cfq_choose_req(cfqd, next, prev);
 457}
 458
 459static unsigned long cfq_slice_offset(struct cfq_data *cfqd,
 460                                      struct cfq_queue *cfqq)
 461{
 462        /*
 463         * just an approximation, should be ok.
 464         */
 465        return (cfqd->busy_queues - 1) * (cfq_prio_slice(cfqd, 1, 0) -
 466                       cfq_prio_slice(cfqd, cfq_cfqq_sync(cfqq), cfqq->ioprio));
 467}
 468
 469/*
 470 * The cfqd->service_tree holds all pending cfq_queue's that have
 471 * requests waiting to be processed. It is sorted in the order that
 472 * we will service the queues.
 473 */
 474static void cfq_service_tree_add(struct cfq_data *cfqd,
 475                                    struct cfq_queue *cfqq, int add_front)
 476{
 477        struct rb_node **p, *parent;
 478        struct cfq_queue *__cfqq;
 479        unsigned long rb_key;
 480        int left;
 481
 482        if (cfq_class_idle(cfqq)) {
 483                rb_key = CFQ_IDLE_DELAY;
 484                parent = rb_last(&cfqd->service_tree.rb);
 485                if (parent && parent != &cfqq->rb_node) {
 486                        __cfqq = rb_entry(parent, struct cfq_queue, rb_node);
 487                        rb_key += __cfqq->rb_key;
 488                } else
 489                        rb_key += jiffies;
 490        } else if (!add_front) {
 491                rb_key = cfq_slice_offset(cfqd, cfqq) + jiffies;
 492                rb_key += cfqq->slice_resid;
 493                cfqq->slice_resid = 0;
 494        } else
 495                rb_key = 0;
 496
 497        if (!RB_EMPTY_NODE(&cfqq->rb_node)) {
 498                /*
 499                 * same position, nothing more to do
 500                 */
 501                if (rb_key == cfqq->rb_key)
 502                        return;
 503
 504                cfq_rb_erase(&cfqq->rb_node, &cfqd->service_tree);
 505        }
 506
 507        left = 1;
 508        parent = NULL;
 509        p = &cfqd->service_tree.rb.rb_node;
 510        while (*p) {
 511                struct rb_node **n;
 512
 513                parent = *p;
 514                __cfqq = rb_entry(parent, struct cfq_queue, rb_node);
 515
 516                /*
 517                 * sort RT queues first, we always want to give
 518                 * preference to them. IDLE queues goes to the back.
 519                 * after that, sort on the next service time.
 520                 */
 521                if (cfq_class_rt(cfqq) > cfq_class_rt(__cfqq))
 522                        n = &(*p)->rb_left;
 523                else if (cfq_class_rt(cfqq) < cfq_class_rt(__cfqq))
 524                        n = &(*p)->rb_right;
 525                else if (cfq_class_idle(cfqq) < cfq_class_idle(__cfqq))
 526                        n = &(*p)->rb_left;
 527                else if (cfq_class_idle(cfqq) > cfq_class_idle(__cfqq))
 528                        n = &(*p)->rb_right;
 529                else if (rb_key < __cfqq->rb_key)
 530                        n = &(*p)->rb_left;
 531                else
 532                        n = &(*p)->rb_right;
 533
 534                if (n == &(*p)->rb_right)
 535                        left = 0;
 536
 537                p = n;
 538        }
 539
 540        if (left)
 541                cfqd->service_tree.left = &cfqq->rb_node;
 542
 543        cfqq->rb_key = rb_key;
 544        rb_link_node(&cfqq->rb_node, parent, p);
 545        rb_insert_color(&cfqq->rb_node, &cfqd->service_tree.rb);
 546}
 547
 548/*
 549 * Update cfqq's position in the service tree.
 550 */
 551static void cfq_resort_rr_list(struct cfq_data *cfqd, struct cfq_queue *cfqq)
 552{
 553        /*
 554         * Resorting requires the cfqq to be on the RR list already.
 555         */
 556        if (cfq_cfqq_on_rr(cfqq))
 557                cfq_service_tree_add(cfqd, cfqq, 0);
 558}
 559
 560/*
 561 * add to busy list of queues for service, trying to be fair in ordering
 562 * the pending list according to last request service
 563 */
 564static void cfq_add_cfqq_rr(struct cfq_data *cfqd, struct cfq_queue *cfqq)
 565{
 566        cfq_log_cfqq(cfqd, cfqq, "add_to_rr");
 567        BUG_ON(cfq_cfqq_on_rr(cfqq));
 568        cfq_mark_cfqq_on_rr(cfqq);
 569        cfqd->busy_queues++;
 570        if (cfq_class_rt(cfqq))
 571                cfqd->busy_rt_queues++;
 572
 573        cfq_resort_rr_list(cfqd, cfqq);
 574}
 575
 576/*
 577 * Called when the cfqq no longer has requests pending, remove it from
 578 * the service tree.
 579 */
 580static void cfq_del_cfqq_rr(struct cfq_data *cfqd, struct cfq_queue *cfqq)
 581{
 582        cfq_log_cfqq(cfqd, cfqq, "del_from_rr");
 583        BUG_ON(!cfq_cfqq_on_rr(cfqq));
 584        cfq_clear_cfqq_on_rr(cfqq);
 585
 586        if (!RB_EMPTY_NODE(&cfqq->rb_node))
 587                cfq_rb_erase(&cfqq->rb_node, &cfqd->service_tree);
 588
 589        BUG_ON(!cfqd->busy_queues);
 590        cfqd->busy_queues--;
 591        if (cfq_class_rt(cfqq))
 592                cfqd->busy_rt_queues--;
 593}
 594
 595/*
 596 * rb tree support functions
 597 */
 598static void cfq_del_rq_rb(struct request *rq)
 599{
 600        struct cfq_queue *cfqq = RQ_CFQQ(rq);
 601        struct cfq_data *cfqd = cfqq->cfqd;
 602        const int sync = rq_is_sync(rq);
 603
 604        BUG_ON(!cfqq->queued[sync]);
 605        cfqq->queued[sync]--;
 606
 607        elv_rb_del(&cfqq->sort_list, rq);
 608
 609        if (cfq_cfqq_on_rr(cfqq) && RB_EMPTY_ROOT(&cfqq->sort_list))
 610                cfq_del_cfqq_rr(cfqd, cfqq);
 611}
 612
 613static void cfq_add_rq_rb(struct request *rq)
 614{
 615        struct cfq_queue *cfqq = RQ_CFQQ(rq);
 616        struct cfq_data *cfqd = cfqq->cfqd;
 617        struct request *__alias;
 618
 619        cfqq->queued[rq_is_sync(rq)]++;
 620
 621        /*
 622         * looks a little odd, but the first insert might return an alias.
 623         * if that happens, put the alias on the dispatch list
 624         */
 625        while ((__alias = elv_rb_add(&cfqq->sort_list, rq)) != NULL)
 626                cfq_dispatch_insert(cfqd->queue, __alias);
 627
 628        if (!cfq_cfqq_on_rr(cfqq))
 629                cfq_add_cfqq_rr(cfqd, cfqq);
 630
 631        /*
 632         * check if this request is a better next-serve candidate
 633         */
 634        cfqq->next_rq = cfq_choose_req(cfqd, cfqq->next_rq, rq);
 635        BUG_ON(!cfqq->next_rq);
 636}
 637
 638static void cfq_reposition_rq_rb(struct cfq_queue *cfqq, struct request *rq)
 639{
 640        elv_rb_del(&cfqq->sort_list, rq);
 641        cfqq->queued[rq_is_sync(rq)]--;
 642        cfq_add_rq_rb(rq);
 643}
 644
 645static struct request *
 646cfq_find_rq_fmerge(struct cfq_data *cfqd, struct bio *bio)
 647{
 648        struct task_struct *tsk = current;
 649        struct cfq_io_context *cic;
 650        struct cfq_queue *cfqq;
 651
 652        cic = cfq_cic_lookup(cfqd, tsk->io_context);
 653        if (!cic)
 654                return NULL;
 655
 656        cfqq = cic_to_cfqq(cic, cfq_bio_sync(bio));
 657        if (cfqq) {
 658                sector_t sector = bio->bi_sector + bio_sectors(bio);
 659
 660                return elv_rb_find(&cfqq->sort_list, sector);
 661        }
 662
 663        return NULL;
 664}
 665
 666static void cfq_activate_request(struct request_queue *q, struct request *rq)
 667{
 668        struct cfq_data *cfqd = q->elevator->elevator_data;
 669
 670        cfqd->rq_in_driver++;
 671        cfq_log_cfqq(cfqd, RQ_CFQQ(rq), "activate rq, drv=%d",
 672                                                cfqd->rq_in_driver);
 673
 674        cfqd->last_position = rq->hard_sector + rq->hard_nr_sectors;
 675}
 676
 677static void cfq_deactivate_request(struct request_queue *q, struct request *rq)
 678{
 679        struct cfq_data *cfqd = q->elevator->elevator_data;
 680
 681        WARN_ON(!cfqd->rq_in_driver);
 682        cfqd->rq_in_driver--;
 683        cfq_log_cfqq(cfqd, RQ_CFQQ(rq), "deactivate rq, drv=%d",
 684                                                cfqd->rq_in_driver);
 685}
 686
 687static void cfq_remove_request(struct request *rq)
 688{
 689        struct cfq_queue *cfqq = RQ_CFQQ(rq);
 690
 691        if (cfqq->next_rq == rq)
 692                cfqq->next_rq = cfq_find_next_rq(cfqq->cfqd, cfqq, rq);
 693
 694        list_del_init(&rq->queuelist);
 695        cfq_del_rq_rb(rq);
 696
 697        cfqq->cfqd->rq_queued--;
 698        if (rq_is_meta(rq)) {
 699                WARN_ON(!cfqq->meta_pending);
 700                cfqq->meta_pending--;
 701        }
 702}
 703
 704static int cfq_merge(struct request_queue *q, struct request **req,
 705                     struct bio *bio)
 706{
 707        struct cfq_data *cfqd = q->elevator->elevator_data;
 708        struct request *__rq;
 709
 710        __rq = cfq_find_rq_fmerge(cfqd, bio);
 711        if (__rq && elv_rq_merge_ok(__rq, bio)) {
 712                *req = __rq;
 713                return ELEVATOR_FRONT_MERGE;
 714        }
 715
 716        return ELEVATOR_NO_MERGE;
 717}
 718
 719static void cfq_merged_request(struct request_queue *q, struct request *req,
 720                               int type)
 721{
 722        if (type == ELEVATOR_FRONT_MERGE) {
 723                struct cfq_queue *cfqq = RQ_CFQQ(req);
 724
 725                cfq_reposition_rq_rb(cfqq, req);
 726        }
 727}
 728
 729static void
 730cfq_merged_requests(struct request_queue *q, struct request *rq,
 731                    struct request *next)
 732{
 733        /*
 734         * reposition in fifo if next is older than rq
 735         */
 736        if (!list_empty(&rq->queuelist) && !list_empty(&next->queuelist) &&
 737            time_before(next->start_time, rq->start_time))
 738                list_move(&rq->queuelist, &next->queuelist);
 739
 740        cfq_remove_request(next);
 741}
 742
 743static int cfq_allow_merge(struct request_queue *q, struct request *rq,
 744                           struct bio *bio)
 745{
 746        struct cfq_data *cfqd = q->elevator->elevator_data;
 747        struct cfq_io_context *cic;
 748        struct cfq_queue *cfqq;
 749
 750        /*
 751         * Disallow merge of a sync bio into an async request.
 752         */
 753        if (cfq_bio_sync(bio) && !rq_is_sync(rq))
 754                return 0;
 755
 756        /*
 757         * Lookup the cfqq that this bio will be queued with. Allow
 758         * merge only if rq is queued there.
 759         */
 760        cic = cfq_cic_lookup(cfqd, current->io_context);
 761        if (!cic)
 762                return 0;
 763
 764        cfqq = cic_to_cfqq(cic, cfq_bio_sync(bio));
 765        if (cfqq == RQ_CFQQ(rq))
 766                return 1;
 767
 768        return 0;
 769}
 770
 771static void __cfq_set_active_queue(struct cfq_data *cfqd,
 772                                   struct cfq_queue *cfqq)
 773{
 774        if (cfqq) {
 775                cfq_log_cfqq(cfqd, cfqq, "set_active");
 776                cfqq->slice_end = 0;
 777                cfq_clear_cfqq_must_alloc_slice(cfqq);
 778                cfq_clear_cfqq_fifo_expire(cfqq);
 779                cfq_mark_cfqq_slice_new(cfqq);
 780                cfq_clear_cfqq_queue_new(cfqq);
 781        }
 782
 783        cfqd->active_queue = cfqq;
 784}
 785
 786/*
 787 * current cfqq expired its slice (or was too idle), select new one
 788 */
 789static void
 790__cfq_slice_expired(struct cfq_data *cfqd, struct cfq_queue *cfqq,
 791                    int timed_out)
 792{
 793        cfq_log_cfqq(cfqd, cfqq, "slice expired t=%d", timed_out);
 794
 795        if (cfq_cfqq_wait_request(cfqq))
 796                del_timer(&cfqd->idle_slice_timer);
 797
 798        cfq_clear_cfqq_must_dispatch(cfqq);
 799        cfq_clear_cfqq_wait_request(cfqq);
 800
 801        /*
 802         * store what was left of this slice, if the queue idled/timed out
 803         */
 804        if (timed_out && !cfq_cfqq_slice_new(cfqq)) {
 805                cfqq->slice_resid = cfqq->slice_end - jiffies;
 806                cfq_log_cfqq(cfqd, cfqq, "resid=%ld", cfqq->slice_resid);
 807        }
 808
 809        cfq_resort_rr_list(cfqd, cfqq);
 810
 811        if (cfqq == cfqd->active_queue)
 812                cfqd->active_queue = NULL;
 813
 814        if (cfqd->active_cic) {
 815                put_io_context(cfqd->active_cic->ioc);
 816                cfqd->active_cic = NULL;
 817        }
 818}
 819
 820static inline void cfq_slice_expired(struct cfq_data *cfqd, int timed_out)
 821{
 822        struct cfq_queue *cfqq = cfqd->active_queue;
 823
 824        if (cfqq)
 825                __cfq_slice_expired(cfqd, cfqq, timed_out);
 826}
 827
 828/*
 829 * Get next queue for service. Unless we have a queue preemption,
 830 * we'll simply select the first cfqq in the service tree.
 831 */
 832static struct cfq_queue *cfq_get_next_queue(struct cfq_data *cfqd)
 833{
 834        if (RB_EMPTY_ROOT(&cfqd->service_tree.rb))
 835                return NULL;
 836
 837        return cfq_rb_first(&cfqd->service_tree);
 838}
 839
 840/*
 841 * Get and set a new active queue for service.
 842 */
 843static struct cfq_queue *cfq_set_active_queue(struct cfq_data *cfqd)
 844{
 845        struct cfq_queue *cfqq;
 846
 847        cfqq = cfq_get_next_queue(cfqd);
 848        __cfq_set_active_queue(cfqd, cfqq);
 849        return cfqq;
 850}
 851
 852static inline sector_t cfq_dist_from_last(struct cfq_data *cfqd,
 853                                          struct request *rq)
 854{
 855        if (rq->sector >= cfqd->last_position)
 856                return rq->sector - cfqd->last_position;
 857        else
 858                return cfqd->last_position - rq->sector;
 859}
 860
 861static inline int cfq_rq_close(struct cfq_data *cfqd, struct request *rq)
 862{
 863        struct cfq_io_context *cic = cfqd->active_cic;
 864
 865        if (!sample_valid(cic->seek_samples))
 866                return 0;
 867
 868        return cfq_dist_from_last(cfqd, rq) <= cic->seek_mean;
 869}
 870
 871static int cfq_close_cooperator(struct cfq_data *cfq_data,
 872                                struct cfq_queue *cfqq)
 873{
 874        /*
 875         * We should notice if some of the queues are cooperating, eg
 876         * working closely on the same area of the disk. In that case,
 877         * we can group them together and don't waste time idling.
 878         */
 879        return 0;
 880}
 881
 882#define CIC_SEEKY(cic) ((cic)->seek_mean > (8 * 1024))
 883
 884static void cfq_arm_slice_timer(struct cfq_data *cfqd)
 885{
 886        struct cfq_queue *cfqq = cfqd->active_queue;
 887        struct cfq_io_context *cic;
 888        unsigned long sl;
 889
 890        /*
 891         * SSD device without seek penalty, disable idling. But only do so
 892         * for devices that support queuing, otherwise we still have a problem
 893         * with sync vs async workloads.
 894         */
 895        if (blk_queue_nonrot(cfqd->queue) && cfqd->hw_tag)
 896                return;
 897
 898        WARN_ON(!RB_EMPTY_ROOT(&cfqq->sort_list));
 899        WARN_ON(cfq_cfqq_slice_new(cfqq));
 900
 901        /*
 902         * idle is disabled, either manually or by past process history
 903         */
 904        if (!cfqd->cfq_slice_idle || !cfq_cfqq_idle_window(cfqq))
 905                return;
 906
 907        /*
 908         * still requests with the driver, don't idle
 909         */
 910        if (cfqd->rq_in_driver)
 911                return;
 912
 913        /*
 914         * task has exited, don't wait
 915         */
 916        cic = cfqd->active_cic;
 917        if (!cic || !atomic_read(&cic->ioc->nr_tasks))
 918                return;
 919
 920        /*
 921         * See if this prio level has a good candidate
 922         */
 923        if (cfq_close_cooperator(cfqd, cfqq) &&
 924            (sample_valid(cic->ttime_samples) && cic->ttime_mean > 2))
 925                return;
 926
 927        cfq_mark_cfqq_must_dispatch(cfqq);
 928        cfq_mark_cfqq_wait_request(cfqq);
 929
 930        /*
 931         * we don't want to idle for seeks, but we do want to allow
 932         * fair distribution of slice time for a process doing back-to-back
 933         * seeks. so allow a little bit of time for him to submit a new rq
 934         */
 935        sl = cfqd->cfq_slice_idle;
 936        if (sample_valid(cic->seek_samples) && CIC_SEEKY(cic))
 937                sl = min(sl, msecs_to_jiffies(CFQ_MIN_TT));
 938
 939        mod_timer(&cfqd->idle_slice_timer, jiffies + sl);
 940        cfq_log(cfqd, "arm_idle: %lu", sl);
 941}
 942
 943/*
 944 * Move request from internal lists to the request queue dispatch list.
 945 */
 946static void cfq_dispatch_insert(struct request_queue *q, struct request *rq)
 947{
 948        struct cfq_data *cfqd = q->elevator->elevator_data;
 949        struct cfq_queue *cfqq = RQ_CFQQ(rq);
 950
 951        cfq_log_cfqq(cfqd, cfqq, "dispatch_insert");
 952
 953        cfq_remove_request(rq);
 954        cfqq->dispatched++;
 955        elv_dispatch_sort(q, rq);
 956
 957        if (cfq_cfqq_sync(cfqq))
 958                cfqd->sync_flight++;
 959}
 960
 961/*
 962 * return expired entry, or NULL to just start from scratch in rbtree
 963 */
 964static struct request *cfq_check_fifo(struct cfq_queue *cfqq)
 965{
 966        struct cfq_data *cfqd = cfqq->cfqd;
 967        struct request *rq;
 968        int fifo;
 969
 970        if (cfq_cfqq_fifo_expire(cfqq))
 971                return NULL;
 972
 973        cfq_mark_cfqq_fifo_expire(cfqq);
 974
 975        if (list_empty(&cfqq->fifo))
 976                return NULL;
 977
 978        fifo = cfq_cfqq_sync(cfqq);
 979        rq = rq_entry_fifo(cfqq->fifo.next);
 980
 981        if (time_before(jiffies, rq->start_time + cfqd->cfq_fifo_expire[fifo]))
 982                rq = NULL;
 983
 984        cfq_log_cfqq(cfqd, cfqq, "fifo=%p", rq);
 985        return rq;
 986}
 987
 988static inline int
 989cfq_prio_to_maxrq(struct cfq_data *cfqd, struct cfq_queue *cfqq)
 990{
 991        const int base_rq = cfqd->cfq_slice_async_rq;
 992
 993        WARN_ON(cfqq->ioprio >= IOPRIO_BE_NR);
 994
 995        return 2 * (base_rq + base_rq * (CFQ_PRIO_LISTS - 1 - cfqq->ioprio));
 996}
 997
 998/*
 999 * Select a queue for service. If we have a current active queue,
1000 * check whether to continue servicing it, or retrieve and set a new one.
1001 */
1002static struct cfq_queue *cfq_select_queue(struct cfq_data *cfqd)
1003{
1004        struct cfq_queue *cfqq;
1005
1006        cfqq = cfqd->active_queue;
1007        if (!cfqq)
1008                goto new_queue;
1009
1010        /*
1011         * The active queue has run out of time, expire it and select new.
1012         */
1013        if (cfq_slice_used(cfqq))
1014                goto expire;
1015
1016        /*
1017         * If we have a RT cfqq waiting, then we pre-empt the current non-rt
1018         * cfqq.
1019         */
1020        if (!cfq_class_rt(cfqq) && cfqd->busy_rt_queues) {
1021                /*
1022                 * We simulate this as cfqq timed out so that it gets to bank
1023                 * the remaining of its time slice.
1024                 */
1025                cfq_log_cfqq(cfqd, cfqq, "preempt");
1026                cfq_slice_expired(cfqd, 1);
1027                goto new_queue;
1028        }
1029
1030        /*
1031         * The active queue has requests and isn't expired, allow it to
1032         * dispatch.
1033         */
1034        if (!RB_EMPTY_ROOT(&cfqq->sort_list))
1035                goto keep_queue;
1036
1037        /*
1038         * No requests pending. If the active queue still has requests in
1039         * flight or is idling for a new request, allow either of these
1040         * conditions to happen (or time out) before selecting a new queue.
1041         */
1042        if (timer_pending(&cfqd->idle_slice_timer) ||
1043            (cfqq->dispatched && cfq_cfqq_idle_window(cfqq))) {
1044                cfqq = NULL;
1045                goto keep_queue;
1046        }
1047
1048expire:
1049        cfq_slice_expired(cfqd, 0);
1050new_queue:
1051        cfqq = cfq_set_active_queue(cfqd);
1052keep_queue:
1053        return cfqq;
1054}
1055
1056/*
1057 * Dispatch some requests from cfqq, moving them to the request queue
1058 * dispatch list.
1059 */
1060static int
1061__cfq_dispatch_requests(struct cfq_data *cfqd, struct cfq_queue *cfqq,
1062                        int max_dispatch)
1063{
1064        int dispatched = 0;
1065
1066        BUG_ON(RB_EMPTY_ROOT(&cfqq->sort_list));
1067
1068        do {
1069                struct request *rq;
1070
1071                /*
1072                 * follow expired path, else get first next available
1073                 */
1074                rq = cfq_check_fifo(cfqq);
1075                if (rq == NULL)
1076                        rq = cfqq->next_rq;
1077
1078                /*
1079                 * finally, insert request into driver dispatch list
1080                 */
1081                cfq_dispatch_insert(cfqd->queue, rq);
1082
1083                dispatched++;
1084
1085                if (!cfqd->active_cic) {
1086                        atomic_inc(&RQ_CIC(rq)->ioc->refcount);
1087                        cfqd->active_cic = RQ_CIC(rq);
1088                }
1089
1090                if (RB_EMPTY_ROOT(&cfqq->sort_list))
1091                        break;
1092
1093                /*
1094                 * If there is a non-empty RT cfqq waiting for current
1095                 * cfqq's timeslice to complete, pre-empt this cfqq
1096                 */
1097                if (!cfq_class_rt(cfqq) && cfqd->busy_rt_queues)
1098                        break;
1099
1100        } while (dispatched < max_dispatch);
1101
1102        /*
1103         * expire an async queue immediately if it has used up its slice. idle
1104         * queue always expire after 1 dispatch round.
1105         */
1106        if (cfqd->busy_queues > 1 && ((!cfq_cfqq_sync(cfqq) &&
1107            dispatched >= cfq_prio_to_maxrq(cfqd, cfqq)) ||
1108            cfq_class_idle(cfqq))) {
1109                cfqq->slice_end = jiffies + 1;
1110                cfq_slice_expired(cfqd, 0);
1111        }
1112
1113        return dispatched;
1114}
1115
1116static int __cfq_forced_dispatch_cfqq(struct cfq_queue *cfqq)
1117{
1118        int dispatched = 0;
1119
1120        while (cfqq->next_rq) {
1121                cfq_dispatch_insert(cfqq->cfqd->queue, cfqq->next_rq);
1122                dispatched++;
1123        }
1124
1125        BUG_ON(!list_empty(&cfqq->fifo));
1126        return dispatched;
1127}
1128
1129/*
1130 * Drain our current requests. Used for barriers and when switching
1131 * io schedulers on-the-fly.
1132 */
1133static int cfq_forced_dispatch(struct cfq_data *cfqd)
1134{
1135        struct cfq_queue *cfqq;
1136        int dispatched = 0;
1137
1138        while ((cfqq = cfq_rb_first(&cfqd->service_tree)) != NULL)
1139                dispatched += __cfq_forced_dispatch_cfqq(cfqq);
1140
1141        cfq_slice_expired(cfqd, 0);
1142
1143        BUG_ON(cfqd->busy_queues);
1144
1145        cfq_log(cfqd, "forced_dispatch=%d\n", dispatched);
1146        return dispatched;
1147}
1148
1149static int cfq_dispatch_requests(struct request_queue *q, int force)
1150{
1151        struct cfq_data *cfqd = q->elevator->elevator_data;
1152        struct cfq_queue *cfqq;
1153        int dispatched;
1154
1155        if (!cfqd->busy_queues)
1156                return 0;
1157
1158        if (unlikely(force))
1159                return cfq_forced_dispatch(cfqd);
1160
1161        dispatched = 0;
1162        while ((cfqq = cfq_select_queue(cfqd)) != NULL) {
1163                int max_dispatch;
1164
1165                max_dispatch = cfqd->cfq_quantum;
1166                if (cfq_class_idle(cfqq))
1167                        max_dispatch = 1;
1168
1169                if (cfqq->dispatched >= max_dispatch && cfqd->busy_queues > 1)
1170                        break;
1171
1172                if (cfqd->sync_flight && !cfq_cfqq_sync(cfqq))
1173                        break;
1174
1175                cfq_clear_cfqq_must_dispatch(cfqq);
1176                cfq_clear_cfqq_wait_request(cfqq);
1177                del_timer(&cfqd->idle_slice_timer);
1178
1179                dispatched += __cfq_dispatch_requests(cfqd, cfqq, max_dispatch);
1180        }
1181
1182        cfq_log(cfqd, "dispatched=%d", dispatched);
1183        return dispatched;
1184}
1185
1186/*
1187 * task holds one reference to the queue, dropped when task exits. each rq
1188 * in-flight on this queue also holds a reference, dropped when rq is freed.
1189 *
1190 * queue lock must be held here.
1191 */
1192static void cfq_put_queue(struct cfq_queue *cfqq)
1193{
1194        struct cfq_data *cfqd = cfqq->cfqd;
1195
1196        BUG_ON(atomic_read(&cfqq->ref) <= 0);
1197
1198        if (!atomic_dec_and_test(&cfqq->ref))
1199                return;
1200
1201        cfq_log_cfqq(cfqd, cfqq, "put_queue");
1202        BUG_ON(rb_first(&cfqq->sort_list));
1203        BUG_ON(cfqq->allocated[READ] + cfqq->allocated[WRITE]);
1204        BUG_ON(cfq_cfqq_on_rr(cfqq));
1205
1206        if (unlikely(cfqd->active_queue == cfqq)) {
1207                __cfq_slice_expired(cfqd, cfqq, 0);
1208                cfq_schedule_dispatch(cfqd);
1209        }
1210
1211        kmem_cache_free(cfq_pool, cfqq);
1212}
1213
1214/*
1215 * Must always be called with the rcu_read_lock() held
1216 */
1217static void
1218__call_for_each_cic(struct io_context *ioc,
1219                    void (*func)(struct io_context *, struct cfq_io_context *))
1220{
1221        struct cfq_io_context *cic;
1222        struct hlist_node *n;
1223
1224        hlist_for_each_entry_rcu(cic, n, &ioc->cic_list, cic_list)
1225                func(ioc, cic);
1226}
1227
1228/*
1229 * Call func for each cic attached to this ioc.
1230 */
1231static void
1232call_for_each_cic(struct io_context *ioc,
1233                  void (*func)(struct io_context *, struct cfq_io_context *))
1234{
1235        rcu_read_lock();
1236        __call_for_each_cic(ioc, func);
1237        rcu_read_unlock();
1238}
1239
1240static void cfq_cic_free_rcu(struct rcu_head *head)
1241{
1242        struct cfq_io_context *cic;
1243
1244        cic = container_of(head, struct cfq_io_context, rcu_head);
1245
1246        kmem_cache_free(cfq_ioc_pool, cic);
1247        elv_ioc_count_dec(ioc_count);
1248
1249        if (ioc_gone) {
1250                /*
1251                 * CFQ scheduler is exiting, grab exit lock and check
1252                 * the pending io context count. If it hits zero,
1253                 * complete ioc_gone and set it back to NULL
1254                 */
1255                spin_lock(&ioc_gone_lock);
1256                if (ioc_gone && !elv_ioc_count_read(ioc_count)) {
1257                        complete(ioc_gone);
1258                        ioc_gone = NULL;
1259                }
1260                spin_unlock(&ioc_gone_lock);
1261        }
1262}
1263
1264static void cfq_cic_free(struct cfq_io_context *cic)
1265{
1266        call_rcu(&cic->rcu_head, cfq_cic_free_rcu);
1267}
1268
1269static void cic_free_func(struct io_context *ioc, struct cfq_io_context *cic)
1270{
1271        unsigned long flags;
1272
1273        BUG_ON(!cic->dead_key);
1274
1275        spin_lock_irqsave(&ioc->lock, flags);
1276        radix_tree_delete(&ioc->radix_root, cic->dead_key);
1277        hlist_del_rcu(&cic->cic_list);
1278        spin_unlock_irqrestore(&ioc->lock, flags);
1279
1280        cfq_cic_free(cic);
1281}
1282
1283/*
1284 * Must be called with rcu_read_lock() held or preemption otherwise disabled.
1285 * Only two callers of this - ->dtor() which is called with the rcu_read_lock(),
1286 * and ->trim() which is called with the task lock held
1287 */
1288static void cfq_free_io_context(struct io_context *ioc)
1289{
1290        /*
1291         * ioc->refcount is zero here, or we are called from elv_unregister(),
1292         * so no more cic's are allowed to be linked into this ioc.  So it
1293         * should be ok to iterate over the known list, we will see all cic's
1294         * since no new ones are added.
1295         */
1296        __call_for_each_cic(ioc, cic_free_func);
1297}
1298
1299static void cfq_exit_cfqq(struct cfq_data *cfqd, struct cfq_queue *cfqq)
1300{
1301        if (unlikely(cfqq == cfqd->active_queue)) {
1302                __cfq_slice_expired(cfqd, cfqq, 0);
1303                cfq_schedule_dispatch(cfqd);
1304        }
1305
1306        cfq_put_queue(cfqq);
1307}
1308
1309static void __cfq_exit_single_io_context(struct cfq_data *cfqd,
1310                                         struct cfq_io_context *cic)
1311{
1312        struct io_context *ioc = cic->ioc;
1313
1314        list_del_init(&cic->queue_list);
1315
1316        /*
1317         * Make sure key == NULL is seen for dead queues
1318         */
1319        smp_wmb();
1320        cic->dead_key = (unsigned long) cic->key;
1321        cic->key = NULL;
1322
1323        if (ioc->ioc_data == cic)
1324                rcu_assign_pointer(ioc->ioc_data, NULL);
1325
1326        if (cic->cfqq[ASYNC]) {
1327                cfq_exit_cfqq(cfqd, cic->cfqq[ASYNC]);
1328                cic->cfqq[ASYNC] = NULL;
1329        }
1330
1331        if (cic->cfqq[SYNC]) {
1332                cfq_exit_cfqq(cfqd, cic->cfqq[SYNC]);
1333                cic->cfqq[SYNC] = NULL;
1334        }
1335}
1336
1337static void cfq_exit_single_io_context(struct io_context *ioc,
1338                                       struct cfq_io_context *cic)
1339{
1340        struct cfq_data *cfqd = cic->key;
1341
1342        if (cfqd) {
1343                struct request_queue *q = cfqd->queue;
1344                unsigned long flags;
1345
1346                spin_lock_irqsave(q->queue_lock, flags);
1347
1348                /*
1349                 * Ensure we get a fresh copy of the ->key to prevent
1350                 * race between exiting task and queue
1351                 */
1352                smp_read_barrier_depends();
1353                if (cic->key)
1354                        __cfq_exit_single_io_context(cfqd, cic);
1355
1356                spin_unlock_irqrestore(q->queue_lock, flags);
1357        }
1358}
1359
1360/*
1361 * The process that ioc belongs to has exited, we need to clean up
1362 * and put the internal structures we have that belongs to that process.
1363 */
1364static void cfq_exit_io_context(struct io_context *ioc)
1365{
1366        call_for_each_cic(ioc, cfq_exit_single_io_context);
1367}
1368
1369static struct cfq_io_context *
1370cfq_alloc_io_context(struct cfq_data *cfqd, gfp_t gfp_mask)
1371{
1372        struct cfq_io_context *cic;
1373
1374        cic = kmem_cache_alloc_node(cfq_ioc_pool, gfp_mask | __GFP_ZERO,
1375                                                        cfqd->queue->node);
1376        if (cic) {
1377                cic->last_end_request = jiffies;
1378                INIT_LIST_HEAD(&cic->queue_list);
1379                INIT_HLIST_NODE(&cic->cic_list);
1380                cic->dtor = cfq_free_io_context;
1381                cic->exit = cfq_exit_io_context;
1382                elv_ioc_count_inc(ioc_count);
1383        }
1384
1385        return cic;
1386}
1387
1388static void cfq_init_prio_data(struct cfq_queue *cfqq, struct io_context *ioc)
1389{
1390        struct task_struct *tsk = current;
1391        int ioprio_class;
1392
1393        if (!cfq_cfqq_prio_changed(cfqq))
1394                return;
1395
1396        ioprio_class = IOPRIO_PRIO_CLASS(ioc->ioprio);
1397        switch (ioprio_class) {
1398        default:
1399                printk(KERN_ERR "cfq: bad prio %x\n", ioprio_class);
1400        case IOPRIO_CLASS_NONE:
1401                /*
1402                 * no prio set, inherit CPU scheduling settings
1403                 */
1404                cfqq->ioprio = task_nice_ioprio(tsk);
1405                cfqq->ioprio_class = task_nice_ioclass(tsk);
1406                break;
1407        case IOPRIO_CLASS_RT:
1408                cfqq->ioprio = task_ioprio(ioc);
1409                cfqq->ioprio_class = IOPRIO_CLASS_RT;
1410                break;
1411        case IOPRIO_CLASS_BE:
1412                cfqq->ioprio = task_ioprio(ioc);
1413                cfqq->ioprio_class = IOPRIO_CLASS_BE;
1414                break;
1415        case IOPRIO_CLASS_IDLE:
1416                cfqq->ioprio_class = IOPRIO_CLASS_IDLE;
1417                cfqq->ioprio = 7;
1418                cfq_clear_cfqq_idle_window(cfqq);
1419                break;
1420        }
1421
1422        /*
1423         * keep track of original prio settings in case we have to temporarily
1424         * elevate the priority of this queue
1425         */
1426        cfqq->org_ioprio = cfqq->ioprio;
1427        cfqq->org_ioprio_class = cfqq->ioprio_class;
1428        cfq_clear_cfqq_prio_changed(cfqq);
1429}
1430
1431static void changed_ioprio(struct io_context *ioc, struct cfq_io_context *cic)
1432{
1433        struct cfq_data *cfqd = cic->key;
1434        struct cfq_queue *cfqq;
1435        unsigned long flags;
1436
1437        if (unlikely(!cfqd))
1438                return;
1439
1440        spin_lock_irqsave(cfqd->queue->queue_lock, flags);
1441
1442        cfqq = cic->cfqq[ASYNC];
1443        if (cfqq) {
1444                struct cfq_queue *new_cfqq;
1445                new_cfqq = cfq_get_queue(cfqd, ASYNC, cic->ioc, GFP_ATOMIC);
1446                if (new_cfqq) {
1447                        cic->cfqq[ASYNC] = new_cfqq;
1448                        cfq_put_queue(cfqq);
1449                }
1450        }
1451
1452        cfqq = cic->cfqq[SYNC];
1453        if (cfqq)
1454                cfq_mark_cfqq_prio_changed(cfqq);
1455
1456        spin_unlock_irqrestore(cfqd->queue->queue_lock, flags);
1457}
1458
1459static void cfq_ioc_set_ioprio(struct io_context *ioc)
1460{
1461        call_for_each_cic(ioc, changed_ioprio);
1462        ioc->ioprio_changed = 0;
1463}
1464
1465static struct cfq_queue *
1466cfq_find_alloc_queue(struct cfq_data *cfqd, int is_sync,
1467                     struct io_context *ioc, gfp_t gfp_mask)
1468{
1469        struct cfq_queue *cfqq, *new_cfqq = NULL;
1470        struct cfq_io_context *cic;
1471
1472retry:
1473        cic = cfq_cic_lookup(cfqd, ioc);
1474        /* cic always exists here */
1475        cfqq = cic_to_cfqq(cic, is_sync);
1476
1477        if (!cfqq) {
1478                if (new_cfqq) {
1479                        cfqq = new_cfqq;
1480                        new_cfqq = NULL;
1481                } else if (gfp_mask & __GFP_WAIT) {
1482                        /*
1483                         * Inform the allocator of the fact that we will
1484                         * just repeat this allocation if it fails, to allow
1485                         * the allocator to do whatever it needs to attempt to
1486                         * free memory.
1487                         */
1488                        spin_unlock_irq(cfqd->queue->queue_lock);
1489                        new_cfqq = kmem_cache_alloc_node(cfq_pool,
1490                                        gfp_mask | __GFP_NOFAIL | __GFP_ZERO,
1491                                        cfqd->queue->node);
1492                        spin_lock_irq(cfqd->queue->queue_lock);
1493                        goto retry;
1494                } else {
1495                        cfqq = kmem_cache_alloc_node(cfq_pool,
1496                                        gfp_mask | __GFP_ZERO,
1497                                        cfqd->queue->node);
1498                        if (!cfqq)
1499                                goto out;
1500                }
1501
1502                RB_CLEAR_NODE(&cfqq->rb_node);
1503                INIT_LIST_HEAD(&cfqq->fifo);
1504
1505                atomic_set(&cfqq->ref, 0);
1506                cfqq->cfqd = cfqd;
1507
1508                cfq_mark_cfqq_prio_changed(cfqq);
1509                cfq_mark_cfqq_queue_new(cfqq);
1510
1511                cfq_init_prio_data(cfqq, ioc);
1512
1513                if (is_sync) {
1514                        if (!cfq_class_idle(cfqq))
1515                                cfq_mark_cfqq_idle_window(cfqq);
1516                        cfq_mark_cfqq_sync(cfqq);
1517                }
1518                cfqq->pid = current->pid;
1519                cfq_log_cfqq(cfqd, cfqq, "alloced");
1520        }
1521
1522        if (new_cfqq)
1523                kmem_cache_free(cfq_pool, new_cfqq);
1524
1525out:
1526        WARN_ON((gfp_mask & __GFP_WAIT) && !cfqq);
1527        return cfqq;
1528}
1529
1530static struct cfq_queue **
1531cfq_async_queue_prio(struct cfq_data *cfqd, int ioprio_class, int ioprio)
1532{
1533        switch (ioprio_class) {
1534        case IOPRIO_CLASS_RT:
1535                return &cfqd->async_cfqq[0][ioprio];
1536        case IOPRIO_CLASS_BE:
1537                return &cfqd->async_cfqq[1][ioprio];
1538        case IOPRIO_CLASS_IDLE:
1539                return &cfqd->async_idle_cfqq;
1540        default:
1541                BUG();
1542        }
1543}
1544
1545static struct cfq_queue *
1546cfq_get_queue(struct cfq_data *cfqd, int is_sync, struct io_context *ioc,
1547              gfp_t gfp_mask)
1548{
1549        const int ioprio = task_ioprio(ioc);
1550        const int ioprio_class = task_ioprio_class(ioc);
1551        struct cfq_queue **async_cfqq = NULL;
1552        struct cfq_queue *cfqq = NULL;
1553
1554        if (!is_sync) {
1555                async_cfqq = cfq_async_queue_prio(cfqd, ioprio_class, ioprio);
1556                cfqq = *async_cfqq;
1557        }
1558
1559        if (!cfqq) {
1560                cfqq = cfq_find_alloc_queue(cfqd, is_sync, ioc, gfp_mask);
1561                if (!cfqq)
1562                        return NULL;
1563        }
1564
1565        /*
1566         * pin the queue now that it's allocated, scheduler exit will prune it
1567         */
1568        if (!is_sync && !(*async_cfqq)) {
1569                atomic_inc(&cfqq->ref);
1570                *async_cfqq = cfqq;
1571        }
1572
1573        atomic_inc(&cfqq->ref);
1574        return cfqq;
1575}
1576
1577/*
1578 * We drop cfq io contexts lazily, so we may find a dead one.
1579 */
1580static void
1581cfq_drop_dead_cic(struct cfq_data *cfqd, struct io_context *ioc,
1582                  struct cfq_io_context *cic)
1583{
1584        unsigned long flags;
1585
1586        WARN_ON(!list_empty(&cic->queue_list));
1587
1588        spin_lock_irqsave(&ioc->lock, flags);
1589
1590        BUG_ON(ioc->ioc_data == cic);
1591
1592        radix_tree_delete(&ioc->radix_root, (unsigned long) cfqd);
1593        hlist_del_rcu(&cic->cic_list);
1594        spin_unlock_irqrestore(&ioc->lock, flags);
1595
1596        cfq_cic_free(cic);
1597}
1598
1599static struct cfq_io_context *
1600cfq_cic_lookup(struct cfq_data *cfqd, struct io_context *ioc)
1601{
1602        struct cfq_io_context *cic;
1603        unsigned long flags;
1604        void *k;
1605
1606        if (unlikely(!ioc))
1607                return NULL;
1608
1609        rcu_read_lock();
1610
1611        /*
1612         * we maintain a last-hit cache, to avoid browsing over the tree
1613         */
1614        cic = rcu_dereference(ioc->ioc_data);
1615        if (cic && cic->key == cfqd) {
1616                rcu_read_unlock();
1617                return cic;
1618        }
1619
1620        do {
1621                cic = radix_tree_lookup(&ioc->radix_root, (unsigned long) cfqd);
1622                rcu_read_unlock();
1623                if (!cic)
1624                        break;
1625                /* ->key must be copied to avoid race with cfq_exit_queue() */
1626                k = cic->key;
1627                if (unlikely(!k)) {
1628                        cfq_drop_dead_cic(cfqd, ioc, cic);
1629                        rcu_read_lock();
1630                        continue;
1631                }
1632
1633                spin_lock_irqsave(&ioc->lock, flags);
1634                rcu_assign_pointer(ioc->ioc_data, cic);
1635                spin_unlock_irqrestore(&ioc->lock, flags);
1636                break;
1637        } while (1);
1638
1639        return cic;
1640}
1641
1642/*
1643 * Add cic into ioc, using cfqd as the search key. This enables us to lookup
1644 * the process specific cfq io context when entered from the block layer.
1645 * Also adds the cic to a per-cfqd list, used when this queue is removed.
1646 */
1647static int cfq_cic_link(struct cfq_data *cfqd, struct io_context *ioc,
1648                        struct cfq_io_context *cic, gfp_t gfp_mask)
1649{
1650        unsigned long flags;
1651        int ret;
1652
1653        ret = radix_tree_preload(gfp_mask);
1654        if (!ret) {
1655                cic->ioc = ioc;
1656                cic->key = cfqd;
1657
1658                spin_lock_irqsave(&ioc->lock, flags);
1659                ret = radix_tree_insert(&ioc->radix_root,
1660                                                (unsigned long) cfqd, cic);
1661                if (!ret)
1662                        hlist_add_head_rcu(&cic->cic_list, &ioc->cic_list);
1663                spin_unlock_irqrestore(&ioc->lock, flags);
1664
1665                radix_tree_preload_end();
1666
1667                if (!ret) {
1668                        spin_lock_irqsave(cfqd->queue->queue_lock, flags);
1669                        list_add(&cic->queue_list, &cfqd->cic_list);
1670                        spin_unlock_irqrestore(cfqd->queue->queue_lock, flags);
1671                }
1672        }
1673
1674        if (ret)
1675                printk(KERN_ERR "cfq: cic link failed!\n");
1676
1677        return ret;
1678}
1679
1680/*
1681 * Setup general io context and cfq io context. There can be several cfq
1682 * io contexts per general io context, if this process is doing io to more
1683 * than one device managed by cfq.
1684 */
1685static struct cfq_io_context *
1686cfq_get_io_context(struct cfq_data *cfqd, gfp_t gfp_mask)
1687{
1688        struct io_context *ioc = NULL;
1689        struct cfq_io_context *cic;
1690
1691        might_sleep_if(gfp_mask & __GFP_WAIT);
1692
1693        ioc = get_io_context(gfp_mask, cfqd->queue->node);
1694        if (!ioc)
1695                return NULL;
1696
1697        cic = cfq_cic_lookup(cfqd, ioc);
1698        if (cic)
1699                goto out;
1700
1701        cic = cfq_alloc_io_context(cfqd, gfp_mask);
1702        if (cic == NULL)
1703                goto err;
1704
1705        if (cfq_cic_link(cfqd, ioc, cic, gfp_mask))
1706                goto err_free;
1707
1708out:
1709        smp_read_barrier_depends();
1710        if (unlikely(ioc->ioprio_changed))
1711                cfq_ioc_set_ioprio(ioc);
1712
1713        return cic;
1714err_free:
1715        cfq_cic_free(cic);
1716err:
1717        put_io_context(ioc);
1718        return NULL;
1719}
1720
1721static void
1722cfq_update_io_thinktime(struct cfq_data *cfqd, struct cfq_io_context *cic)
1723{
1724        unsigned long elapsed = jiffies - cic->last_end_request;
1725        unsigned long ttime = min(elapsed, 2UL * cfqd->cfq_slice_idle);
1726
1727        cic->ttime_samples = (7*cic->ttime_samples + 256) / 8;
1728        cic->ttime_total = (7*cic->ttime_total + 256*ttime) / 8;
1729        cic->ttime_mean = (cic->ttime_total + 128) / cic->ttime_samples;
1730}
1731
1732static void
1733cfq_update_io_seektime(struct cfq_data *cfqd, struct cfq_io_context *cic,
1734                       struct request *rq)
1735{
1736        sector_t sdist;
1737        u64 total;
1738
1739        if (cic->last_request_pos < rq->sector)
1740                sdist = rq->sector - cic->last_request_pos;
1741        else
1742                sdist = cic->last_request_pos - rq->sector;
1743
1744        /*
1745         * Don't allow the seek distance to get too large from the
1746         * odd fragment, pagein, etc
1747         */
1748        if (cic->seek_samples <= 60) /* second&third seek */
1749                sdist = min(sdist, (cic->seek_mean * 4) + 2*1024*1024);
1750        else
1751                sdist = min(sdist, (cic->seek_mean * 4) + 2*1024*64);
1752
1753        cic->seek_samples = (7*cic->seek_samples + 256) / 8;
1754        cic->seek_total = (7*cic->seek_total + (u64)256*sdist) / 8;
1755        total = cic->seek_total + (cic->seek_samples/2);
1756        do_div(total, cic->seek_samples);
1757        cic->seek_mean = (sector_t)total;
1758}
1759
1760/*
1761 * Disable idle window if the process thinks too long or seeks so much that
1762 * it doesn't matter
1763 */
1764static void
1765cfq_update_idle_window(struct cfq_data *cfqd, struct cfq_queue *cfqq,
1766                       struct cfq_io_context *cic)
1767{
1768        int old_idle, enable_idle;
1769
1770        /*
1771         * Don't idle for async or idle io prio class
1772         */
1773        if (!cfq_cfqq_sync(cfqq) || cfq_class_idle(cfqq))
1774                return;
1775
1776        enable_idle = old_idle = cfq_cfqq_idle_window(cfqq);
1777
1778        if (!atomic_read(&cic->ioc->nr_tasks) || !cfqd->cfq_slice_idle ||
1779            (cfqd->hw_tag && CIC_SEEKY(cic)))
1780                enable_idle = 0;
1781        else if (sample_valid(cic->ttime_samples)) {
1782                if (cic->ttime_mean > cfqd->cfq_slice_idle)
1783                        enable_idle = 0;
1784                else
1785                        enable_idle = 1;
1786        }
1787
1788        if (old_idle != enable_idle) {
1789                cfq_log_cfqq(cfqd, cfqq, "idle=%d", enable_idle);
1790                if (enable_idle)
1791                        cfq_mark_cfqq_idle_window(cfqq);
1792                else
1793                        cfq_clear_cfqq_idle_window(cfqq);
1794        }
1795}
1796
1797/*
1798 * Check if new_cfqq should preempt the currently active queue. Return 0 for
1799 * no or if we aren't sure, a 1 will cause a preempt.
1800 */
1801static int
1802cfq_should_preempt(struct cfq_data *cfqd, struct cfq_queue *new_cfqq,
1803                   struct request *rq)
1804{
1805        struct cfq_queue *cfqq;
1806
1807        cfqq = cfqd->active_queue;
1808        if (!cfqq)
1809                return 0;
1810
1811        if (cfq_slice_used(cfqq))
1812                return 1;
1813
1814        if (cfq_class_idle(new_cfqq))
1815                return 0;
1816
1817        if (cfq_class_idle(cfqq))
1818                return 1;
1819
1820        /*
1821         * if the new request is sync, but the currently running queue is
1822         * not, let the sync request have priority.
1823         */
1824        if (rq_is_sync(rq) && !cfq_cfqq_sync(cfqq))
1825                return 1;
1826
1827        /*
1828         * So both queues are sync. Let the new request get disk time if
1829         * it's a metadata request and the current queue is doing regular IO.
1830         */
1831        if (rq_is_meta(rq) && !cfqq->meta_pending)
1832                return 1;
1833
1834        /*
1835         * Allow an RT request to pre-empt an ongoing non-RT cfqq timeslice.
1836         */
1837        if (cfq_class_rt(new_cfqq) && !cfq_class_rt(cfqq))
1838                return 1;
1839
1840        if (!cfqd->active_cic || !cfq_cfqq_wait_request(cfqq))
1841                return 0;
1842
1843        /*
1844         * if this request is as-good as one we would expect from the
1845         * current cfqq, let it preempt
1846         */
1847        if (cfq_rq_close(cfqd, rq))
1848                return 1;
1849
1850        return 0;
1851}
1852
1853/*
1854 * cfqq preempts the active queue. if we allowed preempt with no slice left,
1855 * let it have half of its nominal slice.
1856 */
1857static void cfq_preempt_queue(struct cfq_data *cfqd, struct cfq_queue *cfqq)
1858{
1859        cfq_log_cfqq(cfqd, cfqq, "preempt");
1860        cfq_slice_expired(cfqd, 1);
1861
1862        /*
1863         * Put the new queue at the front of the of the current list,
1864         * so we know that it will be selected next.
1865         */
1866        BUG_ON(!cfq_cfqq_on_rr(cfqq));
1867
1868        cfq_service_tree_add(cfqd, cfqq, 1);
1869
1870        cfqq->slice_end = 0;
1871        cfq_mark_cfqq_slice_new(cfqq);
1872}
1873
1874/*
1875 * Called when a new fs request (rq) is added (to cfqq). Check if there's
1876 * something we should do about it
1877 */
1878static void
1879cfq_rq_enqueued(struct cfq_data *cfqd, struct cfq_queue *cfqq,
1880                struct request *rq)
1881{
1882        struct cfq_io_context *cic = RQ_CIC(rq);
1883
1884        cfqd->rq_queued++;
1885        if (rq_is_meta(rq))
1886                cfqq->meta_pending++;
1887
1888        cfq_update_io_thinktime(cfqd, cic);
1889        cfq_update_io_seektime(cfqd, cic, rq);
1890        cfq_update_idle_window(cfqd, cfqq, cic);
1891
1892        cic->last_request_pos = rq->sector + rq->nr_sectors;
1893
1894        if (cfqq == cfqd->active_queue) {
1895                /*
1896                 * if we are waiting for a request for this queue, let it rip
1897                 * immediately and flag that we must not expire this queue
1898                 * just now
1899                 */
1900                if (cfq_cfqq_wait_request(cfqq)) {
1901                        cfq_mark_cfqq_must_dispatch(cfqq);
1902                        del_timer(&cfqd->idle_slice_timer);
1903                        blk_start_queueing(cfqd->queue);
1904                }
1905        } else if (cfq_should_preempt(cfqd, cfqq, rq)) {
1906                /*
1907                 * not the active queue - expire current slice if it is
1908                 * idle and has expired it's mean thinktime or this new queue
1909                 * has some old slice time left and is of higher priority or
1910                 * this new queue is RT and the current one is BE
1911                 */
1912                cfq_preempt_queue(cfqd, cfqq);
1913                cfq_mark_cfqq_must_dispatch(cfqq);
1914                blk_start_queueing(cfqd->queue);
1915        }
1916}
1917
1918static void cfq_insert_request(struct request_queue *q, struct request *rq)
1919{
1920        struct cfq_data *cfqd = q->elevator->elevator_data;
1921        struct cfq_queue *cfqq = RQ_CFQQ(rq);
1922
1923        cfq_log_cfqq(cfqd, cfqq, "insert_request");
1924        cfq_init_prio_data(cfqq, RQ_CIC(rq)->ioc);
1925
1926        cfq_add_rq_rb(rq);
1927
1928        list_add_tail(&rq->queuelist, &cfqq->fifo);
1929
1930        cfq_rq_enqueued(cfqd, cfqq, rq);
1931}
1932
1933/*
1934 * Update hw_tag based on peak queue depth over 50 samples under
1935 * sufficient load.
1936 */
1937static void cfq_update_hw_tag(struct cfq_data *cfqd)
1938{
1939        if (cfqd->rq_in_driver > cfqd->rq_in_driver_peak)
1940                cfqd->rq_in_driver_peak = cfqd->rq_in_driver;
1941
1942        if (cfqd->rq_queued <= CFQ_HW_QUEUE_MIN &&
1943            cfqd->rq_in_driver <= CFQ_HW_QUEUE_MIN)
1944                return;
1945
1946        if (cfqd->hw_tag_samples++ < 50)
1947                return;
1948
1949        if (cfqd->rq_in_driver_peak >= CFQ_HW_QUEUE_MIN)
1950                cfqd->hw_tag = 1;
1951        else
1952                cfqd->hw_tag = 0;
1953
1954        cfqd->hw_tag_samples = 0;
1955        cfqd->rq_in_driver_peak = 0;
1956}
1957
1958static void cfq_completed_request(struct request_queue *q, struct request *rq)
1959{
1960        struct cfq_queue *cfqq = RQ_CFQQ(rq);
1961        struct cfq_data *cfqd = cfqq->cfqd;
1962        const int sync = rq_is_sync(rq);
1963        unsigned long now;
1964
1965        now = jiffies;
1966        cfq_log_cfqq(cfqd, cfqq, "complete");
1967
1968        cfq_update_hw_tag(cfqd);
1969
1970        WARN_ON(!cfqd->rq_in_driver);
1971        WARN_ON(!cfqq->dispatched);
1972        cfqd->rq_in_driver--;
1973        cfqq->dispatched--;
1974
1975        if (cfq_cfqq_sync(cfqq))
1976                cfqd->sync_flight--;
1977
1978        if (!cfq_class_idle(cfqq))
1979                cfqd->last_end_request = now;
1980
1981        if (sync)
1982                RQ_CIC(rq)->last_end_request = now;
1983
1984        /*
1985         * If this is the active queue, check if it needs to be expired,
1986         * or if we want to idle in case it has no pending requests.
1987         */
1988        if (cfqd->active_queue == cfqq) {
1989                if (cfq_cfqq_slice_new(cfqq)) {
1990                        cfq_set_prio_slice(cfqd, cfqq);
1991                        cfq_clear_cfqq_slice_new(cfqq);
1992                }
1993                if (cfq_slice_used(cfqq) || cfq_class_idle(cfqq))
1994                        cfq_slice_expired(cfqd, 1);
1995                else if (sync && RB_EMPTY_ROOT(&cfqq->sort_list))
1996                        cfq_arm_slice_timer(cfqd);
1997        }
1998
1999        if (!cfqd->rq_in_driver)
2000                cfq_schedule_dispatch(cfqd);
2001}
2002
2003/*
2004 * we temporarily boost lower priority queues if they are holding fs exclusive
2005 * resources. they are boosted to normal prio (CLASS_BE/4)
2006 */
2007static void cfq_prio_boost(struct cfq_queue *cfqq)
2008{
2009        if (has_fs_excl()) {
2010                /*
2011                 * boost idle prio on transactions that would lock out other
2012                 * users of the filesystem
2013                 */
2014                if (cfq_class_idle(cfqq))
2015                        cfqq->ioprio_class = IOPRIO_CLASS_BE;
2016                if (cfqq->ioprio > IOPRIO_NORM)
2017                        cfqq->ioprio = IOPRIO_NORM;
2018        } else {
2019                /*
2020                 * check if we need to unboost the queue
2021                 */
2022                if (cfqq->ioprio_class != cfqq->org_ioprio_class)
2023                        cfqq->ioprio_class = cfqq->org_ioprio_class;
2024                if (cfqq->ioprio != cfqq->org_ioprio)
2025                        cfqq->ioprio = cfqq->org_ioprio;
2026        }
2027}
2028
2029static inline int __cfq_may_queue(struct cfq_queue *cfqq)
2030{
2031        if ((cfq_cfqq_wait_request(cfqq) || cfq_cfqq_must_alloc(cfqq)) &&
2032            !cfq_cfqq_must_alloc_slice(cfqq)) {
2033                cfq_mark_cfqq_must_alloc_slice(cfqq);
2034                return ELV_MQUEUE_MUST;
2035        }
2036
2037        return ELV_MQUEUE_MAY;
2038}
2039
2040static int cfq_may_queue(struct request_queue *q, int rw)
2041{
2042        struct cfq_data *cfqd = q->elevator->elevator_data;
2043        struct task_struct *tsk = current;
2044        struct cfq_io_context *cic;
2045        struct cfq_queue *cfqq;
2046
2047        /*
2048         * don't force setup of a queue from here, as a call to may_queue
2049         * does not necessarily imply that a request actually will be queued.
2050         * so just lookup a possibly existing queue, or return 'may queue'
2051         * if that fails
2052         */
2053        cic = cfq_cic_lookup(cfqd, tsk->io_context);
2054        if (!cic)
2055                return ELV_MQUEUE_MAY;
2056
2057        cfqq = cic_to_cfqq(cic, rw & REQ_RW_SYNC);
2058        if (cfqq) {
2059                cfq_init_prio_data(cfqq, cic->ioc);
2060                cfq_prio_boost(cfqq);
2061
2062                return __cfq_may_queue(cfqq);
2063        }
2064
2065        return ELV_MQUEUE_MAY;
2066}
2067
2068/*
2069 * queue lock held here
2070 */
2071static void cfq_put_request(struct request *rq)
2072{
2073        struct cfq_queue *cfqq = RQ_CFQQ(rq);
2074
2075        if (cfqq) {
2076                const int rw = rq_data_dir(rq);
2077
2078                BUG_ON(!cfqq->allocated[rw]);
2079                cfqq->allocated[rw]--;
2080
2081                put_io_context(RQ_CIC(rq)->ioc);
2082
2083                rq->elevator_private = NULL;
2084                rq->elevator_private2 = NULL;
2085
2086                cfq_put_queue(cfqq);
2087        }
2088}
2089
2090/*
2091 * Allocate cfq data structures associated with this request.
2092 */
2093static int
2094cfq_set_request(struct request_queue *q, struct request *rq, gfp_t gfp_mask)
2095{
2096        struct cfq_data *cfqd = q->elevator->elevator_data;
2097        struct cfq_io_context *cic;
2098        const int rw = rq_data_dir(rq);
2099        const int is_sync = rq_is_sync(rq);
2100        struct cfq_queue *cfqq;
2101        unsigned long flags;
2102
2103        might_sleep_if(gfp_mask & __GFP_WAIT);
2104
2105        cic = cfq_get_io_context(cfqd, gfp_mask);
2106
2107        spin_lock_irqsave(q->queue_lock, flags);
2108
2109        if (!cic)
2110                goto queue_fail;
2111
2112        cfqq = cic_to_cfqq(cic, is_sync);
2113        if (!cfqq) {
2114                cfqq = cfq_get_queue(cfqd, is_sync, cic->ioc, gfp_mask);
2115
2116                if (!cfqq)
2117                        goto queue_fail;
2118
2119                cic_set_cfqq(cic, cfqq, is_sync);
2120        }
2121
2122        cfqq->allocated[rw]++;
2123        cfq_clear_cfqq_must_alloc(cfqq);
2124        atomic_inc(&cfqq->ref);
2125
2126        spin_unlock_irqrestore(q->queue_lock, flags);
2127
2128        rq->elevator_private = cic;
2129        rq->elevator_private2 = cfqq;
2130        return 0;
2131
2132queue_fail:
2133        if (cic)
2134                put_io_context(cic->ioc);
2135
2136        cfq_schedule_dispatch(cfqd);
2137        spin_unlock_irqrestore(q->queue_lock, flags);
2138        cfq_log(cfqd, "set_request fail");
2139        return 1;
2140}
2141
2142static void cfq_kick_queue(struct work_struct *work)
2143{
2144        struct cfq_data *cfqd =
2145                container_of(work, struct cfq_data, unplug_work);
2146        struct request_queue *q = cfqd->queue;
2147        unsigned long flags;
2148
2149        spin_lock_irqsave(q->queue_lock, flags);
2150        blk_start_queueing(q);
2151        spin_unlock_irqrestore(q->queue_lock, flags);
2152}
2153
2154/*
2155 * Timer running if the active_queue is currently idling inside its time slice
2156 */
2157static void cfq_idle_slice_timer(unsigned long data)
2158{
2159        struct cfq_data *cfqd = (struct cfq_data *) data;
2160        struct cfq_queue *cfqq;
2161        unsigned long flags;
2162        int timed_out = 1;
2163
2164        cfq_log(cfqd, "idle timer fired");
2165
2166        spin_lock_irqsave(cfqd->queue->queue_lock, flags);
2167
2168        cfqq = cfqd->active_queue;
2169        if (cfqq) {
2170                timed_out = 0;
2171
2172                /*
2173                 * expired
2174                 */
2175                if (cfq_slice_used(cfqq))
2176                        goto expire;
2177
2178                /*
2179                 * only expire and reinvoke request handler, if there are
2180                 * other queues with pending requests
2181                 */
2182                if (!cfqd->busy_queues)
2183                        goto out_cont;
2184
2185                /*
2186                 * not expired and it has a request pending, let it dispatch
2187                 */
2188                if (!RB_EMPTY_ROOT(&cfqq->sort_list)) {
2189                        cfq_mark_cfqq_must_dispatch(cfqq);
2190                        goto out_kick;
2191                }
2192        }
2193expire:
2194        cfq_slice_expired(cfqd, timed_out);
2195out_kick:
2196        cfq_schedule_dispatch(cfqd);
2197out_cont:
2198        spin_unlock_irqrestore(cfqd->queue->queue_lock, flags);
2199}
2200
2201static void cfq_shutdown_timer_wq(struct cfq_data *cfqd)
2202{
2203        del_timer_sync(&cfqd->idle_slice_timer);
2204        cancel_work_sync(&cfqd->unplug_work);
2205}
2206
2207static void cfq_put_async_queues(struct cfq_data *cfqd)
2208{
2209        int i;
2210
2211        for (i = 0; i < IOPRIO_BE_NR; i++) {
2212                if (cfqd->async_cfqq[0][i])
2213                        cfq_put_queue(cfqd->async_cfqq[0][i]);
2214                if (cfqd->async_cfqq[1][i])
2215                        cfq_put_queue(cfqd->async_cfqq[1][i]);
2216        }
2217
2218        if (cfqd->async_idle_cfqq)
2219                cfq_put_queue(cfqd->async_idle_cfqq);
2220}
2221
2222static void cfq_exit_queue(struct elevator_queue *e)
2223{
2224        struct cfq_data *cfqd = e->elevator_data;
2225        struct request_queue *q = cfqd->queue;
2226
2227        cfq_shutdown_timer_wq(cfqd);
2228
2229        spin_lock_irq(q->queue_lock);
2230
2231        if (cfqd->active_queue)
2232                __cfq_slice_expired(cfqd, cfqd->active_queue, 0);
2233
2234        while (!list_empty(&cfqd->cic_list)) {
2235                struct cfq_io_context *cic = list_entry(cfqd->cic_list.next,
2236                                                        struct cfq_io_context,
2237                                                        queue_list);
2238
2239                __cfq_exit_single_io_context(cfqd, cic);
2240        }
2241
2242        cfq_put_async_queues(cfqd);
2243
2244        spin_unlock_irq(q->queue_lock);
2245
2246        cfq_shutdown_timer_wq(cfqd);
2247
2248        kfree(cfqd);
2249}
2250
2251static void *cfq_init_queue(struct request_queue *q)
2252{
2253        struct cfq_data *cfqd;
2254
2255        cfqd = kmalloc_node(sizeof(*cfqd), GFP_KERNEL | __GFP_ZERO, q->node);
2256        if (!cfqd)
2257                return NULL;
2258
2259        cfqd->service_tree = CFQ_RB_ROOT;
2260        INIT_LIST_HEAD(&cfqd->cic_list);
2261
2262        cfqd->queue = q;
2263
2264        init_timer(&cfqd->idle_slice_timer);
2265        cfqd->idle_slice_timer.function = cfq_idle_slice_timer;
2266        cfqd->idle_slice_timer.data = (unsigned long) cfqd;
2267
2268        INIT_WORK(&cfqd->unplug_work, cfq_kick_queue);
2269
2270        cfqd->last_end_request = jiffies;
2271        cfqd->cfq_quantum = cfq_quantum;
2272        cfqd->cfq_fifo_expire[0] = cfq_fifo_expire[0];
2273        cfqd->cfq_fifo_expire[1] = cfq_fifo_expire[1];
2274        cfqd->cfq_back_max = cfq_back_max;
2275        cfqd->cfq_back_penalty = cfq_back_penalty;
2276        cfqd->cfq_slice[0] = cfq_slice_async;
2277        cfqd->cfq_slice[1] = cfq_slice_sync;
2278        cfqd->cfq_slice_async_rq = cfq_slice_async_rq;
2279        cfqd->cfq_slice_idle = cfq_slice_idle;
2280        cfqd->hw_tag = 1;
2281
2282        return cfqd;
2283}
2284
2285static void cfq_slab_kill(void)
2286{
2287        /*
2288         * Caller already ensured that pending RCU callbacks are completed,
2289         * so we should have no busy allocations at this point.
2290         */
2291        if (cfq_pool)
2292                kmem_cache_destroy(cfq_pool);
2293        if (cfq_ioc_pool)
2294                kmem_cache_destroy(cfq_ioc_pool);
2295}
2296
2297static int __init cfq_slab_setup(void)
2298{
2299        cfq_pool = KMEM_CACHE(cfq_queue, 0);
2300        if (!cfq_pool)
2301                goto fail;
2302
2303        cfq_ioc_pool = KMEM_CACHE(cfq_io_context, 0);
2304        if (!cfq_ioc_pool)
2305                goto fail;
2306
2307        return 0;
2308fail:
2309        cfq_slab_kill();
2310        return -ENOMEM;
2311}
2312
2313/*
2314 * sysfs parts below -->
2315 */
2316static ssize_t
2317cfq_var_show(unsigned int var, char *page)
2318{
2319        return sprintf(page, "%d\n", var);
2320}
2321
2322static ssize_t
2323cfq_var_store(unsigned int *var, const char *page, size_t count)
2324{
2325        char *p = (char *) page;
2326
2327        *var = simple_strtoul(p, &p, 10);
2328        return count;
2329}
2330
2331#define SHOW_FUNCTION(__FUNC, __VAR, __CONV)                            \
2332static ssize_t __FUNC(struct elevator_queue *e, char *page)             \
2333{                                                                       \
2334        struct cfq_data *cfqd = e->elevator_data;                       \
2335        unsigned int __data = __VAR;                                    \
2336        if (__CONV)                                                     \
2337                __data = jiffies_to_msecs(__data);                      \
2338        return cfq_var_show(__data, (page));                            \
2339}
2340SHOW_FUNCTION(cfq_quantum_show, cfqd->cfq_quantum, 0);
2341SHOW_FUNCTION(cfq_fifo_expire_sync_show, cfqd->cfq_fifo_expire[1], 1);
2342SHOW_FUNCTION(cfq_fifo_expire_async_show, cfqd->cfq_fifo_expire[0], 1);
2343SHOW_FUNCTION(cfq_back_seek_max_show, cfqd->cfq_back_max, 0);
2344SHOW_FUNCTION(cfq_back_seek_penalty_show, cfqd->cfq_back_penalty, 0);
2345SHOW_FUNCTION(cfq_slice_idle_show, cfqd->cfq_slice_idle, 1);
2346SHOW_FUNCTION(cfq_slice_sync_show, cfqd->cfq_slice[1], 1);
2347SHOW_FUNCTION(cfq_slice_async_show, cfqd->cfq_slice[0], 1);
2348SHOW_FUNCTION(cfq_slice_async_rq_show, cfqd->cfq_slice_async_rq, 0);
2349#undef SHOW_FUNCTION
2350
2351#define STORE_FUNCTION(__FUNC, __PTR, MIN, MAX, __CONV)                 \
2352static ssize_t __FUNC(struct elevator_queue *e, const char *page, size_t count) \
2353{                                                                       \
2354        struct cfq_data *cfqd = e->elevator_data;                       \
2355        unsigned int __data;                                            \
2356        int ret = cfq_var_store(&__data, (page), count);                \
2357        if (__data < (MIN))                                             \
2358                __data = (MIN);                                         \
2359        else if (__data > (MAX))                                        \
2360                __data = (MAX);                                         \
2361        if (__CONV)                                                     \
2362                *(__PTR) = msecs_to_jiffies(__data);                    \
2363        else                                                            \
2364                *(__PTR) = __data;                                      \
2365        return ret;                                                     \
2366}
2367STORE_FUNCTION(cfq_quantum_store, &cfqd->cfq_quantum, 1, UINT_MAX, 0);
2368STORE_FUNCTION(cfq_fifo_expire_sync_store, &cfqd->cfq_fifo_expire[1], 1,
2369                UINT_MAX, 1);
2370STORE_FUNCTION(cfq_fifo_expire_async_store, &cfqd->cfq_fifo_expire[0], 1,
2371                UINT_MAX, 1);
2372STORE_FUNCTION(cfq_back_seek_max_store, &cfqd->cfq_back_max, 0, UINT_MAX, 0);
2373STORE_FUNCTION(cfq_back_seek_penalty_store, &cfqd->cfq_back_penalty, 1,
2374                UINT_MAX, 0);
2375STORE_FUNCTION(cfq_slice_idle_store, &cfqd->cfq_slice_idle, 0, UINT_MAX, 1);
2376STORE_FUNCTION(cfq_slice_sync_store, &cfqd->cfq_slice[1], 1, UINT_MAX, 1);
2377STORE_FUNCTION(cfq_slice_async_store, &cfqd->cfq_slice[0], 1, UINT_MAX, 1);
2378STORE_FUNCTION(cfq_slice_async_rq_store, &cfqd->cfq_slice_async_rq, 1,
2379                UINT_MAX, 0);
2380#undef STORE_FUNCTION
2381
2382#define CFQ_ATTR(name) \
2383        __ATTR(name, S_IRUGO|S_IWUSR, cfq_##name##_show, cfq_##name##_store)
2384
2385static struct elv_fs_entry cfq_attrs[] = {
2386        CFQ_ATTR(quantum),
2387        CFQ_ATTR(fifo_expire_sync),
2388        CFQ_ATTR(fifo_expire_async),
2389        CFQ_ATTR(back_seek_max),
2390        CFQ_ATTR(back_seek_penalty),
2391        CFQ_ATTR(slice_sync),
2392        CFQ_ATTR(slice_async),
2393        CFQ_ATTR(slice_async_rq),
2394        CFQ_ATTR(slice_idle),
2395        __ATTR_NULL
2396};
2397
2398static struct elevator_type iosched_cfq = {
2399        .ops = {
2400                .elevator_merge_fn =            cfq_merge,
2401                .elevator_merged_fn =           cfq_merged_request,
2402                .elevator_merge_req_fn =        cfq_merged_requests,
2403                .elevator_allow_merge_fn =      cfq_allow_merge,
2404                .elevator_dispatch_fn =         cfq_dispatch_requests,
2405                .elevator_add_req_fn =          cfq_insert_request,
2406                .elevator_activate_req_fn =     cfq_activate_request,
2407                .elevator_deactivate_req_fn =   cfq_deactivate_request,
2408                .elevator_queue_empty_fn =      cfq_queue_empty,
2409                .elevator_completed_req_fn =    cfq_completed_request,
2410                .elevator_former_req_fn =       elv_rb_former_request,
2411                .elevator_latter_req_fn =       elv_rb_latter_request,
2412                .elevator_set_req_fn =          cfq_set_request,
2413                .elevator_put_req_fn =          cfq_put_request,
2414                .elevator_may_queue_fn =        cfq_may_queue,
2415                .elevator_init_fn =             cfq_init_queue,
2416                .elevator_exit_fn =             cfq_exit_queue,
2417                .trim =                         cfq_free_io_context,
2418        },
2419        .elevator_attrs =       cfq_attrs,
2420        .elevator_name =        "cfq",
2421        .elevator_owner =       THIS_MODULE,
2422};
2423
2424static int __init cfq_init(void)
2425{
2426        /*
2427         * could be 0 on HZ < 1000 setups
2428         */
2429        if (!cfq_slice_async)
2430                cfq_slice_async = 1;
2431        if (!cfq_slice_idle)
2432                cfq_slice_idle = 1;
2433
2434        if (cfq_slab_setup())
2435                return -ENOMEM;
2436
2437        elv_register(&iosched_cfq);
2438
2439        return 0;
2440}
2441
2442static void __exit cfq_exit(void)
2443{
2444        DECLARE_COMPLETION_ONSTACK(all_gone);
2445        elv_unregister(&iosched_cfq);
2446        ioc_gone = &all_gone;
2447        /* ioc_gone's update must be visible before reading ioc_count */
2448        smp_wmb();
2449
2450        /*
2451         * this also protects us from entering cfq_slab_kill() with
2452         * pending RCU callbacks
2453         */
2454        if (elv_ioc_count_read(ioc_count))
2455                wait_for_completion(&all_gone);
2456        cfq_slab_kill();
2457}
2458
2459module_init(cfq_init);
2460module_exit(cfq_exit);
2461
2462MODULE_AUTHOR("Jens Axboe");
2463MODULE_LICENSE("GPL");
2464MODULE_DESCRIPTION("Completely Fair Queueing IO scheduler");
2465