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: Tejun Heo <tj@kernel.org> Cc: Vivek Goyal <vgoyal@redhat.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
Родитель
ca32aefc7f
Коммит
035d10b2fa
|
@ -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,
|
||||||
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);
|
||||||
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 @@
|
||||||
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 */
|
||||||
|
|
Загрузка…
Ссылка в новой задаче