Commit 035d10b2 authored by Tejun Heo's avatar Tejun Heo Committed by Jens Axboe

blkcg: add blkio_policy[] array and allow one policy per policy ID

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: default avatarTejun Heo <tj@kernel.org>
Cc: Vivek Goyal <vgoyal@redhat.com>
Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent ca32aefc
...@@ -29,6 +29,8 @@ static LIST_HEAD(blkio_list); ...@@ -29,6 +29,8 @@ static LIST_HEAD(blkio_list);
struct blkio_cgroup blkio_root_cgroup = { .weight = 2*BLKIO_WEIGHT_DEFAULT }; struct blkio_cgroup blkio_root_cgroup = { .weight = 2*BLKIO_WEIGHT_DEFAULT };
EXPORT_SYMBOL_GPL(blkio_root_cgroup); 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 *, static struct cgroup_subsys_state *blkiocg_create(struct cgroup_subsys *,
struct cgroup *); struct cgroup *);
static int blkiocg_can_attach(struct cgroup_subsys *, struct cgroup *, static int blkiocg_can_attach(struct cgroup_subsys *, struct cgroup *,
...@@ -1694,7 +1696,11 @@ static void blkiocg_attach(struct cgroup_subsys *ss, struct cgroup *cgrp, ...@@ -1694,7 +1696,11 @@ static void blkiocg_attach(struct cgroup_subsys *ss, struct cgroup *cgrp,
void blkio_policy_register(struct blkio_policy_type *blkiop) void blkio_policy_register(struct blkio_policy_type *blkiop)
{ {
spin_lock(&blkio_list_lock); spin_lock(&blkio_list_lock);
BUG_ON(blkio_policy[blkiop->plid]);
blkio_policy[blkiop->plid] = blkiop;
list_add_tail(&blkiop->list, &blkio_list); list_add_tail(&blkiop->list, &blkio_list);
spin_unlock(&blkio_list_lock); spin_unlock(&blkio_list_lock);
} }
EXPORT_SYMBOL_GPL(blkio_policy_register); EXPORT_SYMBOL_GPL(blkio_policy_register);
...@@ -1702,7 +1708,11 @@ EXPORT_SYMBOL_GPL(blkio_policy_register); ...@@ -1702,7 +1708,11 @@ EXPORT_SYMBOL_GPL(blkio_policy_register);
void blkio_policy_unregister(struct blkio_policy_type *blkiop) void blkio_policy_unregister(struct blkio_policy_type *blkiop)
{ {
spin_lock(&blkio_list_lock); spin_lock(&blkio_list_lock);
BUG_ON(blkio_policy[blkiop->plid] != blkiop);
blkio_policy[blkiop->plid] = NULL;
list_del_init(&blkiop->list); list_del_init(&blkiop->list);
spin_unlock(&blkio_list_lock); spin_unlock(&blkio_list_lock);
} }
EXPORT_SYMBOL_GPL(blkio_policy_unregister); EXPORT_SYMBOL_GPL(blkio_policy_unregister);
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
enum blkio_policy_id { enum blkio_policy_id {
BLKIO_POLICY_PROP = 0, /* Proportional Bandwidth division */ BLKIO_POLICY_PROP = 0, /* Proportional Bandwidth division */
BLKIO_POLICY_THROTL, /* Throttling */ BLKIO_POLICY_THROTL, /* Throttling */
BLKIO_NR_POLICIES,
}; };
/* Max limits for throttle policy */ /* Max limits for throttle policy */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment