Skip to content

Commit b2ce264

Browse files
htejunaxboe
authored andcommitted
blk-throttle: clean up blkg_policy_data alloc/init/exit/free methods
With the recent addition of alloc and free methods, things became messier. This patch reorganizes them according to the followings. * ->pd_alloc_fn() Responsible for allocation and static initializations - the ones which can be done independent of where the pd might be attached. * ->pd_init_fn() Initializations which require the knowledge of where the pd is attached. * ->pd_free_fn() The counter part of pd_alloc_fn(). Static de-init and freeing. This leaves ->pd_exit_fn() without any users. Removed. While at it, collapse an one liner function throtl_pd_exit(), which has only one user, into its user. Signed-off-by: Tejun Heo <[email protected]> Cc: Vivek Goyal <[email protected]> Signed-off-by: Jens Axboe <[email protected]>
1 parent 4fb7203 commit b2ce264

File tree

4 files changed

+31
-54
lines changed

4 files changed

+31
-54
lines changed

block/blk-cgroup.c

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -402,15 +402,6 @@ static void blkg_destroy_all(struct request_queue *q)
402402
void __blkg_release_rcu(struct rcu_head *rcu_head)
403403
{
404404
struct blkcg_gq *blkg = container_of(rcu_head, struct blkcg_gq, rcu_head);
405-
int i;
406-
407-
/* tell policies that this one is being freed */
408-
for (i = 0; i < BLKCG_MAX_POLS; i++) {
409-
struct blkcg_policy *pol = blkcg_policy[i];
410-
411-
if (blkg->pd[i] && pol->pd_exit_fn)
412-
pol->pd_exit_fn(blkg);
413-
}
414405

415406
/* release the blkcg and parent blkg refs this blkg has been holding */
416407
css_put(&blkg->blkcg->css);
@@ -1127,8 +1118,6 @@ void blkcg_deactivate_policy(struct request_queue *q,
11271118

11281119
if (pol->pd_offline_fn)
11291120
pol->pd_offline_fn(blkg);
1130-
if (pol->pd_exit_fn)
1131-
pol->pd_exit_fn(blkg);
11321121

11331122
if (blkg->pd[pol->plid]) {
11341123
pol->pd_free_fn(blkg->pd[pol->plid]);

block/blk-throttle.c

Lines changed: 20 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -330,26 +330,19 @@ static struct bio *throtl_pop_queued(struct list_head *queued,
330330
}
331331

332332
/* init a service_queue, assumes the caller zeroed it */
333-
static void throtl_service_queue_init(struct throtl_service_queue *sq,
334-
struct throtl_service_queue *parent_sq)
333+
static void throtl_service_queue_init(struct throtl_service_queue *sq)
335334
{
336335
INIT_LIST_HEAD(&sq->queued[0]);
337336
INIT_LIST_HEAD(&sq->queued[1]);
338337
sq->pending_tree = RB_ROOT;
339-
sq->parent_sq = parent_sq;
340338
setup_timer(&sq->pending_timer, throtl_pending_timer_fn,
341339
(unsigned long)sq);
342340
}
343341

344-
static void throtl_service_queue_exit(struct throtl_service_queue *sq)
345-
{
346-
del_timer_sync(&sq->pending_timer);
347-
}
348-
349342
static struct blkg_policy_data *throtl_pd_alloc(gfp_t gfp, int node)
350343
{
351344
struct throtl_grp *tg;
352-
int cpu;
345+
int rw, cpu;
353346

354347
tg = kzalloc_node(sizeof(*tg), gfp, node);
355348
if (!tg)
@@ -361,6 +354,19 @@ static struct blkg_policy_data *throtl_pd_alloc(gfp_t gfp, int node)
361354
return NULL;
362355
}
363356

357+
throtl_service_queue_init(&tg->service_queue);
358+
359+
for (rw = READ; rw <= WRITE; rw++) {
360+
throtl_qnode_init(&tg->qnode_on_self[rw], tg);
361+
throtl_qnode_init(&tg->qnode_on_parent[rw], tg);
362+
}
363+
364+
RB_CLEAR_NODE(&tg->rb_node);
365+
tg->bps[READ] = -1;
366+
tg->bps[WRITE] = -1;
367+
tg->iops[READ] = -1;
368+
tg->iops[WRITE] = -1;
369+
364370
for_each_possible_cpu(cpu) {
365371
struct tg_stats_cpu *stats_cpu = per_cpu_ptr(tg->stats_cpu, cpu);
366372

@@ -375,8 +381,7 @@ static void throtl_pd_init(struct blkcg_gq *blkg)
375381
{
376382
struct throtl_grp *tg = blkg_to_tg(blkg);
377383
struct throtl_data *td = blkg->q->td;
378-
struct throtl_service_queue *parent_sq;
379-
int rw;
384+
struct throtl_service_queue *sq = &tg->service_queue;
380385

381386
/*
382387
* If on the default hierarchy, we switch to properly hierarchical
@@ -391,25 +396,10 @@ static void throtl_pd_init(struct blkcg_gq *blkg)
391396
* Limits of a group don't interact with limits of other groups
392397
* regardless of the position of the group in the hierarchy.
393398
*/
394-
parent_sq = &td->service_queue;
395-
399+
sq->parent_sq = &td->service_queue;
396400
if (cgroup_on_dfl(blkg->blkcg->css.cgroup) && blkg->parent)
397-
parent_sq = &blkg_to_tg(blkg->parent)->service_queue;
398-
399-
throtl_service_queue_init(&tg->service_queue, parent_sq);
400-
401-
for (rw = READ; rw <= WRITE; rw++) {
402-
throtl_qnode_init(&tg->qnode_on_self[rw], tg);
403-
throtl_qnode_init(&tg->qnode_on_parent[rw], tg);
404-
}
405-
406-
RB_CLEAR_NODE(&tg->rb_node);
401+
sq->parent_sq = &blkg_to_tg(blkg->parent)->service_queue;
407402
tg->td = td;
408-
409-
tg->bps[READ] = -1;
410-
tg->bps[WRITE] = -1;
411-
tg->iops[READ] = -1;
412-
tg->iops[WRITE] = -1;
413403
}
414404

415405
/*
@@ -436,17 +426,11 @@ static void throtl_pd_online(struct blkcg_gq *blkg)
436426
tg_update_has_rules(blkg_to_tg(blkg));
437427
}
438428

439-
static void throtl_pd_exit(struct blkcg_gq *blkg)
440-
{
441-
struct throtl_grp *tg = blkg_to_tg(blkg);
442-
443-
throtl_service_queue_exit(&tg->service_queue);
444-
}
445-
446429
static void throtl_pd_free(struct blkg_policy_data *pd)
447430
{
448431
struct throtl_grp *tg = pd_to_tg(pd);
449432

433+
del_timer_sync(&tg->service_queue.pending_timer);
450434
free_percpu(tg->stats_cpu);
451435
kfree(tg);
452436
}
@@ -1421,7 +1405,6 @@ static struct blkcg_policy blkcg_policy_throtl = {
14211405
.pd_alloc_fn = throtl_pd_alloc,
14221406
.pd_init_fn = throtl_pd_init,
14231407
.pd_online_fn = throtl_pd_online,
1424-
.pd_exit_fn = throtl_pd_exit,
14251408
.pd_free_fn = throtl_pd_free,
14261409
.pd_reset_stats_fn = throtl_pd_reset_stats,
14271410
};
@@ -1616,7 +1599,7 @@ int blk_throtl_init(struct request_queue *q)
16161599
return -ENOMEM;
16171600

16181601
INIT_WORK(&td->dispatch_work, blk_throtl_dispatch_work_fn);
1619-
throtl_service_queue_init(&td->service_queue, NULL);
1602+
throtl_service_queue_init(&td->service_queue);
16201603

16211604
q->td = td;
16221605
td->queue = q;

block/cfq-iosched.c

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1584,19 +1584,26 @@ static void cfq_cpd_init(const struct blkcg *blkcg)
15841584

15851585
static struct blkg_policy_data *cfq_pd_alloc(gfp_t gfp, int node)
15861586
{
1587-
return kzalloc_node(sizeof(struct cfq_group), gfp, node);
1587+
struct cfq_group *cfqg;
1588+
1589+
cfqg = kzalloc_node(sizeof(*cfqg), gfp, node);
1590+
if (!cfqg)
1591+
return NULL;
1592+
1593+
cfq_init_cfqg_base(cfqg);
1594+
cfqg_stats_init(&cfqg->stats);
1595+
cfqg_stats_init(&cfqg->dead_stats);
1596+
1597+
return &cfqg->pd;
15881598
}
15891599

15901600
static void cfq_pd_init(struct blkcg_gq *blkg)
15911601
{
15921602
struct cfq_group *cfqg = blkg_to_cfqg(blkg);
15931603
struct cfq_group_data *cgd = blkcg_to_cfqgd(blkg->blkcg);
15941604

1595-
cfq_init_cfqg_base(cfqg);
15961605
cfqg->weight = cgd->weight;
15971606
cfqg->leaf_weight = cgd->leaf_weight;
1598-
cfqg_stats_init(&cfqg->stats);
1599-
cfqg_stats_init(&cfqg->dead_stats);
16001607
}
16011608

16021609
static void cfq_pd_offline(struct blkcg_gq *blkg)

include/linux/blk-cgroup.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,6 @@ typedef struct blkg_policy_data *(blkcg_pol_alloc_pd_fn)(gfp_t gfp, int node);
128128
typedef void (blkcg_pol_init_pd_fn)(struct blkcg_gq *blkg);
129129
typedef void (blkcg_pol_online_pd_fn)(struct blkcg_gq *blkg);
130130
typedef void (blkcg_pol_offline_pd_fn)(struct blkcg_gq *blkg);
131-
typedef void (blkcg_pol_exit_pd_fn)(struct blkcg_gq *blkg);
132131
typedef void (blkcg_pol_free_pd_fn)(struct blkg_policy_data *pd);
133132
typedef void (blkcg_pol_reset_pd_stats_fn)(struct blkcg_gq *blkg);
134133

@@ -145,7 +144,6 @@ struct blkcg_policy {
145144
blkcg_pol_init_pd_fn *pd_init_fn;
146145
blkcg_pol_online_pd_fn *pd_online_fn;
147146
blkcg_pol_offline_pd_fn *pd_offline_fn;
148-
blkcg_pol_exit_pd_fn *pd_exit_fn;
149147
blkcg_pol_free_pd_fn *pd_free_fn;
150148
blkcg_pol_reset_pd_stats_fn *pd_reset_stats_fn;
151149
};

0 commit comments

Comments
 (0)