Commit 29b125892f3317ada86b662e0b6ebc0f79be9037

Authored by Vivek Goyal
Committed by Jens Axboe
1 parent f469a7b4d5

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 }