summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTejun Heo <tj@kernel.org>2019-08-28 18:05:51 -0400
committerJens Axboe <axboe@kernel.dk>2019-08-28 23:17:01 -0400
commitcf09a8ee19ad1f78b4e18cdde9f2a61133efacf5 (patch)
treefe93a7359f9de19bb6480a37847e76acfb64887f
parentda8c828190fcd04662f594f3e00a184885aa5aa3 (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.c5
-rw-r--r--block/blk-cgroup.c6
-rw-r--r--block/blk-iolatency.c6
-rw-r--r--block/blk-throttle.c6
-rw-r--r--include/linux/blk-cgroup.h3
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
504static struct blkg_policy_data *bfq_pd_alloc(gfp_t gfp, int node) 504static 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);
1347pd_prealloc: 1347pd_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
937static struct blkg_policy_data *iolatency_pd_alloc(gfp_t gfp, int node) 937static 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
481static struct blkg_policy_data *throtl_pd_alloc(gfp_t gfp, int node) 481static 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);
149typedef void (blkcg_pol_init_cpd_fn)(struct blkcg_policy_data *cpd); 149typedef void (blkcg_pol_init_cpd_fn)(struct blkcg_policy_data *cpd);
150typedef void (blkcg_pol_free_cpd_fn)(struct blkcg_policy_data *cpd); 150typedef void (blkcg_pol_free_cpd_fn)(struct blkcg_policy_data *cpd);
151typedef void (blkcg_pol_bind_cpd_fn)(struct blkcg_policy_data *cpd); 151typedef void (blkcg_pol_bind_cpd_fn)(struct blkcg_policy_data *cpd);
152typedef struct blkg_policy_data *(blkcg_pol_alloc_pd_fn)(gfp_t gfp, int node); 152typedef struct blkg_policy_data *(blkcg_pol_alloc_pd_fn)(gfp_t gfp,
153 struct request_queue *q, struct blkcg *blkcg);
153typedef void (blkcg_pol_init_pd_fn)(struct blkg_policy_data *pd); 154typedef void (blkcg_pol_init_pd_fn)(struct blkg_policy_data *pd);
154typedef void (blkcg_pol_online_pd_fn)(struct blkg_policy_data *pd); 155typedef void (blkcg_pol_online_pd_fn)(struct blkg_policy_data *pd);
155typedef void (blkcg_pol_offline_pd_fn)(struct blkg_policy_data *pd); 156typedef void (blkcg_pol_offline_pd_fn)(struct blkg_policy_data *pd);