linux/block/blk-cgroup.c
<<
>>
Prefs
   1/*
   2 * Common Block IO controller cgroup interface
   3 *
   4 * Based on ideas and code from CFQ, CFS and BFQ:
   5 * Copyright (C) 2003 Jens Axboe <axboe@kernel.dk>
   6 *
   7 * Copyright (C) 2008 Fabio Checconi <fabio@gandalf.sssup.it>
   8 *                    Paolo Valente <paolo.valente@unimore.it>
   9 *
  10 * Copyright (C) 2009 Vivek Goyal <vgoyal@redhat.com>
  11 *                    Nauman Rafique <nauman@google.com>
  12 */
  13#include <linux/ioprio.h>
  14#include <linux/kdev_t.h>
  15#include <linux/module.h>
  16#include <linux/err.h>
  17#include <linux/blkdev.h>
  18#include <linux/slab.h>
  19#include <linux/genhd.h>
  20#include <linux/delay.h>
  21#include <linux/atomic.h>
  22#include "blk-cgroup.h"
  23#include "blk.h"
  24
  25#define MAX_KEY_LEN 100
  26
  27static DEFINE_MUTEX(blkcg_pol_mutex);
  28
  29struct blkcg blkcg_root = { .cfq_weight = 2 * CFQ_WEIGHT_DEFAULT,
  30                            .cfq_leaf_weight = 2 * CFQ_WEIGHT_DEFAULT, };
  31EXPORT_SYMBOL_GPL(blkcg_root);
  32
  33static struct blkcg_policy *blkcg_policy[BLKCG_MAX_POLS];
  34
  35static bool blkcg_policy_enabled(struct request_queue *q,
  36                                 const struct blkcg_policy *pol)
  37{
  38        return pol && test_bit(pol->plid, q->blkcg_pols);
  39}
  40
  41/**
  42 * blkg_free - free a blkg
  43 * @blkg: blkg to free
  44 *
  45 * Free @blkg which may be partially allocated.
  46 */
  47static void blkg_free(struct blkcg_gq *blkg)
  48{
  49        int i;
  50
  51        if (!blkg)
  52                return;
  53
  54        for (i = 0; i < BLKCG_MAX_POLS; i++)
  55                kfree(blkg->pd[i]);
  56
  57        blk_exit_rl(&blkg->rl);
  58        kfree(blkg);
  59}
  60
  61/**
  62 * blkg_alloc - allocate a blkg
  63 * @blkcg: block cgroup the new blkg is associated with
  64 * @q: request_queue the new blkg is associated with
  65 * @gfp_mask: allocation mask to use
  66 *
  67 * Allocate a new blkg assocating @blkcg and @q.
  68 */
  69static struct blkcg_gq *blkg_alloc(struct blkcg *blkcg, struct request_queue *q,
  70                                   gfp_t gfp_mask)
  71{
  72        struct blkcg_gq *blkg;
  73        int i;
  74
  75        /* alloc and init base part */
  76        blkg = kzalloc_node(sizeof(*blkg), gfp_mask, q->node);
  77        if (!blkg)
  78                return NULL;
  79
  80        blkg->q = q;
  81        INIT_LIST_HEAD(&blkg->q_node);
  82        blkg->blkcg = blkcg;
  83        blkg->refcnt = 1;
  84
  85        /* root blkg uses @q->root_rl, init rl only for !root blkgs */
  86        if (blkcg != &blkcg_root) {
  87                if (blk_init_rl(&blkg->rl, q, gfp_mask))
  88                        goto err_free;
  89                blkg->rl.blkg = blkg;
  90        }
  91
  92        for (i = 0; i < BLKCG_MAX_POLS; i++) {
  93                struct blkcg_policy *pol = blkcg_policy[i];
  94                struct blkg_policy_data *pd;
  95
  96                if (!blkcg_policy_enabled(q, pol))
  97                        continue;
  98
  99                /* alloc per-policy data and attach it to blkg */
 100                pd = kzalloc_node(pol->pd_size, gfp_mask, q->node);
 101                if (!pd)
 102                        goto err_free;
 103
 104                blkg->pd[i] = pd;
 105                pd->blkg = blkg;
 106                pd->plid = i;
 107        }
 108
 109        return blkg;
 110
 111err_free:
 112        blkg_free(blkg);
 113        return NULL;
 114}
 115
 116/**
 117 * __blkg_lookup - internal version of blkg_lookup()
 118 * @blkcg: blkcg of interest
 119 * @q: request_queue of interest
 120 * @update_hint: whether to update lookup hint with the result or not
 121 *
 122 * This is internal version and shouldn't be used by policy
 123 * implementations.  Looks up blkgs for the @blkcg - @q pair regardless of
 124 * @q's bypass state.  If @update_hint is %true, the caller should be
 125 * holding @q->queue_lock and lookup hint is updated on success.
 126 */
 127struct blkcg_gq *__blkg_lookup(struct blkcg *blkcg, struct request_queue *q,
 128                               bool update_hint)
 129{
 130        struct blkcg_gq *blkg;
 131
 132        blkg = rcu_dereference(blkcg->blkg_hint);
 133        if (blkg && blkg->q == q)
 134                return blkg;
 135
 136        /*
 137         * Hint didn't match.  Look up from the radix tree.  Note that the
 138         * hint can only be updated under queue_lock as otherwise @blkg
 139         * could have already been removed from blkg_tree.  The caller is
 140         * responsible for grabbing queue_lock if @update_hint.
 141         */
 142        blkg = radix_tree_lookup(&blkcg->blkg_tree, q->id);
 143        if (blkg && blkg->q == q) {
 144                if (update_hint) {
 145                        lockdep_assert_held(q->queue_lock);
 146                        rcu_assign_pointer(blkcg->blkg_hint, blkg);
 147                }
 148                return blkg;
 149        }
 150
 151        return NULL;
 152}
 153
 154/**
 155 * blkg_lookup - lookup blkg for the specified blkcg - q pair
 156 * @blkcg: blkcg of interest
 157 * @q: request_queue of interest
 158 *
 159 * Lookup blkg for the @blkcg - @q pair.  This function should be called
 160 * under RCU read lock and is guaranteed to return %NULL if @q is bypassing
 161 * - see blk_queue_bypass_start() for details.
 162 */
 163struct blkcg_gq *blkg_lookup(struct blkcg *blkcg, struct request_queue *q)
 164{
 165        WARN_ON_ONCE(!rcu_read_lock_held());
 166
 167        if (unlikely(blk_queue_bypass(q)))
 168                return NULL;
 169        return __blkg_lookup(blkcg, q, false);
 170}
 171EXPORT_SYMBOL_GPL(blkg_lookup);
 172
 173/*
 174 * If @new_blkg is %NULL, this function tries to allocate a new one as
 175 * necessary using %GFP_ATOMIC.  @new_blkg is always consumed on return.
 176 */
 177static struct blkcg_gq *blkg_create(struct blkcg *blkcg,
 178                                    struct request_queue *q,
 179                                    struct blkcg_gq *new_blkg)
 180{
 181        struct blkcg_gq *blkg;
 182        int i, ret;
 183
 184        WARN_ON_ONCE(!rcu_read_lock_held());
 185        lockdep_assert_held(q->queue_lock);
 186
 187        /* blkg holds a reference to blkcg */
 188        if (!css_tryget(&blkcg->css)) {
 189                ret = -EINVAL;
 190                goto err_free_blkg;
 191        }
 192
 193        /* allocate */
 194        if (!new_blkg) {
 195                new_blkg = blkg_alloc(blkcg, q, GFP_ATOMIC);
 196                if (unlikely(!new_blkg)) {
 197                        ret = -ENOMEM;
 198                        goto err_put_css;
 199                }
 200        }
 201        blkg = new_blkg;
 202
 203        /* link parent */
 204        if (blkcg_parent(blkcg)) {
 205                blkg->parent = __blkg_lookup(blkcg_parent(blkcg), q, false);
 206                if (WARN_ON_ONCE(!blkg->parent)) {
 207                        ret = -EINVAL;
 208                        goto err_put_css;
 209                }
 210                blkg_get(blkg->parent);
 211        }
 212
 213        /* invoke per-policy init */
 214        for (i = 0; i < BLKCG_MAX_POLS; i++) {
 215                struct blkcg_policy *pol = blkcg_policy[i];
 216
 217                if (blkg->pd[i] && pol->pd_init_fn)
 218                        pol->pd_init_fn(blkg);
 219        }
 220
 221        /* insert */
 222        spin_lock(&blkcg->lock);
 223        ret = radix_tree_insert(&blkcg->blkg_tree, q->id, blkg);
 224        if (likely(!ret)) {
 225                hlist_add_head_rcu(&blkg->blkcg_node, &blkcg->blkg_list);
 226                list_add(&blkg->q_node, &q->blkg_list);
 227
 228                for (i = 0; i < BLKCG_MAX_POLS; i++) {
 229                        struct blkcg_policy *pol = blkcg_policy[i];
 230
 231                        if (blkg->pd[i] && pol->pd_online_fn)
 232                                pol->pd_online_fn(blkg);
 233                }
 234        }
 235        blkg->online = true;
 236        spin_unlock(&blkcg->lock);
 237
 238        if (!ret)
 239                return blkg;
 240
 241        /* @blkg failed fully initialized, use the usual release path */
 242        blkg_put(blkg);
 243        return ERR_PTR(ret);
 244
 245err_put_css:
 246        css_put(&blkcg->css);
 247err_free_blkg:
 248        blkg_free(new_blkg);
 249        return ERR_PTR(ret);
 250}
 251
 252/**
 253 * blkg_lookup_create - lookup blkg, try to create one if not there
 254 * @blkcg: blkcg of interest
 255 * @q: request_queue of interest
 256 *
 257 * Lookup blkg for the @blkcg - @q pair.  If it doesn't exist, try to
 258 * create one.  blkg creation is performed recursively from blkcg_root such
 259 * that all non-root blkg's have access to the parent blkg.  This function
 260 * should be called under RCU read lock and @q->queue_lock.
 261 *
 262 * Returns pointer to the looked up or created blkg on success, ERR_PTR()
 263 * value on error.  If @q is dead, returns ERR_PTR(-EINVAL).  If @q is not
 264 * dead and bypassing, returns ERR_PTR(-EBUSY).
 265 */
 266struct blkcg_gq *blkg_lookup_create(struct blkcg *blkcg,
 267                                    struct request_queue *q)
 268{
 269        struct blkcg_gq *blkg;
 270
 271        WARN_ON_ONCE(!rcu_read_lock_held());
 272        lockdep_assert_held(q->queue_lock);
 273
 274        /*
 275         * This could be the first entry point of blkcg implementation and
 276         * we shouldn't allow anything to go through for a bypassing queue.
 277         */
 278        if (unlikely(blk_queue_bypass(q)))
 279                return ERR_PTR(blk_queue_dying(q) ? -EINVAL : -EBUSY);
 280
 281        blkg = __blkg_lookup(blkcg, q, true);
 282        if (blkg)
 283                return blkg;
 284
 285        /*
 286         * Create blkgs walking down from blkcg_root to @blkcg, so that all
 287         * non-root blkgs have access to their parents.
 288         */
 289        while (true) {
 290                struct blkcg *pos = blkcg;
 291                struct blkcg *parent = blkcg_parent(blkcg);
 292
 293                while (parent && !__blkg_lookup(parent, q, false)) {
 294                        pos = parent;
 295                        parent = blkcg_parent(parent);
 296                }
 297
 298                blkg = blkg_create(pos, q, NULL);
 299                if (pos == blkcg || IS_ERR(blkg))
 300                        return blkg;
 301        }
 302}
 303EXPORT_SYMBOL_GPL(blkg_lookup_create);
 304
 305static void blkg_destroy(struct blkcg_gq *blkg)
 306{
 307        struct blkcg *blkcg = blkg->blkcg;
 308        int i;
 309
 310        lockdep_assert_held(blkg->q->queue_lock);
 311        lockdep_assert_held(&blkcg->lock);
 312
 313        /* Something wrong if we are trying to remove same group twice */
 314        WARN_ON_ONCE(list_empty(&blkg->q_node));
 315        WARN_ON_ONCE(hlist_unhashed(&blkg->blkcg_node));
 316
 317        for (i = 0; i < BLKCG_MAX_POLS; i++) {
 318                struct blkcg_policy *pol = blkcg_policy[i];
 319
 320                if (blkg->pd[i] && pol->pd_offline_fn)
 321                        pol->pd_offline_fn(blkg);
 322        }
 323        blkg->online = false;
 324
 325        radix_tree_delete(&blkcg->blkg_tree, blkg->q->id);
 326        list_del_init(&blkg->q_node);
 327        hlist_del_init_rcu(&blkg->blkcg_node);
 328
 329        /*
 330         * Both setting lookup hint to and clearing it from @blkg are done
 331         * under queue_lock.  If it's not pointing to @blkg now, it never
 332         * will.  Hint assignment itself can race safely.
 333         */
 334        if (rcu_dereference_raw(blkcg->blkg_hint) == blkg)
 335                rcu_assign_pointer(blkcg->blkg_hint, NULL);
 336
 337        /*
 338         * Put the reference taken at the time of creation so that when all
 339         * queues are gone, group can be destroyed.
 340         */
 341        blkg_put(blkg);
 342}
 343
 344/**
 345 * blkg_destroy_all - destroy all blkgs associated with a request_queue
 346 * @q: request_queue of interest
 347 *
 348 * Destroy all blkgs associated with @q.
 349 */
 350static void blkg_destroy_all(struct request_queue *q)
 351{
 352        struct blkcg_gq *blkg, *n;
 353
 354        lockdep_assert_held(q->queue_lock);
 355
 356        list_for_each_entry_safe(blkg, n, &q->blkg_list, q_node) {
 357                struct blkcg *blkcg = blkg->blkcg;
 358
 359                spin_lock(&blkcg->lock);
 360                blkg_destroy(blkg);
 361                spin_unlock(&blkcg->lock);
 362        }
 363
 364        /*
 365         * root blkg is destroyed.  Just clear the pointer since
 366         * root_rl does not take reference on root blkg.
 367         */
 368        q->root_blkg = NULL;
 369        q->root_rl.blkg = NULL;
 370}
 371
 372/*
 373 * A group is RCU protected, but having an rcu lock does not mean that one
 374 * can access all the fields of blkg and assume these are valid.  For
 375 * example, don't try to follow throtl_data and request queue links.
 376 *
 377 * Having a reference to blkg under an rcu allows accesses to only values
 378 * local to groups like group stats and group rate limits.
 379 */
 380void __blkg_release_rcu(struct rcu_head *rcu_head)
 381{
 382        struct blkcg_gq *blkg = container_of(rcu_head, struct blkcg_gq, rcu_head);
 383        int i;
 384
 385        /* tell policies that this one is being freed */
 386        for (i = 0; i < BLKCG_MAX_POLS; i++) {
 387                struct blkcg_policy *pol = blkcg_policy[i];
 388
 389                if (blkg->pd[i] && pol->pd_exit_fn)
 390                        pol->pd_exit_fn(blkg);
 391        }
 392
 393        /* release the blkcg and parent blkg refs this blkg has been holding */
 394        css_put(&blkg->blkcg->css);
 395        if (blkg->parent) {
 396                spin_lock_irq(blkg->q->queue_lock);
 397                blkg_put(blkg->parent);
 398                spin_unlock_irq(blkg->q->queue_lock);
 399        }
 400
 401        blkg_free(blkg);
 402}
 403EXPORT_SYMBOL_GPL(__blkg_release_rcu);
 404
 405/*
 406 * The next function used by blk_queue_for_each_rl().  It's a bit tricky
 407 * because the root blkg uses @q->root_rl instead of its own rl.
 408 */
 409struct request_list *__blk_queue_next_rl(struct request_list *rl,
 410                                         struct request_queue *q)
 411{
 412        struct list_head *ent;
 413        struct blkcg_gq *blkg;
 414
 415        /*
 416         * Determine the current blkg list_head.  The first entry is
 417         * root_rl which is off @q->blkg_list and mapped to the head.
 418         */
 419        if (rl == &q->root_rl) {
 420                ent = &q->blkg_list;
 421                /* There are no more block groups, hence no request lists */
 422                if (list_empty(ent))
 423                        return NULL;
 424        } else {
 425                blkg = container_of(rl, struct blkcg_gq, rl);
 426                ent = &blkg->q_node;
 427        }
 428
 429        /* walk to the next list_head, skip root blkcg */
 430        ent = ent->next;
 431        if (ent == &q->root_blkg->q_node)
 432                ent = ent->next;
 433        if (ent == &q->blkg_list)
 434                return NULL;
 435
 436        blkg = container_of(ent, struct blkcg_gq, q_node);
 437        return &blkg->rl;
 438}
 439
 440static int blkcg_reset_stats(struct cgroup *cgroup, struct cftype *cftype,
 441                             u64 val)
 442{
 443        struct blkcg *blkcg = cgroup_to_blkcg(cgroup);
 444        struct blkcg_gq *blkg;
 445        int i;
 446
 447        mutex_lock(&blkcg_pol_mutex);
 448        spin_lock_irq(&blkcg->lock);
 449
 450        /*
 451         * Note that stat reset is racy - it doesn't synchronize against
 452         * stat updates.  This is a debug feature which shouldn't exist
 453         * anyway.  If you get hit by a race, retry.
 454         */
 455        hlist_for_each_entry(blkg, &blkcg->blkg_list, blkcg_node) {
 456                for (i = 0; i < BLKCG_MAX_POLS; i++) {
 457                        struct blkcg_policy *pol = blkcg_policy[i];
 458
 459                        if (blkcg_policy_enabled(blkg->q, pol) &&
 460                            pol->pd_reset_stats_fn)
 461                                pol->pd_reset_stats_fn(blkg);
 462                }
 463        }
 464
 465        spin_unlock_irq(&blkcg->lock);
 466        mutex_unlock(&blkcg_pol_mutex);
 467        return 0;
 468}
 469
 470static const char *blkg_dev_name(struct blkcg_gq *blkg)
 471{
 472        /* some drivers (floppy) instantiate a queue w/o disk registered */
 473        if (blkg->q->backing_dev_info.dev)
 474                return dev_name(blkg->q->backing_dev_info.dev);
 475        return NULL;
 476}
 477
 478/**
 479 * blkcg_print_blkgs - helper for printing per-blkg data
 480 * @sf: seq_file to print to
 481 * @blkcg: blkcg of interest
 482 * @prfill: fill function to print out a blkg
 483 * @pol: policy in question
 484 * @data: data to be passed to @prfill
 485 * @show_total: to print out sum of prfill return values or not
 486 *
 487 * This function invokes @prfill on each blkg of @blkcg if pd for the
 488 * policy specified by @pol exists.  @prfill is invoked with @sf, the
 489 * policy data and @data and the matching queue lock held.  If @show_total
 490 * is %true, the sum of the return values from @prfill is printed with
 491 * "Total" label at the end.
 492 *
 493 * This is to be used to construct print functions for
 494 * cftype->read_seq_string method.
 495 */
 496void blkcg_print_blkgs(struct seq_file *sf, struct blkcg *blkcg,
 497                       u64 (*prfill)(struct seq_file *,
 498                                     struct blkg_policy_data *, int),
 499                       const struct blkcg_policy *pol, int data,
 500                       bool show_total)
 501{
 502        struct blkcg_gq *blkg;
 503        u64 total = 0;
 504
 505        rcu_read_lock();
 506        hlist_for_each_entry_rcu(blkg, &blkcg->blkg_list, blkcg_node) {
 507                spin_lock_irq(blkg->q->queue_lock);
 508                if (blkcg_policy_enabled(blkg->q, pol))
 509                        total += prfill(sf, blkg->pd[pol->plid], data);
 510                spin_unlock_irq(blkg->q->queue_lock);
 511        }
 512        rcu_read_unlock();
 513
 514        if (show_total)
 515                seq_printf(sf, "Total %llu\n", (unsigned long long)total);
 516}
 517EXPORT_SYMBOL_GPL(blkcg_print_blkgs);
 518
 519/**
 520 * __blkg_prfill_u64 - prfill helper for a single u64 value
 521 * @sf: seq_file to print to
 522 * @pd: policy private data of interest
 523 * @v: value to print
 524 *
 525 * Print @v to @sf for the device assocaited with @pd.
 526 */
 527u64 __blkg_prfill_u64(struct seq_file *sf, struct blkg_policy_data *pd, u64 v)
 528{
 529        const char *dname = blkg_dev_name(pd->blkg);
 530
 531        if (!dname)
 532                return 0;
 533
 534        seq_printf(sf, "%s %llu\n", dname, (unsigned long long)v);
 535        return v;
 536}
 537EXPORT_SYMBOL_GPL(__blkg_prfill_u64);
 538
 539/**
 540 * __blkg_prfill_rwstat - prfill helper for a blkg_rwstat
 541 * @sf: seq_file to print to
 542 * @pd: policy private data of interest
 543 * @rwstat: rwstat to print
 544 *
 545 * Print @rwstat to @sf for the device assocaited with @pd.
 546 */
 547u64 __blkg_prfill_rwstat(struct seq_file *sf, struct blkg_policy_data *pd,
 548                         const struct blkg_rwstat *rwstat)
 549{
 550        static const char *rwstr[] = {
 551                [BLKG_RWSTAT_READ]      = "Read",
 552                [BLKG_RWSTAT_WRITE]     = "Write",
 553                [BLKG_RWSTAT_SYNC]      = "Sync",
 554                [BLKG_RWSTAT_ASYNC]     = "Async",
 555        };
 556        const char *dname = blkg_dev_name(pd->blkg);
 557        u64 v;
 558        int i;
 559
 560        if (!dname)
 561                return 0;
 562
 563        for (i = 0; i < BLKG_RWSTAT_NR; i++)
 564                seq_printf(sf, "%s %s %llu\n", dname, rwstr[i],
 565                           (unsigned long long)rwstat->cnt[i]);
 566
 567        v = rwstat->cnt[BLKG_RWSTAT_READ] + rwstat->cnt[BLKG_RWSTAT_WRITE];
 568        seq_printf(sf, "%s Total %llu\n", dname, (unsigned long long)v);
 569        return v;
 570}
 571EXPORT_SYMBOL_GPL(__blkg_prfill_rwstat);
 572
 573/**
 574 * blkg_prfill_stat - prfill callback for blkg_stat
 575 * @sf: seq_file to print to
 576 * @pd: policy private data of interest
 577 * @off: offset to the blkg_stat in @pd
 578 *
 579 * prfill callback for printing a blkg_stat.
 580 */
 581u64 blkg_prfill_stat(struct seq_file *sf, struct blkg_policy_data *pd, int off)
 582{
 583        return __blkg_prfill_u64(sf, pd, blkg_stat_read((void *)pd + off));
 584}
 585EXPORT_SYMBOL_GPL(blkg_prfill_stat);
 586
 587/**
 588 * blkg_prfill_rwstat - prfill callback for blkg_rwstat
 589 * @sf: seq_file to print to
 590 * @pd: policy private data of interest
 591 * @off: offset to the blkg_rwstat in @pd
 592 *
 593 * prfill callback for printing a blkg_rwstat.
 594 */
 595u64 blkg_prfill_rwstat(struct seq_file *sf, struct blkg_policy_data *pd,
 596                       int off)
 597{
 598        struct blkg_rwstat rwstat = blkg_rwstat_read((void *)pd + off);
 599
 600        return __blkg_prfill_rwstat(sf, pd, &rwstat);
 601}
 602EXPORT_SYMBOL_GPL(blkg_prfill_rwstat);
 603
 604/**
 605 * blkg_stat_recursive_sum - collect hierarchical blkg_stat
 606 * @pd: policy private data of interest
 607 * @off: offset to the blkg_stat in @pd
 608 *
 609 * Collect the blkg_stat specified by @off from @pd and all its online
 610 * descendants and return the sum.  The caller must be holding the queue
 611 * lock for online tests.
 612 */
 613u64 blkg_stat_recursive_sum(struct blkg_policy_data *pd, int off)
 614{
 615        struct blkcg_policy *pol = blkcg_policy[pd->plid];
 616        struct blkcg_gq *pos_blkg;
 617        struct cgroup *pos_cgrp;
 618        u64 sum;
 619
 620        lockdep_assert_held(pd->blkg->q->queue_lock);
 621
 622        sum = blkg_stat_read((void *)pd + off);
 623
 624        rcu_read_lock();
 625        blkg_for_each_descendant_pre(pos_blkg, pos_cgrp, pd_to_blkg(pd)) {
 626                struct blkg_policy_data *pos_pd = blkg_to_pd(pos_blkg, pol);
 627                struct blkg_stat *stat = (void *)pos_pd + off;
 628
 629                if (pos_blkg->online)
 630                        sum += blkg_stat_read(stat);
 631        }
 632        rcu_read_unlock();
 633
 634        return sum;
 635}
 636EXPORT_SYMBOL_GPL(blkg_stat_recursive_sum);
 637
 638/**
 639 * blkg_rwstat_recursive_sum - collect hierarchical blkg_rwstat
 640 * @pd: policy private data of interest
 641 * @off: offset to the blkg_stat in @pd
 642 *
 643 * Collect the blkg_rwstat specified by @off from @pd and all its online
 644 * descendants and return the sum.  The caller must be holding the queue
 645 * lock for online tests.
 646 */
 647struct blkg_rwstat blkg_rwstat_recursive_sum(struct blkg_policy_data *pd,
 648                                             int off)
 649{
 650        struct blkcg_policy *pol = blkcg_policy[pd->plid];
 651        struct blkcg_gq *pos_blkg;
 652        struct cgroup *pos_cgrp;
 653        struct blkg_rwstat sum;
 654        int i;
 655
 656        lockdep_assert_held(pd->blkg->q->queue_lock);
 657
 658        sum = blkg_rwstat_read((void *)pd + off);
 659
 660        rcu_read_lock();
 661        blkg_for_each_descendant_pre(pos_blkg, pos_cgrp, pd_to_blkg(pd)) {
 662                struct blkg_policy_data *pos_pd = blkg_to_pd(pos_blkg, pol);
 663                struct blkg_rwstat *rwstat = (void *)pos_pd + off;
 664                struct blkg_rwstat tmp;
 665
 666                if (!pos_blkg->online)
 667                        continue;
 668
 669                tmp = blkg_rwstat_read(rwstat);
 670
 671                for (i = 0; i < BLKG_RWSTAT_NR; i++)
 672                        sum.cnt[i] += tmp.cnt[i];
 673        }
 674        rcu_read_unlock();
 675
 676        return sum;
 677}
 678EXPORT_SYMBOL_GPL(blkg_rwstat_recursive_sum);
 679
 680/**
 681 * blkg_conf_prep - parse and prepare for per-blkg config update
 682 * @blkcg: target block cgroup
 683 * @pol: target policy
 684 * @input: input string
 685 * @ctx: blkg_conf_ctx to be filled
 686 *
 687 * Parse per-blkg config update from @input and initialize @ctx with the
 688 * result.  @ctx->blkg points to the blkg to be updated and @ctx->v the new
 689 * value.  This function returns with RCU read lock and queue lock held and
 690 * must be paired with blkg_conf_finish().
 691 */
 692int blkg_conf_prep(struct blkcg *blkcg, const struct blkcg_policy *pol,
 693                   const char *input, struct blkg_conf_ctx *ctx)
 694        __acquires(rcu) __acquires(disk->queue->queue_lock)
 695{
 696        struct gendisk *disk;
 697        struct blkcg_gq *blkg;
 698        unsigned int major, minor;
 699        unsigned long long v;
 700        int part, ret;
 701
 702        if (sscanf(input, "%u:%u %llu", &major, &minor, &v) != 3)
 703                return -EINVAL;
 704
 705        disk = get_gendisk(MKDEV(major, minor), &part);
 706        if (!disk || part)
 707                return -EINVAL;
 708
 709        rcu_read_lock();
 710        spin_lock_irq(disk->queue->queue_lock);
 711
 712        if (blkcg_policy_enabled(disk->queue, pol))
 713                blkg = blkg_lookup_create(blkcg, disk->queue);
 714        else
 715                blkg = ERR_PTR(-EINVAL);
 716
 717        if (IS_ERR(blkg)) {
 718                ret = PTR_ERR(blkg);
 719                rcu_read_unlock();
 720                spin_unlock_irq(disk->queue->queue_lock);
 721                put_disk(disk);
 722                /*
 723                 * If queue was bypassing, we should retry.  Do so after a
 724                 * short msleep().  It isn't strictly necessary but queue
 725                 * can be bypassing for some time and it's always nice to
 726                 * avoid busy looping.
 727                 */
 728                if (ret == -EBUSY) {
 729                        msleep(10);
 730                        ret = restart_syscall();
 731                }
 732                return ret;
 733        }
 734
 735        ctx->disk = disk;
 736        ctx->blkg = blkg;
 737        ctx->v = v;
 738        return 0;
 739}
 740EXPORT_SYMBOL_GPL(blkg_conf_prep);
 741
 742/**
 743 * blkg_conf_finish - finish up per-blkg config update
 744 * @ctx: blkg_conf_ctx intiailized by blkg_conf_prep()
 745 *
 746 * Finish up after per-blkg config update.  This function must be paired
 747 * with blkg_conf_prep().
 748 */
 749void blkg_conf_finish(struct blkg_conf_ctx *ctx)
 750        __releases(ctx->disk->queue->queue_lock) __releases(rcu)
 751{
 752        spin_unlock_irq(ctx->disk->queue->queue_lock);
 753        rcu_read_unlock();
 754        put_disk(ctx->disk);
 755}
 756EXPORT_SYMBOL_GPL(blkg_conf_finish);
 757
 758struct cftype blkcg_files[] = {
 759        {
 760                .name = "reset_stats",
 761                .write_u64 = blkcg_reset_stats,
 762        },
 763        { }     /* terminate */
 764};
 765
 766/**
 767 * blkcg_css_offline - cgroup css_offline callback
 768 * @cgroup: cgroup of interest
 769 *
 770 * This function is called when @cgroup is about to go away and responsible
 771 * for shooting down all blkgs associated with @cgroup.  blkgs should be
 772 * removed while holding both q and blkcg locks.  As blkcg lock is nested
 773 * inside q lock, this function performs reverse double lock dancing.
 774 *
 775 * This is the blkcg counterpart of ioc_release_fn().
 776 */
 777static void blkcg_css_offline(struct cgroup *cgroup)
 778{
 779        struct blkcg *blkcg = cgroup_to_blkcg(cgroup);
 780
 781        spin_lock_irq(&blkcg->lock);
 782
 783        while (!hlist_empty(&blkcg->blkg_list)) {
 784                struct blkcg_gq *blkg = hlist_entry(blkcg->blkg_list.first,
 785                                                struct blkcg_gq, blkcg_node);
 786                struct request_queue *q = blkg->q;
 787
 788                if (spin_trylock(q->queue_lock)) {
 789                        blkg_destroy(blkg);
 790                        spin_unlock(q->queue_lock);
 791                } else {
 792                        spin_unlock_irq(&blkcg->lock);
 793                        cpu_relax();
 794                        spin_lock_irq(&blkcg->lock);
 795                }
 796        }
 797
 798        spin_unlock_irq(&blkcg->lock);
 799}
 800
 801static void blkcg_css_free(struct cgroup *cgroup)
 802{
 803        struct blkcg *blkcg = cgroup_to_blkcg(cgroup);
 804
 805        if (blkcg != &blkcg_root)
 806                kfree(blkcg);
 807}
 808
 809static struct cgroup_subsys_state *blkcg_css_alloc(struct cgroup *cgroup)
 810{
 811        static atomic64_t id_seq = ATOMIC64_INIT(0);
 812        struct blkcg *blkcg;
 813        struct cgroup *parent = cgroup->parent;
 814
 815        if (!parent) {
 816                blkcg = &blkcg_root;
 817                goto done;
 818        }
 819
 820        blkcg = kzalloc(sizeof(*blkcg), GFP_KERNEL);
 821        if (!blkcg)
 822                return ERR_PTR(-ENOMEM);
 823
 824        blkcg->cfq_weight = CFQ_WEIGHT_DEFAULT;
 825        blkcg->cfq_leaf_weight = CFQ_WEIGHT_DEFAULT;
 826        blkcg->id = atomic64_inc_return(&id_seq); /* root is 0, start from 1 */
 827done:
 828        spin_lock_init(&blkcg->lock);
 829        INIT_RADIX_TREE(&blkcg->blkg_tree, GFP_ATOMIC);
 830        INIT_HLIST_HEAD(&blkcg->blkg_list);
 831
 832        return &blkcg->css;
 833}
 834
 835/**
 836 * blkcg_init_queue - initialize blkcg part of request queue
 837 * @q: request_queue to initialize
 838 *
 839 * Called from blk_alloc_queue_node(). Responsible for initializing blkcg
 840 * part of new request_queue @q.
 841 *
 842 * RETURNS:
 843 * 0 on success, -errno on failure.
 844 */
 845int blkcg_init_queue(struct request_queue *q)
 846{
 847        might_sleep();
 848
 849        return blk_throtl_init(q);
 850}
 851
 852/**
 853 * blkcg_drain_queue - drain blkcg part of request_queue
 854 * @q: request_queue to drain
 855 *
 856 * Called from blk_drain_queue().  Responsible for draining blkcg part.
 857 */
 858void blkcg_drain_queue(struct request_queue *q)
 859{
 860        lockdep_assert_held(q->queue_lock);
 861
 862        blk_throtl_drain(q);
 863}
 864
 865/**
 866 * blkcg_exit_queue - exit and release blkcg part of request_queue
 867 * @q: request_queue being released
 868 *
 869 * Called from blk_release_queue().  Responsible for exiting blkcg part.
 870 */
 871void blkcg_exit_queue(struct request_queue *q)
 872{
 873        spin_lock_irq(q->queue_lock);
 874        blkg_destroy_all(q);
 875        spin_unlock_irq(q->queue_lock);
 876
 877        blk_throtl_exit(q);
 878}
 879
 880/*
 881 * We cannot support shared io contexts, as we have no mean to support
 882 * two tasks with the same ioc in two different groups without major rework
 883 * of the main cic data structures.  For now we allow a task to change
 884 * its cgroup only if it's the only owner of its ioc.
 885 */
 886static int blkcg_can_attach(struct cgroup *cgrp, struct cgroup_taskset *tset)
 887{
 888        struct task_struct *task;
 889        struct io_context *ioc;
 890        int ret = 0;
 891
 892        /* task_lock() is needed to avoid races with exit_io_context() */
 893        cgroup_taskset_for_each(task, cgrp, tset) {
 894                task_lock(task);
 895                ioc = task->io_context;
 896                if (ioc && atomic_read(&ioc->nr_tasks) > 1)
 897                        ret = -EINVAL;
 898                task_unlock(task);
 899                if (ret)
 900                        break;
 901        }
 902        return ret;
 903}
 904
 905struct cgroup_subsys blkio_subsys = {
 906        .name = "blkio",
 907        .css_alloc = blkcg_css_alloc,
 908        .css_offline = blkcg_css_offline,
 909        .css_free = blkcg_css_free,
 910        .can_attach = blkcg_can_attach,
 911        .subsys_id = blkio_subsys_id,
 912        .base_cftypes = blkcg_files,
 913        .module = THIS_MODULE,
 914};
 915EXPORT_SYMBOL_GPL(blkio_subsys);
 916
 917/**
 918 * blkcg_activate_policy - activate a blkcg policy on a request_queue
 919 * @q: request_queue of interest
 920 * @pol: blkcg policy to activate
 921 *
 922 * Activate @pol on @q.  Requires %GFP_KERNEL context.  @q goes through
 923 * bypass mode to populate its blkgs with policy_data for @pol.
 924 *
 925 * Activation happens with @q bypassed, so nobody would be accessing blkgs
 926 * from IO path.  Update of each blkg is protected by both queue and blkcg
 927 * locks so that holding either lock and testing blkcg_policy_enabled() is
 928 * always enough for dereferencing policy data.
 929 *
 930 * The caller is responsible for synchronizing [de]activations and policy
 931 * [un]registerations.  Returns 0 on success, -errno on failure.
 932 */
 933int blkcg_activate_policy(struct request_queue *q,
 934                          const struct blkcg_policy *pol)
 935{
 936        LIST_HEAD(pds);
 937        struct blkcg_gq *blkg, *new_blkg;
 938        struct blkg_policy_data *pd, *n;
 939        int cnt = 0, ret;
 940        bool preloaded;
 941
 942        if (blkcg_policy_enabled(q, pol))
 943                return 0;
 944
 945        /* preallocations for root blkg */
 946        new_blkg = blkg_alloc(&blkcg_root, q, GFP_KERNEL);
 947        if (!new_blkg)
 948                return -ENOMEM;
 949
 950        blk_queue_bypass_start(q);
 951
 952        preloaded = !radix_tree_preload(GFP_KERNEL);
 953
 954        /*
 955         * Make sure the root blkg exists and count the existing blkgs.  As
 956         * @q is bypassing at this point, blkg_lookup_create() can't be
 957         * used.  Open code it.
 958         */
 959        spin_lock_irq(q->queue_lock);
 960
 961        rcu_read_lock();
 962        blkg = __blkg_lookup(&blkcg_root, q, false);
 963        if (blkg)
 964                blkg_free(new_blkg);
 965        else
 966                blkg = blkg_create(&blkcg_root, q, new_blkg);
 967        rcu_read_unlock();
 968
 969        if (preloaded)
 970                radix_tree_preload_end();
 971
 972        if (IS_ERR(blkg)) {
 973                ret = PTR_ERR(blkg);
 974                goto out_unlock;
 975        }
 976        q->root_blkg = blkg;
 977        q->root_rl.blkg = blkg;
 978
 979        list_for_each_entry(blkg, &q->blkg_list, q_node)
 980                cnt++;
 981
 982        spin_unlock_irq(q->queue_lock);
 983
 984        /* allocate policy_data for all existing blkgs */
 985        while (cnt--) {
 986                pd = kzalloc_node(pol->pd_size, GFP_KERNEL, q->node);
 987                if (!pd) {
 988                        ret = -ENOMEM;
 989                        goto out_free;
 990                }
 991                list_add_tail(&pd->alloc_node, &pds);
 992        }
 993
 994        /*
 995         * Install the allocated pds.  With @q bypassing, no new blkg
 996         * should have been created while the queue lock was dropped.
 997         */
 998        spin_lock_irq(q->queue_lock);
 999
1000        list_for_each_entry(blkg, &q->blkg_list, q_node) {
1001                if (WARN_ON(list_empty(&pds))) {
1002                        /* umm... this shouldn't happen, just abort */
1003                        ret = -ENOMEM;
1004                        goto out_unlock;
1005                }
1006                pd = list_first_entry(&pds, struct blkg_policy_data, alloc_node);
1007                list_del_init(&pd->alloc_node);
1008
1009                /* grab blkcg lock too while installing @pd on @blkg */
1010                spin_lock(&blkg->blkcg->lock);
1011
1012                blkg->pd[pol->plid] = pd;
1013                pd->blkg = blkg;
1014                pd->plid = pol->plid;
1015                pol->pd_init_fn(blkg);
1016
1017                spin_unlock(&blkg->blkcg->lock);
1018        }
1019
1020        __set_bit(pol->plid, q->blkcg_pols);
1021        ret = 0;
1022out_unlock:
1023        spin_unlock_irq(q->queue_lock);
1024out_free:
1025        blk_queue_bypass_end(q);
1026        list_for_each_entry_safe(pd, n, &pds, alloc_node)
1027                kfree(pd);
1028        return ret;
1029}
1030EXPORT_SYMBOL_GPL(blkcg_activate_policy);
1031
1032/**
1033 * blkcg_deactivate_policy - deactivate a blkcg policy on a request_queue
1034 * @q: request_queue of interest
1035 * @pol: blkcg policy to deactivate
1036 *
1037 * Deactivate @pol on @q.  Follows the same synchronization rules as
1038 * blkcg_activate_policy().
1039 */
1040void blkcg_deactivate_policy(struct request_queue *q,
1041                             const struct blkcg_policy *pol)
1042{
1043        struct blkcg_gq *blkg;
1044
1045        if (!blkcg_policy_enabled(q, pol))
1046                return;
1047
1048        blk_queue_bypass_start(q);
1049        spin_lock_irq(q->queue_lock);
1050
1051        __clear_bit(pol->plid, q->blkcg_pols);
1052
1053        /* if no policy is left, no need for blkgs - shoot them down */
1054        if (bitmap_empty(q->blkcg_pols, BLKCG_MAX_POLS))
1055                blkg_destroy_all(q);
1056
1057        list_for_each_entry(blkg, &q->blkg_list, q_node) {
1058                /* grab blkcg lock too while removing @pd from @blkg */
1059                spin_lock(&blkg->blkcg->lock);
1060
1061                if (pol->pd_offline_fn)
1062                        pol->pd_offline_fn(blkg);
1063                if (pol->pd_exit_fn)
1064                        pol->pd_exit_fn(blkg);
1065
1066                kfree(blkg->pd[pol->plid]);
1067                blkg->pd[pol->plid] = NULL;
1068
1069                spin_unlock(&blkg->blkcg->lock);
1070        }
1071
1072        spin_unlock_irq(q->queue_lock);
1073        blk_queue_bypass_end(q);
1074}
1075EXPORT_SYMBOL_GPL(blkcg_deactivate_policy);
1076
1077/**
1078 * blkcg_policy_register - register a blkcg policy
1079 * @pol: blkcg policy to register
1080 *
1081 * Register @pol with blkcg core.  Might sleep and @pol may be modified on
1082 * successful registration.  Returns 0 on success and -errno on failure.
1083 */
1084int blkcg_policy_register(struct blkcg_policy *pol)
1085{
1086        int i, ret;
1087
1088        if (WARN_ON(pol->pd_size < sizeof(struct blkg_policy_data)))
1089                return -EINVAL;
1090
1091        mutex_lock(&blkcg_pol_mutex);
1092
1093        /* find an empty slot */
1094        ret = -ENOSPC;
1095        for (i = 0; i < BLKCG_MAX_POLS; i++)
1096                if (!blkcg_policy[i])
1097                        break;
1098        if (i >= BLKCG_MAX_POLS)
1099                goto out_unlock;
1100
1101        /* register and update blkgs */
1102        pol->plid = i;
1103        blkcg_policy[i] = pol;
1104
1105        /* everything is in place, add intf files for the new policy */
1106        if (pol->cftypes)
1107                WARN_ON(cgroup_add_cftypes(&blkio_subsys, pol->cftypes));
1108        ret = 0;
1109out_unlock:
1110        mutex_unlock(&blkcg_pol_mutex);
1111        return ret;
1112}
1113EXPORT_SYMBOL_GPL(blkcg_policy_register);
1114
1115/**
1116 * blkcg_policy_unregister - unregister a blkcg policy
1117 * @pol: blkcg policy to unregister
1118 *
1119 * Undo blkcg_policy_register(@pol).  Might sleep.
1120 */
1121void blkcg_policy_unregister(struct blkcg_policy *pol)
1122{
1123        mutex_lock(&blkcg_pol_mutex);
1124
1125        if (WARN_ON(blkcg_policy[pol->plid] != pol))
1126                goto out_unlock;
1127
1128        /* kill the intf files first */
1129        if (pol->cftypes)
1130                cgroup_rm_cftypes(&blkio_subsys, pol->cftypes);
1131
1132        /* unregister and update blkgs */
1133        blkcg_policy[pol->plid] = NULL;
1134out_unlock:
1135        mutex_unlock(&blkcg_pol_mutex);
1136}
1137EXPORT_SYMBOL_GPL(blkcg_policy_unregister);
1138
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.