diff options
author | Tejun Heo <tj@kernel.org> | 2019-08-28 18:05:51 -0400 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2019-08-28 23:17:01 -0400 |
commit | cf09a8ee19ad1f78b4e18cdde9f2a61133efacf5 (patch) | |
tree | fe93a7359f9de19bb6480a37847e76acfb64887f | |
parent | da8c828190fcd04662f594f3e00a184885aa5aa3 (diff) |
blkcg: pass @q and @blkcg into blkcg_pol_alloc_pd_fn()
Instead of @node, pass in @q and @blkcg so that the alloc function has
more context. This doesn't cause any behavior change and will be used
by io.weight implementation.
Signed-off-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
-rw-r--r-- | block/bfq-cgroup.c | 5 | ||||
-rw-r--r-- | block/blk-cgroup.c | 6 | ||||
-rw-r--r-- | block/blk-iolatency.c | 6 | ||||
-rw-r--r-- | block/blk-throttle.c | 6 | ||||
-rw-r--r-- | include/linux/blk-cgroup.h | 3 |
5 files changed, 16 insertions, 10 deletions
diff --git a/block/bfq-cgroup.c b/block/bfq-cgroup.c index 0f6cd688924f..e6fb537b4bfc 100644 --- a/block/bfq-cgroup.c +++ b/block/bfq-cgroup.c | |||
@@ -501,11 +501,12 @@ static void bfq_cpd_free(struct blkcg_policy_data *cpd) | |||
501 | kfree(cpd_to_bfqgd(cpd)); | 501 | kfree(cpd_to_bfqgd(cpd)); |
502 | } | 502 | } |
503 | 503 | ||
504 | static struct blkg_policy_data *bfq_pd_alloc(gfp_t gfp, int node) | 504 | static struct blkg_policy_data *bfq_pd_alloc(gfp_t gfp, struct request_queue *q, |
505 | struct blkcg *blkcg) | ||
505 | { | 506 | { |
506 | struct bfq_group *bfqg; | 507 | struct bfq_group *bfqg; |
507 | 508 | ||
508 | bfqg = kzalloc_node(sizeof(*bfqg), gfp, node); | 509 | bfqg = kzalloc_node(sizeof(*bfqg), gfp, q->node); |
509 | if (!bfqg) | 510 | if (!bfqg) |
510 | return NULL; | 511 | return NULL; |
511 | 512 | ||
diff --git a/block/blk-cgroup.c b/block/blk-cgroup.c index 55a7dc227dfb..6a82ca3fb5cf 100644 --- a/block/blk-cgroup.c +++ b/block/blk-cgroup.c | |||
@@ -175,7 +175,7 @@ static struct blkcg_gq *blkg_alloc(struct blkcg *blkcg, struct request_queue *q, | |||
175 | continue; | 175 | continue; |
176 | 176 | ||
177 | /* alloc per-policy data and attach it to blkg */ | 177 | /* alloc per-policy data and attach it to blkg */ |
178 | pd = pol->pd_alloc_fn(gfp_mask, q->node); | 178 | pd = pol->pd_alloc_fn(gfp_mask, q, blkcg); |
179 | if (!pd) | 179 | if (!pd) |
180 | goto err_free; | 180 | goto err_free; |
181 | 181 | ||
@@ -1346,7 +1346,7 @@ int blkcg_activate_policy(struct request_queue *q, | |||
1346 | blk_mq_freeze_queue(q); | 1346 | blk_mq_freeze_queue(q); |
1347 | pd_prealloc: | 1347 | pd_prealloc: |
1348 | if (!pd_prealloc) { | 1348 | if (!pd_prealloc) { |
1349 | pd_prealloc = pol->pd_alloc_fn(GFP_KERNEL, q->node); | 1349 | pd_prealloc = pol->pd_alloc_fn(GFP_KERNEL, q, &blkcg_root); |
1350 | if (!pd_prealloc) { | 1350 | if (!pd_prealloc) { |
1351 | ret = -ENOMEM; | 1351 | ret = -ENOMEM; |
1352 | goto out_bypass_end; | 1352 | goto out_bypass_end; |
@@ -1362,7 +1362,7 @@ pd_prealloc: | |||
1362 | if (blkg->pd[pol->plid]) | 1362 | if (blkg->pd[pol->plid]) |
1363 | continue; | 1363 | continue; |
1364 | 1364 | ||
1365 | pd = pol->pd_alloc_fn(GFP_NOWAIT | __GFP_NOWARN, q->node); | 1365 | pd = pol->pd_alloc_fn(GFP_NOWAIT | __GFP_NOWARN, q, &blkcg_root); |
1366 | if (!pd) | 1366 | if (!pd) |
1367 | swap(pd, pd_prealloc); | 1367 | swap(pd, pd_prealloc); |
1368 | if (!pd) { | 1368 | if (!pd) { |
diff --git a/block/blk-iolatency.c b/block/blk-iolatency.c index 0fff7b56df0e..46fa6449f4bb 100644 --- a/block/blk-iolatency.c +++ b/block/blk-iolatency.c | |||
@@ -934,11 +934,13 @@ static size_t iolatency_pd_stat(struct blkg_policy_data *pd, char *buf, | |||
934 | } | 934 | } |
935 | 935 | ||
936 | 936 | ||
937 | static struct blkg_policy_data *iolatency_pd_alloc(gfp_t gfp, int node) | 937 | static struct blkg_policy_data *iolatency_pd_alloc(gfp_t gfp, |
938 | struct request_queue *q, | ||
939 | struct blkcg *blkcg) | ||
938 | { | 940 | { |
939 | struct iolatency_grp *iolat; | 941 | struct iolatency_grp *iolat; |
940 | 942 | ||
941 | iolat = kzalloc_node(sizeof(*iolat), gfp, node); | 943 | iolat = kzalloc_node(sizeof(*iolat), gfp, q->node); |
942 | if (!iolat) | 944 | if (!iolat) |
943 | return NULL; | 945 | return NULL; |
944 | iolat->stats = __alloc_percpu_gfp(sizeof(struct latency_stat), | 946 | iolat->stats = __alloc_percpu_gfp(sizeof(struct latency_stat), |
diff --git a/block/blk-throttle.c b/block/blk-throttle.c index 8ab6c8153223..0445c998c377 100644 --- a/block/blk-throttle.c +++ b/block/blk-throttle.c | |||
@@ -478,12 +478,14 @@ static void throtl_service_queue_init(struct throtl_service_queue *sq) | |||
478 | timer_setup(&sq->pending_timer, throtl_pending_timer_fn, 0); | 478 | timer_setup(&sq->pending_timer, throtl_pending_timer_fn, 0); |
479 | } | 479 | } |
480 | 480 | ||
481 | static struct blkg_policy_data *throtl_pd_alloc(gfp_t gfp, int node) | 481 | static struct blkg_policy_data *throtl_pd_alloc(gfp_t gfp, |
482 | struct request_queue *q, | ||
483 | struct blkcg *blkcg) | ||
482 | { | 484 | { |
483 | struct throtl_grp *tg; | 485 | struct throtl_grp *tg; |
484 | int rw; | 486 | int rw; |
485 | 487 | ||
486 | tg = kzalloc_node(sizeof(*tg), gfp, node); | 488 | tg = kzalloc_node(sizeof(*tg), gfp, q->node); |
487 | if (!tg) | 489 | if (!tg) |
488 | return NULL; | 490 | return NULL; |
489 | 491 | ||
diff --git a/include/linux/blk-cgroup.h b/include/linux/blk-cgroup.h index 0bb79d858a13..261248e88eb1 100644 --- a/include/linux/blk-cgroup.h +++ b/include/linux/blk-cgroup.h | |||
@@ -149,7 +149,8 @@ typedef struct blkcg_policy_data *(blkcg_pol_alloc_cpd_fn)(gfp_t gfp); | |||
149 | typedef void (blkcg_pol_init_cpd_fn)(struct blkcg_policy_data *cpd); | 149 | typedef void (blkcg_pol_init_cpd_fn)(struct blkcg_policy_data *cpd); |
150 | typedef void (blkcg_pol_free_cpd_fn)(struct blkcg_policy_data *cpd); | 150 | typedef void (blkcg_pol_free_cpd_fn)(struct blkcg_policy_data *cpd); |
151 | typedef void (blkcg_pol_bind_cpd_fn)(struct blkcg_policy_data *cpd); | 151 | typedef void (blkcg_pol_bind_cpd_fn)(struct blkcg_policy_data *cpd); |
152 | typedef struct blkg_policy_data *(blkcg_pol_alloc_pd_fn)(gfp_t gfp, int node); | 152 | typedef struct blkg_policy_data *(blkcg_pol_alloc_pd_fn)(gfp_t gfp, |
153 | struct request_queue *q, struct blkcg *blkcg); | ||
153 | typedef void (blkcg_pol_init_pd_fn)(struct blkg_policy_data *pd); | 154 | typedef void (blkcg_pol_init_pd_fn)(struct blkg_policy_data *pd); |
154 | typedef void (blkcg_pol_online_pd_fn)(struct blkg_policy_data *pd); | 155 | typedef void (blkcg_pol_online_pd_fn)(struct blkg_policy_data *pd); |
155 | typedef void (blkcg_pol_offline_pd_fn)(struct blkg_policy_data *pd); | 156 | typedef void (blkcg_pol_offline_pd_fn)(struct blkg_policy_data *pd); |