Commit 40e4996e authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Jens Axboe

blk-cgroup: pass a gendisk to blkcg_{de,}activate_policy

Prepare for storing the blkcg information in the gendisk instead of
the request_queue.
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarAndreas Herrmann <aherrmann@suse.de>
Acked-by: default avatarTejun Heo <tj@kernel.org>
Link: https://lore.kernel.org/r/20230203150400.3199230-17-hch@lst.deSigned-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent ba91c849
...@@ -1291,7 +1291,7 @@ struct bfq_group *bfq_create_group_hierarchy(struct bfq_data *bfqd, int node) ...@@ -1291,7 +1291,7 @@ struct bfq_group *bfq_create_group_hierarchy(struct bfq_data *bfqd, int node)
{ {
int ret; int ret;
ret = blkcg_activate_policy(bfqd->queue, &blkcg_policy_bfq); ret = blkcg_activate_policy(bfqd->queue->disk, &blkcg_policy_bfq);
if (ret) if (ret)
return NULL; return NULL;
......
...@@ -7146,7 +7146,7 @@ static void bfq_exit_queue(struct elevator_queue *e) ...@@ -7146,7 +7146,7 @@ static void bfq_exit_queue(struct elevator_queue *e)
bfqg_and_blkg_put(bfqd->root_group); bfqg_and_blkg_put(bfqd->root_group);
#ifdef CONFIG_BFQ_GROUP_IOSCHED #ifdef CONFIG_BFQ_GROUP_IOSCHED
blkcg_deactivate_policy(bfqd->queue, &blkcg_policy_bfq); blkcg_deactivate_policy(bfqd->queue->disk, &blkcg_policy_bfq);
#else #else
spin_lock_irq(&bfqd->lock); spin_lock_irq(&bfqd->lock);
bfq_put_async_queues(bfqd, bfqd->root_group); bfq_put_async_queues(bfqd, bfqd->root_group);
......
...@@ -1390,14 +1390,14 @@ struct cgroup_subsys io_cgrp_subsys = { ...@@ -1390,14 +1390,14 @@ struct cgroup_subsys io_cgrp_subsys = {
EXPORT_SYMBOL_GPL(io_cgrp_subsys); EXPORT_SYMBOL_GPL(io_cgrp_subsys);
/** /**
* blkcg_activate_policy - activate a blkcg policy on a request_queue * blkcg_activate_policy - activate a blkcg policy on a gendisk
* @q: request_queue of interest * @disk: gendisk of interest
* @pol: blkcg policy to activate * @pol: blkcg policy to activate
* *
* Activate @pol on @q. Requires %GFP_KERNEL context. @q goes through * Activate @pol on @disk. Requires %GFP_KERNEL context. @disk goes through
* bypass mode to populate its blkgs with policy_data for @pol. * bypass mode to populate its blkgs with policy_data for @pol.
* *
* Activation happens with @q bypassed, so nobody would be accessing blkgs * Activation happens with @disk bypassed, so nobody would be accessing blkgs
* from IO path. Update of each blkg is protected by both queue and blkcg * from IO path. Update of each blkg is protected by both queue and blkcg
* locks so that holding either lock and testing blkcg_policy_enabled() is * locks so that holding either lock and testing blkcg_policy_enabled() is
* always enough for dereferencing policy data. * always enough for dereferencing policy data.
...@@ -1405,9 +1405,9 @@ EXPORT_SYMBOL_GPL(io_cgrp_subsys); ...@@ -1405,9 +1405,9 @@ EXPORT_SYMBOL_GPL(io_cgrp_subsys);
* The caller is responsible for synchronizing [de]activations and policy * The caller is responsible for synchronizing [de]activations and policy
* [un]registerations. Returns 0 on success, -errno on failure. * [un]registerations. Returns 0 on success, -errno on failure.
*/ */
int blkcg_activate_policy(struct request_queue *q, int blkcg_activate_policy(struct gendisk *disk, const struct blkcg_policy *pol)
const struct blkcg_policy *pol)
{ {
struct request_queue *q = disk->queue;
struct blkg_policy_data *pd_prealloc = NULL; struct blkg_policy_data *pd_prealloc = NULL;
struct blkcg_gq *blkg, *pinned_blkg = NULL; struct blkcg_gq *blkg, *pinned_blkg = NULL;
int ret; int ret;
...@@ -1508,16 +1508,17 @@ int blkcg_activate_policy(struct request_queue *q, ...@@ -1508,16 +1508,17 @@ int blkcg_activate_policy(struct request_queue *q,
EXPORT_SYMBOL_GPL(blkcg_activate_policy); EXPORT_SYMBOL_GPL(blkcg_activate_policy);
/** /**
* blkcg_deactivate_policy - deactivate a blkcg policy on a request_queue * blkcg_deactivate_policy - deactivate a blkcg policy on a gendisk
* @q: request_queue of interest * @disk: gendisk of interest
* @pol: blkcg policy to deactivate * @pol: blkcg policy to deactivate
* *
* Deactivate @pol on @q. Follows the same synchronization rules as * Deactivate @pol on @disk. Follows the same synchronization rules as
* blkcg_activate_policy(). * blkcg_activate_policy().
*/ */
void blkcg_deactivate_policy(struct request_queue *q, void blkcg_deactivate_policy(struct gendisk *disk,
const struct blkcg_policy *pol) const struct blkcg_policy *pol)
{ {
struct request_queue *q = disk->queue;
struct blkcg_gq *blkg; struct blkcg_gq *blkg;
if (!blkcg_policy_enabled(q, pol)) if (!blkcg_policy_enabled(q, pol))
......
...@@ -194,9 +194,8 @@ void blkcg_exit_disk(struct gendisk *disk); ...@@ -194,9 +194,8 @@ void blkcg_exit_disk(struct gendisk *disk);
/* Blkio controller policy registration */ /* Blkio controller policy registration */
int blkcg_policy_register(struct blkcg_policy *pol); int blkcg_policy_register(struct blkcg_policy *pol);
void blkcg_policy_unregister(struct blkcg_policy *pol); void blkcg_policy_unregister(struct blkcg_policy *pol);
int blkcg_activate_policy(struct request_queue *q, int blkcg_activate_policy(struct gendisk *disk, const struct blkcg_policy *pol);
const struct blkcg_policy *pol); void blkcg_deactivate_policy(struct gendisk *disk,
void blkcg_deactivate_policy(struct request_queue *q,
const struct blkcg_policy *pol); const struct blkcg_policy *pol);
const char *blkg_dev_name(struct blkcg_gq *blkg); const char *blkg_dev_name(struct blkcg_gq *blkg);
...@@ -495,9 +494,9 @@ static inline int blkcg_init_disk(struct gendisk *disk) { return 0; } ...@@ -495,9 +494,9 @@ static inline int blkcg_init_disk(struct gendisk *disk) { return 0; }
static inline void blkcg_exit_disk(struct gendisk *disk) { } static inline void blkcg_exit_disk(struct gendisk *disk) { }
static inline int blkcg_policy_register(struct blkcg_policy *pol) { return 0; } static inline int blkcg_policy_register(struct blkcg_policy *pol) { return 0; }
static inline void blkcg_policy_unregister(struct blkcg_policy *pol) { } static inline void blkcg_policy_unregister(struct blkcg_policy *pol) { }
static inline int blkcg_activate_policy(struct request_queue *q, static inline int blkcg_activate_policy(struct gendisk *disk,
const struct blkcg_policy *pol) { return 0; } const struct blkcg_policy *pol) { return 0; }
static inline void blkcg_deactivate_policy(struct request_queue *q, static inline void blkcg_deactivate_policy(struct gendisk *disk,
const struct blkcg_policy *pol) { } const struct blkcg_policy *pol) { }
static inline struct blkg_policy_data *blkg_to_pd(struct blkcg_gq *blkg, static inline struct blkg_policy_data *blkg_to_pd(struct blkcg_gq *blkg,
......
...@@ -2821,7 +2821,7 @@ static void ioc_rqos_exit(struct rq_qos *rqos) ...@@ -2821,7 +2821,7 @@ static void ioc_rqos_exit(struct rq_qos *rqos)
{ {
struct ioc *ioc = rqos_to_ioc(rqos); struct ioc *ioc = rqos_to_ioc(rqos);
blkcg_deactivate_policy(rqos->disk->queue, &blkcg_policy_iocost); blkcg_deactivate_policy(rqos->disk, &blkcg_policy_iocost);
spin_lock_irq(&ioc->lock); spin_lock_irq(&ioc->lock);
ioc->running = IOC_STOP; ioc->running = IOC_STOP;
...@@ -2893,7 +2893,7 @@ static int blk_iocost_init(struct gendisk *disk) ...@@ -2893,7 +2893,7 @@ static int blk_iocost_init(struct gendisk *disk)
if (ret) if (ret)
goto err_free_ioc; goto err_free_ioc;
ret = blkcg_activate_policy(disk->queue, &blkcg_policy_iocost); ret = blkcg_activate_policy(disk, &blkcg_policy_iocost);
if (ret) if (ret)
goto err_del_qos; goto err_del_qos;
return 0; return 0;
......
...@@ -646,7 +646,7 @@ static void blkcg_iolatency_exit(struct rq_qos *rqos) ...@@ -646,7 +646,7 @@ static void blkcg_iolatency_exit(struct rq_qos *rqos)
timer_shutdown_sync(&blkiolat->timer); timer_shutdown_sync(&blkiolat->timer);
flush_work(&blkiolat->enable_work); flush_work(&blkiolat->enable_work);
blkcg_deactivate_policy(rqos->disk->queue, &blkcg_policy_iolatency); blkcg_deactivate_policy(rqos->disk, &blkcg_policy_iolatency);
kfree(blkiolat); kfree(blkiolat);
} }
...@@ -768,7 +768,7 @@ int blk_iolatency_init(struct gendisk *disk) ...@@ -768,7 +768,7 @@ int blk_iolatency_init(struct gendisk *disk)
&blkcg_iolatency_ops); &blkcg_iolatency_ops);
if (ret) if (ret)
goto err_free; goto err_free;
ret = blkcg_activate_policy(disk->queue, &blkcg_policy_iolatency); ret = blkcg_activate_policy(disk, &blkcg_policy_iolatency);
if (ret) if (ret)
goto err_qos_del; goto err_qos_del;
......
...@@ -204,12 +204,12 @@ void blkcg_set_ioprio(struct bio *bio) ...@@ -204,12 +204,12 @@ void blkcg_set_ioprio(struct bio *bio)
void blk_ioprio_exit(struct gendisk *disk) void blk_ioprio_exit(struct gendisk *disk)
{ {
blkcg_deactivate_policy(disk->queue, &ioprio_policy); blkcg_deactivate_policy(disk, &ioprio_policy);
} }
int blk_ioprio_init(struct gendisk *disk) int blk_ioprio_init(struct gendisk *disk)
{ {
return blkcg_activate_policy(disk->queue, &ioprio_policy); return blkcg_activate_policy(disk, &ioprio_policy);
} }
static int __init ioprio_init(void) static int __init ioprio_init(void)
......
...@@ -2395,7 +2395,7 @@ int blk_throtl_init(struct gendisk *disk) ...@@ -2395,7 +2395,7 @@ int blk_throtl_init(struct gendisk *disk)
td->low_downgrade_time = jiffies; td->low_downgrade_time = jiffies;
/* activate policy */ /* activate policy */
ret = blkcg_activate_policy(q, &blkcg_policy_throtl); ret = blkcg_activate_policy(disk, &blkcg_policy_throtl);
if (ret) { if (ret) {
free_percpu(td->latency_buckets[READ]); free_percpu(td->latency_buckets[READ]);
free_percpu(td->latency_buckets[WRITE]); free_percpu(td->latency_buckets[WRITE]);
...@@ -2411,7 +2411,7 @@ void blk_throtl_exit(struct gendisk *disk) ...@@ -2411,7 +2411,7 @@ void blk_throtl_exit(struct gendisk *disk)
BUG_ON(!q->td); BUG_ON(!q->td);
del_timer_sync(&q->td->service_queue.pending_timer); del_timer_sync(&q->td->service_queue.pending_timer);
throtl_shutdown_wq(q); throtl_shutdown_wq(q);
blkcg_deactivate_policy(q, &blkcg_policy_throtl); blkcg_deactivate_policy(disk, &blkcg_policy_throtl);
free_percpu(q->td->latency_buckets[READ]); free_percpu(q->td->latency_buckets[READ]);
free_percpu(q->td->latency_buckets[WRITE]); free_percpu(q->td->latency_buckets[WRITE]);
kfree(q->td); kfree(q->td);
......
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