lkml.org 
[lkml]   [2012]   [Jan]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 12/17] blkcg: add blkio_policy[] array and allow one policy per policy ID
    Date
    Block cgroup policies are maintained in a linked list and,
    theoretically, multiple policies sharing the same policy ID are
    allowed.

    This patch temporarily restricts one policy per plid and adds
    blkio_policy[] array which indexes registered policy types by plid.
    Both the restriction and blkio_policy[] array are transitional and
    will be removed once API cleanup is complete.

    Signed-off-by: Tejun Heo <tj@kernel.org>
    Cc: Vivek Goyal <vgoyal@redhat.com>
    ---
    block/blk-cgroup.c | 10 ++++++++++
    block/blk-cgroup.h | 2 ++
    2 files changed, 12 insertions(+), 0 deletions(-)

    diff --git a/block/blk-cgroup.c b/block/blk-cgroup.c
    index 572499a..a175551 100644
    --- a/block/blk-cgroup.c
    +++ b/block/blk-cgroup.c
    @@ -28,6 +28,8 @@ static LIST_HEAD(blkio_list);
    struct blkio_cgroup blkio_root_cgroup = { .weight = 2*BLKIO_WEIGHT_DEFAULT };
    EXPORT_SYMBOL_GPL(blkio_root_cgroup);

    +static struct blkio_policy_type *blkio_policy[BLKIO_NR_POLICIES];
    +
    static struct cgroup_subsys_state *blkiocg_create(struct cgroup_subsys *,
    struct cgroup *);
    static int blkiocg_can_attach(struct cgroup_subsys *, struct cgroup *,
    @@ -1674,7 +1676,11 @@ static void blkiocg_attach(struct cgroup_subsys *ss, struct cgroup *cgrp,
    void blkio_policy_register(struct blkio_policy_type *blkiop)
    {
    spin_lock_irq(&blkio_list_lock);
    +
    + BUG_ON(blkio_policy[blkiop->plid]);
    + blkio_policy[blkiop->plid] = blkiop;
    list_add_tail(&blkiop->list, &blkio_list);
    +
    spin_unlock_irq(&blkio_list_lock);
    }
    EXPORT_SYMBOL_GPL(blkio_policy_register);
    @@ -1682,7 +1688,11 @@ EXPORT_SYMBOL_GPL(blkio_policy_register);
    void blkio_policy_unregister(struct blkio_policy_type *blkiop)
    {
    spin_lock_irq(&blkio_list_lock);
    +
    + BUG_ON(blkio_policy[blkiop->plid] != blkiop);
    + blkio_policy[blkiop->plid] = NULL;
    list_del_init(&blkiop->list);
    +
    spin_unlock_irq(&blkio_list_lock);
    }
    EXPORT_SYMBOL_GPL(blkio_policy_unregister);
    diff --git a/block/blk-cgroup.h b/block/blk-cgroup.h
    index d91718b..fd72890 100644
    --- a/block/blk-cgroup.h
    +++ b/block/blk-cgroup.h
    @@ -19,6 +19,8 @@
    enum blkio_policy_id {
    BLKIO_POLICY_PROP = 0, /* Proportional Bandwidth division */
    BLKIO_POLICY_THROTL, /* Throttling */
    +
    + BLKIO_NR_POLICIES,
    };

    /* Max limits for throttle policy */
    --
    1.7.7.3


    \
     
     \ /
      Last update: 2012-01-22 04:31    [W:0.024 / U:88.460 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site