Commit 29b125892f3317ada86b662e0b6ebc0f79be9037
Committed by
Jens Axboe
1 parent
f469a7b4d5
Exists in
master
and in
7 other branches
blk-throttle: Dynamically allocate root group
Currently, we allocate root throtl_grp statically. But as we will be introducing per cpu stat pointers and that will be allocated dynamically even for root group, we might as well make whole root throtl_grp allocation dynamic and treat it in same manner as other groups. Signed-off-by: Vivek Goyal <vgoyal@redhat.com> Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
Showing 1 changed file with 12 additions and 15 deletions Side-by-side Diff
block/blk-throttle.c
... | ... | @@ -88,7 +88,7 @@ |
88 | 88 | /* service tree for active throtl groups */ |
89 | 89 | struct throtl_rb_root tg_service_tree; |
90 | 90 | |
91 | - struct throtl_grp root_tg; | |
91 | + struct throtl_grp *root_tg; | |
92 | 92 | struct request_queue *queue; |
93 | 93 | |
94 | 94 | /* Total Number of queued bios on READ and WRITE lists */ |
... | ... | @@ -233,7 +233,7 @@ |
233 | 233 | * Avoid lookup in this case |
234 | 234 | */ |
235 | 235 | if (blkcg == &blkio_root_cgroup) |
236 | - tg = &td->root_tg; | |
236 | + tg = td->root_tg; | |
237 | 237 | else |
238 | 238 | tg = tg_of_blkg(blkiocg_lookup_group(blkcg, key)); |
239 | 239 | |
... | ... | @@ -313,7 +313,7 @@ |
313 | 313 | |
314 | 314 | /* Group allocation failed. Account the IO to root group */ |
315 | 315 | if (!tg) { |
316 | - tg = &td->root_tg; | |
316 | + tg = td->root_tg; | |
317 | 317 | return tg; |
318 | 318 | } |
319 | 319 | |
320 | 320 | |
321 | 321 | |
... | ... | @@ -1153,19 +1153,17 @@ |
1153 | 1153 | td->limits_changed = false; |
1154 | 1154 | INIT_DELAYED_WORK(&td->throtl_work, blk_throtl_work); |
1155 | 1155 | |
1156 | - /* Init root group */ | |
1157 | - tg = &td->root_tg; | |
1158 | - throtl_init_group(tg); | |
1156 | + /* alloc and Init root group. */ | |
1157 | + td->queue = q; | |
1158 | + tg = throtl_alloc_tg(td); | |
1159 | 1159 | |
1160 | - /* | |
1161 | - * Set root group reference to 2. One reference will be dropped when | |
1162 | - * all groups on tg_list are being deleted during queue exit. Other | |
1163 | - * reference will remain there as we don't want to delete this group | |
1164 | - * as it is statically allocated and gets destroyed when throtl_data | |
1165 | - * goes away. | |
1166 | - */ | |
1167 | - atomic_inc(&tg->ref); | |
1160 | + if (!tg) { | |
1161 | + kfree(td); | |
1162 | + return -ENOMEM; | |
1163 | + } | |
1168 | 1164 | |
1165 | + td->root_tg = tg; | |
1166 | + | |
1169 | 1167 | rcu_read_lock(); |
1170 | 1168 | blkiocg_add_blkio_group(&blkio_root_cgroup, &tg->blkg, (void *)td, |
1171 | 1169 | 0, BLKIO_POLICY_THROTL); |
... | ... | @@ -1173,7 +1171,6 @@ |
1173 | 1171 | throtl_add_group_to_td_list(td, tg); |
1174 | 1172 | |
1175 | 1173 | /* Attach throtl data to request queue */ |
1176 | - td->queue = q; | |
1177 | 1174 | q->td = td; |
1178 | 1175 | return 0; |
1179 | 1176 | } |