1 /* 2 * Common Block IO controller cgroup interface 3 * 4 * Based on ideas and code from CFQ, CFS and BFQ: 5 * Copyright (C) 2003 Jens Axboe <axboe@kernel.dk> 6 * 7 * Copyright (C) 2008 Fabio Checconi <fabio@gandalf.sssup.it> 8 * Paolo Valente <paolo.valente@unimore.it> 9 * 10 * Copyright (C) 2009 Vivek Goyal <vgoyal@redhat.com> 11 * Nauman Rafique <nauman@google.com> 12 * 13 * For policy-specific per-blkcg data: 14 * Copyright (C) 2015 Paolo Valente <paolo.valente@unimore.it> 15 * Arianna Avanzini <avanzini.arianna@gmail.com> 16 */ 17 #include <linux/ioprio.h> 18 #include <linux/kdev_t.h> 19 #include <linux/module.h> 20 #include <linux/sched/signal.h> 21 #include <linux/err.h> 22 #include <linux/blkdev.h> 23 #include <linux/backing-dev.h> 24 #include <linux/slab.h> 25 #include <linux/genhd.h> 26 #include <linux/delay.h> 27 #include <linux/atomic.h> 28 #include <linux/ctype.h> 29 #include <linux/blk-cgroup.h> 30 #include "blk.h" 31 32 #define MAX_KEY_LEN 100 33 34 /* 35 * blkcg_pol_mutex protects blkcg_policy[] and policy [de]activation. 36 * blkcg_pol_register_mutex nests outside of it and synchronizes entire 37 * policy [un]register operations including cgroup file additions / 38 * removals. Putting cgroup file registration outside blkcg_pol_mutex 39 * allows grabbing it from cgroup callbacks. 40 */ 41 static DEFINE_MUTEX(blkcg_pol_register_mutex); 42 static DEFINE_MUTEX(blkcg_pol_mutex); 43 44 struct blkcg blkcg_root; 45 EXPORT_SYMBOL_GPL(blkcg_root); 46 47 struct cgroup_subsys_state * const blkcg_root_css = &blkcg_root.css; 48 49 static struct blkcg_policy *blkcg_policy[BLKCG_MAX_POLS]; 50 51 static LIST_HEAD(all_blkcgs); /* protected by blkcg_pol_mutex */ 52 53 static bool blkcg_policy_enabled(struct request_queue *q, 54 const struct blkcg_policy *pol) 55 { 56 return pol && test_bit(pol->plid, q->blkcg_pols); 57 } 58 59 /** 60 * blkg_free - free a blkg 61 * @blkg: blkg to free 62 * 63 * Free @blkg which may be partially allocated. 64 */ 65 static void blkg_free(struct blkcg_gq *blkg) 66 { 67 int i; 68 69 if (!blkg) 70 return; 71 72 for (i = 0; i < BLKCG_MAX_POLS; i++) 73 if (blkg->pd[i]) 74 blkcg_policy[i]->pd_free_fn(blkg->pd[i]); 75 76 if (blkg->blkcg != &blkcg_root) 77 blk_exit_rl(blkg->q, &blkg->rl); 78 79 blkg_rwstat_exit(&blkg->stat_ios); 80 blkg_rwstat_exit(&blkg->stat_bytes); 81 kfree(blkg); 82 } 83 84 /** 85 * blkg_alloc - allocate a blkg 86 * @blkcg: block cgroup the new blkg is associated with 87 * @q: request_queue the new blkg is associated with 88 * @gfp_mask: allocation mask to use 89 * 90 * Allocate a new blkg assocating @blkcg and @q. 91 */ 92 static struct blkcg_gq *blkg_alloc(struct blkcg *blkcg, struct request_queue *q, 93 gfp_t gfp_mask) 94 { 95 struct blkcg_gq *blkg; 96 int i; 97 98 /* alloc and init base part */ 99 blkg = kzalloc_node(sizeof(*blkg), gfp_mask, q->node); 100 if (!blkg) 101 return NULL; 102 103 if (blkg_rwstat_init(&blkg->stat_bytes, gfp_mask) || 104 blkg_rwstat_init(&blkg->stat_ios, gfp_mask)) 105 goto err_free; 106 107 blkg->q = q; 108 INIT_LIST_HEAD(&blkg->q_node); 109 blkg->blkcg = blkcg; 110 atomic_set(&blkg->refcnt, 1); 111 112 /* root blkg uses @q->root_rl, init rl only for !root blkgs */ 113 if (blkcg != &blkcg_root) { 114 if (blk_init_rl(&blkg->rl, q, gfp_mask)) 115 goto err_free; 116 blkg->rl.blkg = blkg; 117 } 118 119 for (i = 0; i < BLKCG_MAX_POLS; i++) { 120 struct blkcg_policy *pol = blkcg_policy[i]; 121 struct blkg_policy_data *pd; 122 123 if (!blkcg_policy_enabled(q, pol)) 124 continue; 125 126 /* alloc per-policy data and attach it to blkg */ 127 pd = pol->pd_alloc_fn(gfp_mask, q->node); 128 if (!pd) 129 goto err_free; 130 131 blkg->pd[i] = pd; 132 pd->blkg = blkg; 133 pd->plid = i; 134 } 135 136 return blkg; 137 138 err_free: 139 blkg_free(blkg); 140 return NULL; 141 } 142 143 struct blkcg_gq *blkg_lookup_slowpath(struct blkcg *blkcg, 144 struct request_queue *q, bool update_hint) 145 { 146 struct blkcg_gq *blkg; 147 148 /* 149 * Hint didn't match. Look up from the radix tree. Note that the 150 * hint can only be updated under queue_lock as otherwise @blkg 151 * could have already been removed from blkg_tree. The caller is 152 * responsible for grabbing queue_lock if @update_hint. 153 */ 154 blkg = radix_tree_lookup(&blkcg->blkg_tree, q->id); 155 if (blkg && blkg->q == q) { 156 if (update_hint) { 157 lockdep_assert_held(q->queue_lock); 158 rcu_assign_pointer(blkcg->blkg_hint, blkg); 159 } 160 return blkg; 161 } 162 163 return NULL; 164 } 165 EXPORT_SYMBOL_GPL(blkg_lookup_slowpath); 166 167 /* 168 * If @new_blkg is %NULL, this function tries to allocate a new one as 169 * necessary using %GFP_NOWAIT. @new_blkg is always consumed on return. 170 */ 171 static struct blkcg_gq *blkg_create(struct blkcg *blkcg, 172 struct request_queue *q, 173 struct blkcg_gq *new_blkg) 174 { 175 struct blkcg_gq *blkg; 176 struct bdi_writeback_congested *wb_congested; 177 int i, ret; 178 179 WARN_ON_ONCE(!rcu_read_lock_held()); 180 lockdep_assert_held(q->queue_lock); 181 182 /* blkg holds a reference to blkcg */ 183 if (!css_tryget_online(&blkcg->css)) { 184 ret = -ENODEV; 185 goto err_free_blkg; 186 } 187 188 wb_congested = wb_congested_get_create(q->backing_dev_info, 189 blkcg->css.id, 190 GFP_NOWAIT | __GFP_NOWARN); 191 if (!wb_congested) { 192 ret = -ENOMEM; 193 goto err_put_css; 194 } 195 196 /* allocate */ 197 if (!new_blkg) { 198 new_blkg = blkg_alloc(blkcg, q, GFP_NOWAIT | __GFP_NOWARN); 199 if (unlikely(!new_blkg)) { 200 ret = -ENOMEM; 201 goto err_put_congested; 202 } 203 } 204 blkg = new_blkg; 205 blkg->wb_congested = wb_congested; 206 207 /* link parent */ 208 if (blkcg_parent(blkcg)) { 209 blkg->parent = __blkg_lookup(blkcg_parent(blkcg), q, false); 210 if (WARN_ON_ONCE(!blkg->parent)) { 211 ret = -ENODEV; 212 goto err_put_congested; 213 } 214 blkg_get(blkg->parent); 215 } 216 217 /* invoke per-policy init */ 218 for (i = 0; i < BLKCG_MAX_POLS; i++) { 219 struct blkcg_policy *pol = blkcg_policy[i]; 220 221 if (blkg->pd[i] && pol->pd_init_fn) 222 pol->pd_init_fn(blkg->pd[i]); 223 } 224 225 /* insert */ 226 spin_lock(&blkcg->lock); 227 ret = radix_tree_insert(&blkcg->blkg_tree, q->id, blkg); 228 if (likely(!ret)) { 229 hlist_add_head_rcu(&blkg->blkcg_node, &blkcg->blkg_list); 230 list_add(&blkg->q_node, &q->blkg_list); 231 232 for (i = 0; i < BLKCG_MAX_POLS; i++) { 233 struct blkcg_policy *pol = blkcg_policy[i]; 234 235 if (blkg->pd[i] && pol->pd_online_fn) 236 pol->pd_online_fn(blkg->pd[i]); 237 } 238 } 239 blkg->online = true; 240 spin_unlock(&blkcg->lock); 241 242 if (!ret) 243 return blkg; 244 245 /* @blkg failed fully initialized, use the usual release path */ 246 blkg_put(blkg); 247 return ERR_PTR(ret); 248 249 err_put_congested: 250 wb_congested_put(wb_congested); 251 err_put_css: 252 css_put(&blkcg->css); 253 err_free_blkg: 254 blkg_free(new_blkg); 255 return ERR_PTR(ret); 256 } 257 258 /** 259 * blkg_lookup_create - lookup blkg, try to create one if not there 260 * @blkcg: blkcg of interest 261 * @q: request_queue of interest 262 * 263 * Lookup blkg for the @blkcg - @q pair. If it doesn't exist, try to 264 * create one. blkg creation is performed recursively from blkcg_root such 265 * that all non-root blkg's have access to the parent blkg. This function 266 * should be called under RCU read lock and @q->queue_lock. 267 * 268 * Returns pointer to the looked up or created blkg on success, ERR_PTR() 269 * value on error. If @q is dead, returns ERR_PTR(-EINVAL). If @q is not 270 * dead and bypassing, returns ERR_PTR(-EBUSY). 271 */ 272 struct blkcg_gq *blkg_lookup_create(struct blkcg *blkcg, 273 struct request_queue *q) 274 { 275 struct blkcg_gq *blkg; 276 277 WARN_ON_ONCE(!rcu_read_lock_held()); 278 lockdep_assert_held(q->queue_lock); 279 280 /* 281 * This could be the first entry point of blkcg implementation and 282 * we shouldn't allow anything to go through for a bypassing queue. 283 */ 284 if (unlikely(blk_queue_bypass(q))) 285 return ERR_PTR(blk_queue_dying(q) ? -ENODEV : -EBUSY); 286 287 blkg = __blkg_lookup(blkcg, q, true); 288 if (blkg) 289 return blkg; 290 291 /* 292 * Create blkgs walking down from blkcg_root to @blkcg, so that all 293 * non-root blkgs have access to their parents. 294 */ 295 while (true) { 296 struct blkcg *pos = blkcg; 297 struct blkcg *parent = blkcg_parent(blkcg); 298 299 while (parent && !__blkg_lookup(parent, q, false)) { 300 pos = parent; 301 parent = blkcg_parent(parent); 302 } 303 304 blkg = blkg_create(pos, q, NULL); 305 if (pos == blkcg || IS_ERR(blkg)) 306 return blkg; 307 } 308 } 309 310 static void blkg_destroy(struct blkcg_gq *blkg) 311 { 312 struct blkcg *blkcg = blkg->blkcg; 313 struct blkcg_gq *parent = blkg->parent; 314 int i; 315 316 lockdep_assert_held(blkg->q->queue_lock); 317 lockdep_assert_held(&blkcg->lock); 318 319 /* Something wrong if we are trying to remove same group twice */ 320 WARN_ON_ONCE(list_empty(&blkg->q_node)); 321 WARN_ON_ONCE(hlist_unhashed(&blkg->blkcg_node)); 322 323 for (i = 0; i < BLKCG_MAX_POLS; i++) { 324 struct blkcg_policy *pol = blkcg_policy[i]; 325 326 if (blkg->pd[i] && pol->pd_offline_fn) 327 pol->pd_offline_fn(blkg->pd[i]); 328 } 329 330 if (parent) { 331 blkg_rwstat_add_aux(&parent->stat_bytes, &blkg->stat_bytes); 332 blkg_rwstat_add_aux(&parent->stat_ios, &blkg->stat_ios); 333 } 334 335 blkg->online = false; 336 337 radix_tree_delete(&blkcg->blkg_tree, blkg->q->id); 338 list_del_init(&blkg->q_node); 339 hlist_del_init_rcu(&blkg->blkcg_node); 340 341 /* 342 * Both setting lookup hint to and clearing it from @blkg are done 343 * under queue_lock. If it's not pointing to @blkg now, it never 344 * will. Hint assignment itself can race safely. 345 */ 346 if (rcu_access_pointer(blkcg->blkg_hint) == blkg) 347 rcu_assign_pointer(blkcg->blkg_hint, NULL); 348 349 /* 350 * Put the reference taken at the time of creation so that when all 351 * queues are gone, group can be destroyed. 352 */ 353 blkg_put(blkg); 354 } 355 356 /** 357 * blkg_destroy_all - destroy all blkgs associated with a request_queue 358 * @q: request_queue of interest 359 * 360 * Destroy all blkgs associated with @q. 361 */ 362 static void blkg_destroy_all(struct request_queue *q) 363 { 364 struct blkcg_gq *blkg, *n; 365 366 lockdep_assert_held(q->queue_lock); 367 368 list_for_each_entry_safe(blkg, n, &q->blkg_list, q_node) { 369 struct blkcg *blkcg = blkg->blkcg; 370 371 spin_lock(&blkcg->lock); 372 blkg_destroy(blkg); 373 spin_unlock(&blkcg->lock); 374 } 375 376 q->root_blkg = NULL; 377 q->root_rl.blkg = NULL; 378 } 379 380 /* 381 * A group is RCU protected, but having an rcu lock does not mean that one 382 * can access all the fields of blkg and assume these are valid. For 383 * example, don't try to follow throtl_data and request queue links. 384 * 385 * Having a reference to blkg under an rcu allows accesses to only values 386 * local to groups like group stats and group rate limits. 387 */ 388 void __blkg_release_rcu(struct rcu_head *rcu_head) 389 { 390 struct blkcg_gq *blkg = container_of(rcu_head, struct blkcg_gq, rcu_head); 391 392 /* release the blkcg and parent blkg refs this blkg has been holding */ 393 css_put(&blkg->blkcg->css); 394 if (blkg->parent) 395 blkg_put(blkg->parent); 396 397 wb_congested_put(blkg->wb_congested); 398 399 blkg_free(blkg); 400 } 401 EXPORT_SYMBOL_GPL(__blkg_release_rcu); 402 403 /* 404 * The next function used by blk_queue_for_each_rl(). It's a bit tricky 405 * because the root blkg uses @q->root_rl instead of its own rl. 406 */ 407 struct request_list *__blk_queue_next_rl(struct request_list *rl, 408 struct request_queue *q) 409 { 410 struct list_head *ent; 411 struct blkcg_gq *blkg; 412 413 /* 414 * Determine the current blkg list_head. The first entry is 415 * root_rl which is off @q->blkg_list and mapped to the head. 416 */ 417 if (rl == &q->root_rl) { 418 ent = &q->blkg_list; 419 /* There are no more block groups, hence no request lists */ 420 if (list_empty(ent)) 421 return NULL; 422 } else { 423 blkg = container_of(rl, struct blkcg_gq, rl); 424 ent = &blkg->q_node; 425 } 426 427 /* walk to the next list_head, skip root blkcg */ 428 ent = ent->next; 429 if (ent == &q->root_blkg->q_node) 430 ent = ent->next; 431 if (ent == &q->blkg_list) 432 return NULL; 433 434 blkg = container_of(ent, struct blkcg_gq, q_node); 435 return &blkg->rl; 436 } 437 438 static int blkcg_reset_stats(struct cgroup_subsys_state *css, 439 struct cftype *cftype, u64 val) 440 { 441 struct blkcg *blkcg = css_to_blkcg(css); 442 struct blkcg_gq *blkg; 443 int i; 444 445 mutex_lock(&blkcg_pol_mutex); 446 spin_lock_irq(&blkcg->lock); 447 448 /* 449 * Note that stat reset is racy - it doesn't synchronize against 450 * stat updates. This is a debug feature which shouldn't exist 451 * anyway. If you get hit by a race, retry. 452 */ 453 hlist_for_each_entry(blkg, &blkcg->blkg_list, blkcg_node) { 454 blkg_rwstat_reset(&blkg->stat_bytes); 455 blkg_rwstat_reset(&blkg->stat_ios); 456 457 for (i = 0; i < BLKCG_MAX_POLS; i++) { 458 struct blkcg_policy *pol = blkcg_policy[i]; 459 460 if (blkg->pd[i] && pol->pd_reset_stats_fn) 461 pol->pd_reset_stats_fn(blkg->pd[i]); 462 } 463 } 464 465 spin_unlock_irq(&blkcg->lock); 466 mutex_unlock(&blkcg_pol_mutex); 467 return 0; 468 } 469 470 const char *blkg_dev_name(struct blkcg_gq *blkg) 471 { 472 /* some drivers (floppy) instantiate a queue w/o disk registered */ 473 if (blkg->q->backing_dev_info->dev) 474 return dev_name(blkg->q->backing_dev_info->dev); 475 return NULL; 476 } 477 EXPORT_SYMBOL_GPL(blkg_dev_name); 478 479 /** 480 * blkcg_print_blkgs - helper for printing per-blkg data 481 * @sf: seq_file to print to 482 * @blkcg: blkcg of interest 483 * @prfill: fill function to print out a blkg 484 * @pol: policy in question 485 * @data: data to be passed to @prfill 486 * @show_total: to print out sum of prfill return values or not 487 * 488 * This function invokes @prfill on each blkg of @blkcg if pd for the 489 * policy specified by @pol exists. @prfill is invoked with @sf, the 490 * policy data and @data and the matching queue lock held. If @show_total 491 * is %true, the sum of the return values from @prfill is printed with 492 * "Total" label at the end. 493 * 494 * This is to be used to construct print functions for 495 * cftype->read_seq_string method. 496 */ 497 void blkcg_print_blkgs(struct seq_file *sf, struct blkcg *blkcg, 498 u64 (*prfill)(struct seq_file *, 499 struct blkg_policy_data *, int), 500 const struct blkcg_policy *pol, int data, 501 bool show_total) 502 { 503 struct blkcg_gq *blkg; 504 u64 total = 0; 505 506 rcu_read_lock(); 507 hlist_for_each_entry_rcu(blkg, &blkcg->blkg_list, blkcg_node) { 508 spin_lock_irq(blkg->q->queue_lock); 509 if (blkcg_policy_enabled(blkg->q, pol)) 510 total += prfill(sf, blkg->pd[pol->plid], data); 511 spin_unlock_irq(blkg->q->queue_lock); 512 } 513 rcu_read_unlock(); 514 515 if (show_total) 516 seq_printf(sf, "Total %llu\n", (unsigned long long)total); 517 } 518 EXPORT_SYMBOL_GPL(blkcg_print_blkgs); 519 520 /** 521 * __blkg_prfill_u64 - prfill helper for a single u64 value 522 * @sf: seq_file to print to 523 * @pd: policy private data of interest 524 * @v: value to print 525 * 526 * Print @v to @sf for the device assocaited with @pd. 527 */ 528 u64 __blkg_prfill_u64(struct seq_file *sf, struct blkg_policy_data *pd, u64 v) 529 { 530 const char *dname = blkg_dev_name(pd->blkg); 531 532 if (!dname) 533 return 0; 534 535 seq_printf(sf, "%s %llu\n", dname, (unsigned long long)v); 536 return v; 537 } 538 EXPORT_SYMBOL_GPL(__blkg_prfill_u64); 539 540 /** 541 * __blkg_prfill_rwstat - prfill helper for a blkg_rwstat 542 * @sf: seq_file to print to 543 * @pd: policy private data of interest 544 * @rwstat: rwstat to print 545 * 546 * Print @rwstat to @sf for the device assocaited with @pd. 547 */ 548 u64 __blkg_prfill_rwstat(struct seq_file *sf, struct blkg_policy_data *pd, 549 const struct blkg_rwstat *rwstat) 550 { 551 static const char *rwstr[] = { 552 [BLKG_RWSTAT_READ] = "Read", 553 [BLKG_RWSTAT_WRITE] = "Write", 554 [BLKG_RWSTAT_SYNC] = "Sync", 555 [BLKG_RWSTAT_ASYNC] = "Async", 556 }; 557 const char *dname = blkg_dev_name(pd->blkg); 558 u64 v; 559 int i; 560 561 if (!dname) 562 return 0; 563 564 for (i = 0; i < BLKG_RWSTAT_NR; i++) 565 seq_printf(sf, "%s %s %llu\n", dname, rwstr[i], 566 (unsigned long long)atomic64_read(&rwstat->aux_cnt[i])); 567 568 v = atomic64_read(&rwstat->aux_cnt[BLKG_RWSTAT_READ]) + 569 atomic64_read(&rwstat->aux_cnt[BLKG_RWSTAT_WRITE]); 570 seq_printf(sf, "%s Total %llu\n", dname, (unsigned long long)v); 571 return v; 572 } 573 EXPORT_SYMBOL_GPL(__blkg_prfill_rwstat); 574 575 /** 576 * blkg_prfill_stat - prfill callback for blkg_stat 577 * @sf: seq_file to print to 578 * @pd: policy private data of interest 579 * @off: offset to the blkg_stat in @pd 580 * 581 * prfill callback for printing a blkg_stat. 582 */ 583 u64 blkg_prfill_stat(struct seq_file *sf, struct blkg_policy_data *pd, int off) 584 { 585 return __blkg_prfill_u64(sf, pd, blkg_stat_read((void *)pd + off)); 586 } 587 EXPORT_SYMBOL_GPL(blkg_prfill_stat); 588 589 /** 590 * blkg_prfill_rwstat - prfill callback for blkg_rwstat 591 * @sf: seq_file to print to 592 * @pd: policy private data of interest 593 * @off: offset to the blkg_rwstat in @pd 594 * 595 * prfill callback for printing a blkg_rwstat. 596 */ 597 u64 blkg_prfill_rwstat(struct seq_file *sf, struct blkg_policy_data *pd, 598 int off) 599 { 600 struct blkg_rwstat rwstat = blkg_rwstat_read((void *)pd + off); 601 602 return __blkg_prfill_rwstat(sf, pd, &rwstat); 603 } 604 EXPORT_SYMBOL_GPL(blkg_prfill_rwstat); 605 606 static u64 blkg_prfill_rwstat_field(struct seq_file *sf, 607 struct blkg_policy_data *pd, int off) 608 { 609 struct blkg_rwstat rwstat = blkg_rwstat_read((void *)pd->blkg + off); 610 611 return __blkg_prfill_rwstat(sf, pd, &rwstat); 612 } 613 614 /** 615 * blkg_print_stat_bytes - seq_show callback for blkg->stat_bytes 616 * @sf: seq_file to print to 617 * @v: unused 618 * 619 * To be used as cftype->seq_show to print blkg->stat_bytes. 620 * cftype->private must be set to the blkcg_policy. 621 */ 622 int blkg_print_stat_bytes(struct seq_file *sf, void *v) 623 { 624 blkcg_print_blkgs(sf, css_to_blkcg(seq_css(sf)), 625 blkg_prfill_rwstat_field, (void *)seq_cft(sf)->private, 626 offsetof(struct blkcg_gq, stat_bytes), true); 627 return 0; 628 } 629 EXPORT_SYMBOL_GPL(blkg_print_stat_bytes); 630 631 /** 632 * blkg_print_stat_bytes - seq_show callback for blkg->stat_ios 633 * @sf: seq_file to print to 634 * @v: unused 635 * 636 * To be used as cftype->seq_show to print blkg->stat_ios. cftype->private 637 * must be set to the blkcg_policy. 638 */ 639 int blkg_print_stat_ios(struct seq_file *sf, void *v) 640 { 641 blkcg_print_blkgs(sf, css_to_blkcg(seq_css(sf)), 642 blkg_prfill_rwstat_field, (void *)seq_cft(sf)->private, 643 offsetof(struct blkcg_gq, stat_ios), true); 644 return 0; 645 } 646 EXPORT_SYMBOL_GPL(blkg_print_stat_ios); 647 648 static u64 blkg_prfill_rwstat_field_recursive(struct seq_file *sf, 649 struct blkg_policy_data *pd, 650 int off) 651 { 652 struct blkg_rwstat rwstat = blkg_rwstat_recursive_sum(pd->blkg, 653 NULL, off); 654 return __blkg_prfill_rwstat(sf, pd, &rwstat); 655 } 656 657 /** 658 * blkg_print_stat_bytes_recursive - recursive version of blkg_print_stat_bytes 659 * @sf: seq_file to print to 660 * @v: unused 661 */ 662 int blkg_print_stat_bytes_recursive(struct seq_file *sf, void *v) 663 { 664 blkcg_print_blkgs(sf, css_to_blkcg(seq_css(sf)), 665 blkg_prfill_rwstat_field_recursive, 666 (void *)seq_cft(sf)->private, 667 offsetof(struct blkcg_gq, stat_bytes), true); 668 return 0; 669 } 670 EXPORT_SYMBOL_GPL(blkg_print_stat_bytes_recursive); 671 672 /** 673 * blkg_print_stat_ios_recursive - recursive version of blkg_print_stat_ios 674 * @sf: seq_file to print to 675 * @v: unused 676 */ 677 int blkg_print_stat_ios_recursive(struct seq_file *sf, void *v) 678 { 679 blkcg_print_blkgs(sf, css_to_blkcg(seq_css(sf)), 680 blkg_prfill_rwstat_field_recursive, 681 (void *)seq_cft(sf)->private, 682 offsetof(struct blkcg_gq, stat_ios), true); 683 return 0; 684 } 685 EXPORT_SYMBOL_GPL(blkg_print_stat_ios_recursive); 686 687 /** 688 * blkg_stat_recursive_sum - collect hierarchical blkg_stat 689 * @blkg: blkg of interest 690 * @pol: blkcg_policy which contains the blkg_stat 691 * @off: offset to the blkg_stat in blkg_policy_data or @blkg 692 * 693 * Collect the blkg_stat specified by @blkg, @pol and @off and all its 694 * online descendants and their aux counts. The caller must be holding the 695 * queue lock for online tests. 696 * 697 * If @pol is NULL, blkg_stat is at @off bytes into @blkg; otherwise, it is 698 * at @off bytes into @blkg's blkg_policy_data of the policy. 699 */ 700 u64 blkg_stat_recursive_sum(struct blkcg_gq *blkg, 701 struct blkcg_policy *pol, int off) 702 { 703 struct blkcg_gq *pos_blkg; 704 struct cgroup_subsys_state *pos_css; 705 u64 sum = 0; 706 707 lockdep_assert_held(blkg->q->queue_lock); 708 709 rcu_read_lock(); 710 blkg_for_each_descendant_pre(pos_blkg, pos_css, blkg) { 711 struct blkg_stat *stat; 712 713 if (!pos_blkg->online) 714 continue; 715 716 if (pol) 717 stat = (void *)blkg_to_pd(pos_blkg, pol) + off; 718 else 719 stat = (void *)blkg + off; 720 721 sum += blkg_stat_read(stat) + atomic64_read(&stat->aux_cnt); 722 } 723 rcu_read_unlock(); 724 725 return sum; 726 } 727 EXPORT_SYMBOL_GPL(blkg_stat_recursive_sum); 728 729 /** 730 * blkg_rwstat_recursive_sum - collect hierarchical blkg_rwstat 731 * @blkg: blkg of interest 732 * @pol: blkcg_policy which contains the blkg_rwstat 733 * @off: offset to the blkg_rwstat in blkg_policy_data or @blkg 734 * 735 * Collect the blkg_rwstat specified by @blkg, @pol and @off and all its 736 * online descendants and their aux counts. The caller must be holding the 737 * queue lock for online tests. 738 * 739 * If @pol is NULL, blkg_rwstat is at @off bytes into @blkg; otherwise, it 740 * is at @off bytes into @blkg's blkg_policy_data of the policy. 741 */ 742 struct blkg_rwstat blkg_rwstat_recursive_sum(struct blkcg_gq *blkg, 743 struct blkcg_policy *pol, int off) 744 { 745 struct blkcg_gq *pos_blkg; 746 struct cgroup_subsys_state *pos_css; 747 struct blkg_rwstat sum = { }; 748 int i; 749 750 lockdep_assert_held(blkg->q->queue_lock); 751 752 rcu_read_lock(); 753 blkg_for_each_descendant_pre(pos_blkg, pos_css, blkg) { 754 struct blkg_rwstat *rwstat; 755 756 if (!pos_blkg->online) 757 continue; 758 759 if (pol) 760 rwstat = (void *)blkg_to_pd(pos_blkg, pol) + off; 761 else 762 rwstat = (void *)pos_blkg + off; 763 764 for (i = 0; i < BLKG_RWSTAT_NR; i++) 765 atomic64_add(atomic64_read(&rwstat->aux_cnt[i]) + 766 percpu_counter_sum_positive(&rwstat->cpu_cnt[i]), 767 &sum.aux_cnt[i]); 768 } 769 rcu_read_unlock(); 770 771 return sum; 772 } 773 EXPORT_SYMBOL_GPL(blkg_rwstat_recursive_sum); 774 775 /* Performs queue bypass and policy enabled checks then looks up blkg. */ 776 static struct blkcg_gq *blkg_lookup_check(struct blkcg *blkcg, 777 const struct blkcg_policy *pol, 778 struct request_queue *q) 779 { 780 WARN_ON_ONCE(!rcu_read_lock_held()); 781 lockdep_assert_held(q->queue_lock); 782 783 if (!blkcg_policy_enabled(q, pol)) 784 return ERR_PTR(-EOPNOTSUPP); 785 786 /* 787 * This could be the first entry point of blkcg implementation and 788 * we shouldn't allow anything to go through for a bypassing queue. 789 */ 790 if (unlikely(blk_queue_bypass(q))) 791 return ERR_PTR(blk_queue_dying(q) ? -ENODEV : -EBUSY); 792 793 return __blkg_lookup(blkcg, q, true /* update_hint */); 794 } 795 796 /** 797 * blkg_conf_prep - parse and prepare for per-blkg config update 798 * @blkcg: target block cgroup 799 * @pol: target policy 800 * @input: input string 801 * @ctx: blkg_conf_ctx to be filled 802 * 803 * Parse per-blkg config update from @input and initialize @ctx with the 804 * result. @ctx->blkg points to the blkg to be updated and @ctx->body the 805 * part of @input following MAJ:MIN. This function returns with RCU read 806 * lock and queue lock held and must be paired with blkg_conf_finish(). 807 */ 808 int blkg_conf_prep(struct blkcg *blkcg, const struct blkcg_policy *pol, 809 char *input, struct blkg_conf_ctx *ctx) 810 __acquires(rcu) __acquires(disk->queue->queue_lock) 811 { 812 struct gendisk *disk; 813 struct request_queue *q; 814 struct blkcg_gq *blkg; 815 struct module *owner; 816 unsigned int major, minor; 817 int key_len, part, ret; 818 char *body; 819 820 if (sscanf(input, "%u:%u%n", &major, &minor, &key_len) != 2) 821 return -EINVAL; 822 823 body = input + key_len; 824 if (!isspace(*body)) 825 return -EINVAL; 826 body = skip_spaces(body); 827 828 disk = get_gendisk(MKDEV(major, minor), &part); 829 if (!disk) 830 return -ENODEV; 831 if (part) { 832 ret = -ENODEV; 833 goto fail; 834 } 835 836 q = disk->queue; 837 838 rcu_read_lock(); 839 spin_lock_irq(q->queue_lock); 840 841 blkg = blkg_lookup_check(blkcg, pol, q); 842 if (IS_ERR(blkg)) { 843 ret = PTR_ERR(blkg); 844 goto fail_unlock; 845 } 846 847 if (blkg) 848 goto success; 849 850 /* 851 * Create blkgs walking down from blkcg_root to @blkcg, so that all 852 * non-root blkgs have access to their parents. 853 */ 854 while (true) { 855 struct blkcg *pos = blkcg; 856 struct blkcg *parent; 857 struct blkcg_gq *new_blkg; 858 859 parent = blkcg_parent(blkcg); 860 while (parent && !__blkg_lookup(parent, q, false)) { 861 pos = parent; 862 parent = blkcg_parent(parent); 863 } 864 865 /* Drop locks to do new blkg allocation with GFP_KERNEL. */ 866 spin_unlock_irq(q->queue_lock); 867 rcu_read_unlock(); 868 869 new_blkg = blkg_alloc(pos, q, GFP_KERNEL); 870 if (unlikely(!new_blkg)) { 871 ret = -ENOMEM; 872 goto fail; 873 } 874 875 rcu_read_lock(); 876 spin_lock_irq(q->queue_lock); 877 878 blkg = blkg_lookup_check(pos, pol, q); 879 if (IS_ERR(blkg)) { 880 ret = PTR_ERR(blkg); 881 goto fail_unlock; 882 } 883 884 if (blkg) { 885 blkg_free(new_blkg); 886 } else { 887 blkg = blkg_create(pos, q, new_blkg); 888 if (unlikely(IS_ERR(blkg))) { 889 ret = PTR_ERR(blkg); 890 goto fail_unlock; 891 } 892 } 893 894 if (pos == blkcg) 895 goto success; 896 } 897 success: 898 ctx->disk = disk; 899 ctx->blkg = blkg; 900 ctx->body = body; 901 return 0; 902 903 fail_unlock: 904 spin_unlock_irq(q->queue_lock); 905 rcu_read_unlock(); 906 fail: 907 owner = disk->fops->owner; 908 put_disk(disk); 909 module_put(owner); 910 /* 911 * If queue was bypassing, we should retry. Do so after a 912 * short msleep(). It isn't strictly necessary but queue 913 * can be bypassing for some time and it's always nice to 914 * avoid busy looping. 915 */ 916 if (ret == -EBUSY) { 917 msleep(10); 918 ret = restart_syscall(); 919 } 920 return ret; 921 } 922 EXPORT_SYMBOL_GPL(blkg_conf_prep); 923 924 /** 925 * blkg_conf_finish - finish up per-blkg config update 926 * @ctx: blkg_conf_ctx intiailized by blkg_conf_prep() 927 * 928 * Finish up after per-blkg config update. This function must be paired 929 * with blkg_conf_prep(). 930 */ 931 void blkg_conf_finish(struct blkg_conf_ctx *ctx) 932 __releases(ctx->disk->queue->queue_lock) __releases(rcu) 933 { 934 struct module *owner; 935 936 spin_unlock_irq(ctx->disk->queue->queue_lock); 937 rcu_read_unlock(); 938 owner = ctx->disk->fops->owner; 939 put_disk(ctx->disk); 940 module_put(owner); 941 } 942 EXPORT_SYMBOL_GPL(blkg_conf_finish); 943 944 static int blkcg_print_stat(struct seq_file *sf, void *v) 945 { 946 struct blkcg *blkcg = css_to_blkcg(seq_css(sf)); 947 struct blkcg_gq *blkg; 948 949 rcu_read_lock(); 950 951 hlist_for_each_entry_rcu(blkg, &blkcg->blkg_list, blkcg_node) { 952 const char *dname; 953 struct blkg_rwstat rwstat; 954 u64 rbytes, wbytes, rios, wios; 955 956 dname = blkg_dev_name(blkg); 957 if (!dname) 958 continue; 959 960 spin_lock_irq(blkg->q->queue_lock); 961 962 rwstat = blkg_rwstat_recursive_sum(blkg, NULL, 963 offsetof(struct blkcg_gq, stat_bytes)); 964 rbytes = atomic64_read(&rwstat.aux_cnt[BLKG_RWSTAT_READ]); 965 wbytes = atomic64_read(&rwstat.aux_cnt[BLKG_RWSTAT_WRITE]); 966 967 rwstat = blkg_rwstat_recursive_sum(blkg, NULL, 968 offsetof(struct blkcg_gq, stat_ios)); 969 rios = atomic64_read(&rwstat.aux_cnt[BLKG_RWSTAT_READ]); 970 wios = atomic64_read(&rwstat.aux_cnt[BLKG_RWSTAT_WRITE]); 971 972 spin_unlock_irq(blkg->q->queue_lock); 973 974 if (rbytes || wbytes || rios || wios) 975 seq_printf(sf, "%s rbytes=%llu wbytes=%llu rios=%llu wios=%llu\n", 976 dname, rbytes, wbytes, rios, wios); 977 } 978 979 rcu_read_unlock(); 980 return 0; 981 } 982 983 static struct cftype blkcg_files[] = { 984 { 985 .name = "stat", 986 .flags = CFTYPE_NOT_ON_ROOT, 987 .seq_show = blkcg_print_stat, 988 }, 989 { } /* terminate */ 990 }; 991 992 static struct cftype blkcg_legacy_files[] = { 993 { 994 .name = "reset_stats", 995 .write_u64 = blkcg_reset_stats, 996 }, 997 { } /* terminate */ 998 }; 999 1000 /** 1001 * blkcg_css_offline - cgroup css_offline callback 1002 * @css: css of interest 1003 * 1004 * This function is called when @css is about to go away and responsible 1005 * for shooting down all blkgs associated with @css. blkgs should be 1006 * removed while holding both q and blkcg locks. As blkcg lock is nested 1007 * inside q lock, this function performs reverse double lock dancing. 1008 * 1009 * This is the blkcg counterpart of ioc_release_fn(). 1010 */ 1011 static void blkcg_css_offline(struct cgroup_subsys_state *css) 1012 { 1013 struct blkcg *blkcg = css_to_blkcg(css); 1014 1015 spin_lock_irq(&blkcg->lock); 1016 1017 while (!hlist_empty(&blkcg->blkg_list)) { 1018 struct blkcg_gq *blkg = hlist_entry(blkcg->blkg_list.first, 1019 struct blkcg_gq, blkcg_node); 1020 struct request_queue *q = blkg->q; 1021 1022 if (spin_trylock(q->queue_lock)) { 1023 blkg_destroy(blkg); 1024 spin_unlock(q->queue_lock); 1025 } else { 1026 spin_unlock_irq(&blkcg->lock); 1027 cpu_relax(); 1028 spin_lock_irq(&blkcg->lock); 1029 } 1030 } 1031 1032 spin_unlock_irq(&blkcg->lock); 1033 1034 wb_blkcg_offline(blkcg); 1035 } 1036 1037 static void blkcg_css_free(struct cgroup_subsys_state *css) 1038 { 1039 struct blkcg *blkcg = css_to_blkcg(css); 1040 int i; 1041 1042 mutex_lock(&blkcg_pol_mutex); 1043 1044 list_del(&blkcg->all_blkcgs_node); 1045 1046 for (i = 0; i < BLKCG_MAX_POLS; i++) 1047 if (blkcg->cpd[i]) 1048 blkcg_policy[i]->cpd_free_fn(blkcg->cpd[i]); 1049 1050 mutex_unlock(&blkcg_pol_mutex); 1051 1052 kfree(blkcg); 1053 } 1054 1055 static struct cgroup_subsys_state * 1056 blkcg_css_alloc(struct cgroup_subsys_state *parent_css) 1057 { 1058 struct blkcg *blkcg; 1059 struct cgroup_subsys_state *ret; 1060 int i; 1061 1062 mutex_lock(&blkcg_pol_mutex); 1063 1064 if (!parent_css) { 1065 blkcg = &blkcg_root; 1066 } else { 1067 blkcg = kzalloc(sizeof(*blkcg), GFP_KERNEL); 1068 if (!blkcg) { 1069 ret = ERR_PTR(-ENOMEM); 1070 goto free_blkcg; 1071 } 1072 } 1073 1074 for (i = 0; i < BLKCG_MAX_POLS ; i++) { 1075 struct blkcg_policy *pol = blkcg_policy[i]; 1076 struct blkcg_policy_data *cpd; 1077 1078 /* 1079 * If the policy hasn't been attached yet, wait for it 1080 * to be attached before doing anything else. Otherwise, 1081 * check if the policy requires any specific per-cgroup 1082 * data: if it does, allocate and initialize it. 1083 */ 1084 if (!pol || !pol->cpd_alloc_fn) 1085 continue; 1086 1087 cpd = pol->cpd_alloc_fn(GFP_KERNEL); 1088 if (!cpd) { 1089 ret = ERR_PTR(-ENOMEM); 1090 goto free_pd_blkcg; 1091 } 1092 blkcg->cpd[i] = cpd; 1093 cpd->blkcg = blkcg; 1094 cpd->plid = i; 1095 if (pol->cpd_init_fn) 1096 pol->cpd_init_fn(cpd); 1097 } 1098 1099 spin_lock_init(&blkcg->lock); 1100 INIT_RADIX_TREE(&blkcg->blkg_tree, GFP_NOWAIT | __GFP_NOWARN); 1101 INIT_HLIST_HEAD(&blkcg->blkg_list); 1102 #ifdef CONFIG_CGROUP_WRITEBACK 1103 INIT_LIST_HEAD(&blkcg->cgwb_list); 1104 #endif 1105 list_add_tail(&blkcg->all_blkcgs_node, &all_blkcgs); 1106 1107 mutex_unlock(&blkcg_pol_mutex); 1108 return &blkcg->css; 1109 1110 free_pd_blkcg: 1111 for (i--; i >= 0; i--) 1112 if (blkcg->cpd[i]) 1113 blkcg_policy[i]->cpd_free_fn(blkcg->cpd[i]); 1114 free_blkcg: 1115 kfree(blkcg); 1116 mutex_unlock(&blkcg_pol_mutex); 1117 return ret; 1118 } 1119 1120 /** 1121 * blkcg_init_queue - initialize blkcg part of request queue 1122 * @q: request_queue to initialize 1123 * 1124 * Called from blk_alloc_queue_node(). Responsible for initializing blkcg 1125 * part of new request_queue @q. 1126 * 1127 * RETURNS: 1128 * 0 on success, -errno on failure. 1129 */ 1130 int blkcg_init_queue(struct request_queue *q) 1131 { 1132 struct blkcg_gq *new_blkg, *blkg; 1133 bool preloaded; 1134 int ret; 1135 1136 new_blkg = blkg_alloc(&blkcg_root, q, GFP_KERNEL); 1137 if (!new_blkg) 1138 return -ENOMEM; 1139 1140 preloaded = !radix_tree_preload(GFP_KERNEL); 1141 1142 /* 1143 * Make sure the root blkg exists and count the existing blkgs. As 1144 * @q is bypassing at this point, blkg_lookup_create() can't be 1145 * used. Open code insertion. 1146 */ 1147 rcu_read_lock(); 1148 spin_lock_irq(q->queue_lock); 1149 blkg = blkg_create(&blkcg_root, q, new_blkg); 1150 spin_unlock_irq(q->queue_lock); 1151 rcu_read_unlock(); 1152 1153 if (preloaded) 1154 radix_tree_preload_end(); 1155 1156 if (IS_ERR(blkg)) 1157 return PTR_ERR(blkg); 1158 1159 q->root_blkg = blkg; 1160 q->root_rl.blkg = blkg; 1161 1162 ret = blk_throtl_init(q); 1163 if (ret) { 1164 spin_lock_irq(q->queue_lock); 1165 blkg_destroy_all(q); 1166 spin_unlock_irq(q->queue_lock); 1167 } 1168 return ret; 1169 } 1170 1171 /** 1172 * blkcg_drain_queue - drain blkcg part of request_queue 1173 * @q: request_queue to drain 1174 * 1175 * Called from blk_drain_queue(). Responsible for draining blkcg part. 1176 */ 1177 void blkcg_drain_queue(struct request_queue *q) 1178 { 1179 lockdep_assert_held(q->queue_lock); 1180 1181 /* 1182 * @q could be exiting and already have destroyed all blkgs as 1183 * indicated by NULL root_blkg. If so, don't confuse policies. 1184 */ 1185 if (!q->root_blkg) 1186 return; 1187 1188 blk_throtl_drain(q); 1189 } 1190 1191 /** 1192 * blkcg_exit_queue - exit and release blkcg part of request_queue 1193 * @q: request_queue being released 1194 * 1195 * Called from blk_release_queue(). Responsible for exiting blkcg part. 1196 */ 1197 void blkcg_exit_queue(struct request_queue *q) 1198 { 1199 spin_lock_irq(q->queue_lock); 1200 blkg_destroy_all(q); 1201 spin_unlock_irq(q->queue_lock); 1202 1203 blk_throtl_exit(q); 1204 } 1205 1206 /* 1207 * We cannot support shared io contexts, as we have no mean to support 1208 * two tasks with the same ioc in two different groups without major rework 1209 * of the main cic data structures. For now we allow a task to change 1210 * its cgroup only if it's the only owner of its ioc. 1211 */ 1212 static int blkcg_can_attach(struct cgroup_taskset *tset) 1213 { 1214 struct task_struct *task; 1215 struct cgroup_subsys_state *dst_css; 1216 struct io_context *ioc; 1217 int ret = 0; 1218 1219 /* task_lock() is needed to avoid races with exit_io_context() */ 1220 cgroup_taskset_for_each(task, dst_css, tset) { 1221 task_lock(task); 1222 ioc = task->io_context; 1223 if (ioc && atomic_read(&ioc->nr_tasks) > 1) 1224 ret = -EINVAL; 1225 task_unlock(task); 1226 if (ret) 1227 break; 1228 } 1229 return ret; 1230 } 1231 1232 static void blkcg_bind(struct cgroup_subsys_state *root_css) 1233 { 1234 int i; 1235 1236 mutex_lock(&blkcg_pol_mutex); 1237 1238 for (i = 0; i < BLKCG_MAX_POLS; i++) { 1239 struct blkcg_policy *pol = blkcg_policy[i]; 1240 struct blkcg *blkcg; 1241 1242 if (!pol || !pol->cpd_bind_fn) 1243 continue; 1244 1245 list_for_each_entry(blkcg, &all_blkcgs, all_blkcgs_node) 1246 if (blkcg->cpd[pol->plid]) 1247 pol->cpd_bind_fn(blkcg->cpd[pol->plid]); 1248 } 1249 mutex_unlock(&blkcg_pol_mutex); 1250 } 1251 1252 struct cgroup_subsys io_cgrp_subsys = { 1253 .css_alloc = blkcg_css_alloc, 1254 .css_offline = blkcg_css_offline, 1255 .css_free = blkcg_css_free, 1256 .can_attach = blkcg_can_attach, 1257 .bind = blkcg_bind, 1258 .dfl_cftypes = blkcg_files, 1259 .legacy_cftypes = blkcg_legacy_files, 1260 .legacy_name = "blkio", 1261 #ifdef CONFIG_MEMCG 1262 /* 1263 * This ensures that, if available, memcg is automatically enabled 1264 * together on the default hierarchy so that the owner cgroup can 1265 * be retrieved from writeback pages. 1266 */ 1267 .depends_on = 1 << memory_cgrp_id, 1268 #endif 1269 }; 1270 EXPORT_SYMBOL_GPL(io_cgrp_subsys); 1271 1272 /** 1273 * blkcg_activate_policy - activate a blkcg policy on a request_queue 1274 * @q: request_queue of interest 1275 * @pol: blkcg policy to activate 1276 * 1277 * Activate @pol on @q. Requires %GFP_KERNEL context. @q goes through 1278 * bypass mode to populate its blkgs with policy_data for @pol. 1279 * 1280 * Activation happens with @q bypassed, so nobody would be accessing blkgs 1281 * from IO path. Update of each blkg is protected by both queue and blkcg 1282 * locks so that holding either lock and testing blkcg_policy_enabled() is 1283 * always enough for dereferencing policy data. 1284 * 1285 * The caller is responsible for synchronizing [de]activations and policy 1286 * [un]registerations. Returns 0 on success, -errno on failure. 1287 */ 1288 int blkcg_activate_policy(struct request_queue *q, 1289 const struct blkcg_policy *pol) 1290 { 1291 struct blkg_policy_data *pd_prealloc = NULL; 1292 struct blkcg_gq *blkg; 1293 int ret; 1294 1295 if (blkcg_policy_enabled(q, pol)) 1296 return 0; 1297 1298 if (q->mq_ops) 1299 blk_mq_freeze_queue(q); 1300 else 1301 blk_queue_bypass_start(q); 1302 pd_prealloc: 1303 if (!pd_prealloc) { 1304 pd_prealloc = pol->pd_alloc_fn(GFP_KERNEL, q->node); 1305 if (!pd_prealloc) { 1306 ret = -ENOMEM; 1307 goto out_bypass_end; 1308 } 1309 } 1310 1311 spin_lock_irq(q->queue_lock); 1312 1313 list_for_each_entry(blkg, &q->blkg_list, q_node) { 1314 struct blkg_policy_data *pd; 1315 1316 if (blkg->pd[pol->plid]) 1317 continue; 1318 1319 pd = pol->pd_alloc_fn(GFP_NOWAIT | __GFP_NOWARN, q->node); 1320 if (!pd) 1321 swap(pd, pd_prealloc); 1322 if (!pd) { 1323 spin_unlock_irq(q->queue_lock); 1324 goto pd_prealloc; 1325 } 1326 1327 blkg->pd[pol->plid] = pd; 1328 pd->blkg = blkg; 1329 pd->plid = pol->plid; 1330 if (pol->pd_init_fn) 1331 pol->pd_init_fn(pd); 1332 } 1333 1334 __set_bit(pol->plid, q->blkcg_pols); 1335 ret = 0; 1336 1337 spin_unlock_irq(q->queue_lock); 1338 out_bypass_end: 1339 if (q->mq_ops) 1340 blk_mq_unfreeze_queue(q); 1341 else 1342 blk_queue_bypass_end(q); 1343 if (pd_prealloc) 1344 pol->pd_free_fn(pd_prealloc); 1345 return ret; 1346 } 1347 EXPORT_SYMBOL_GPL(blkcg_activate_policy); 1348 1349 /** 1350 * blkcg_deactivate_policy - deactivate a blkcg policy on a request_queue 1351 * @q: request_queue of interest 1352 * @pol: blkcg policy to deactivate 1353 * 1354 * Deactivate @pol on @q. Follows the same synchronization rules as 1355 * blkcg_activate_policy(). 1356 */ 1357 void blkcg_deactivate_policy(struct request_queue *q, 1358 const struct blkcg_policy *pol) 1359 { 1360 struct blkcg_gq *blkg; 1361 1362 if (!blkcg_policy_enabled(q, pol)) 1363 return; 1364 1365 if (q->mq_ops) 1366 blk_mq_freeze_queue(q); 1367 else 1368 blk_queue_bypass_start(q); 1369 1370 spin_lock_irq(q->queue_lock); 1371 1372 __clear_bit(pol->plid, q->blkcg_pols); 1373 1374 list_for_each_entry(blkg, &q->blkg_list, q_node) { 1375 /* grab blkcg lock too while removing @pd from @blkg */ 1376 spin_lock(&blkg->blkcg->lock); 1377 1378 if (blkg->pd[pol->plid]) { 1379 if (pol->pd_offline_fn) 1380 pol->pd_offline_fn(blkg->pd[pol->plid]); 1381 pol->pd_free_fn(blkg->pd[pol->plid]); 1382 blkg->pd[pol->plid] = NULL; 1383 } 1384 1385 spin_unlock(&blkg->blkcg->lock); 1386 } 1387 1388 spin_unlock_irq(q->queue_lock); 1389 1390 if (q->mq_ops) 1391 blk_mq_unfreeze_queue(q); 1392 else 1393 blk_queue_bypass_end(q); 1394 } 1395 EXPORT_SYMBOL_GPL(blkcg_deactivate_policy); 1396 1397 /** 1398 * blkcg_policy_register - register a blkcg policy 1399 * @pol: blkcg policy to register 1400 * 1401 * Register @pol with blkcg core. Might sleep and @pol may be modified on 1402 * successful registration. Returns 0 on success and -errno on failure. 1403 */ 1404 int blkcg_policy_register(struct blkcg_policy *pol) 1405 { 1406 struct blkcg *blkcg; 1407 int i, ret; 1408 1409 mutex_lock(&blkcg_pol_register_mutex); 1410 mutex_lock(&blkcg_pol_mutex); 1411 1412 /* find an empty slot */ 1413 ret = -ENOSPC; 1414 for (i = 0; i < BLKCG_MAX_POLS; i++) 1415 if (!blkcg_policy[i]) 1416 break; 1417 if (i >= BLKCG_MAX_POLS) 1418 goto err_unlock; 1419 1420 /* register @pol */ 1421 pol->plid = i; 1422 blkcg_policy[pol->plid] = pol; 1423 1424 /* allocate and install cpd's */ 1425 if (pol->cpd_alloc_fn) { 1426 list_for_each_entry(blkcg, &all_blkcgs, all_blkcgs_node) { 1427 struct blkcg_policy_data *cpd; 1428 1429 cpd = pol->cpd_alloc_fn(GFP_KERNEL); 1430 if (!cpd) 1431 goto err_free_cpds; 1432 1433 blkcg->cpd[pol->plid] = cpd; 1434 cpd->blkcg = blkcg; 1435 cpd->plid = pol->plid; 1436 pol->cpd_init_fn(cpd); 1437 } 1438 } 1439 1440 mutex_unlock(&blkcg_pol_mutex); 1441 1442 /* everything is in place, add intf files for the new policy */ 1443 if (pol->dfl_cftypes) 1444 WARN_ON(cgroup_add_dfl_cftypes(&io_cgrp_subsys, 1445 pol->dfl_cftypes)); 1446 if (pol->legacy_cftypes) 1447 WARN_ON(cgroup_add_legacy_cftypes(&io_cgrp_subsys, 1448 pol->legacy_cftypes)); 1449 mutex_unlock(&blkcg_pol_register_mutex); 1450 return 0; 1451 1452 err_free_cpds: 1453 if (pol->cpd_alloc_fn) { 1454 list_for_each_entry(blkcg, &all_blkcgs, all_blkcgs_node) { 1455 if (blkcg->cpd[pol->plid]) { 1456 pol->cpd_free_fn(blkcg->cpd[pol->plid]); 1457 blkcg->cpd[pol->plid] = NULL; 1458 } 1459 } 1460 } 1461 blkcg_policy[pol->plid] = NULL; 1462 err_unlock: 1463 mutex_unlock(&blkcg_pol_mutex); 1464 mutex_unlock(&blkcg_pol_register_mutex); 1465 return ret; 1466 } 1467 EXPORT_SYMBOL_GPL(blkcg_policy_register); 1468 1469 /** 1470 * blkcg_policy_unregister - unregister a blkcg policy 1471 * @pol: blkcg policy to unregister 1472 * 1473 * Undo blkcg_policy_register(@pol). Might sleep. 1474 */ 1475 void blkcg_policy_unregister(struct blkcg_policy *pol) 1476 { 1477 struct blkcg *blkcg; 1478 1479 mutex_lock(&blkcg_pol_register_mutex); 1480 1481 if (WARN_ON(blkcg_policy[pol->plid] != pol)) 1482 goto out_unlock; 1483 1484 /* kill the intf files first */ 1485 if (pol->dfl_cftypes) 1486 cgroup_rm_cftypes(pol->dfl_cftypes); 1487 if (pol->legacy_cftypes) 1488 cgroup_rm_cftypes(pol->legacy_cftypes); 1489 1490 /* remove cpds and unregister */ 1491 mutex_lock(&blkcg_pol_mutex); 1492 1493 if (pol->cpd_alloc_fn) { 1494 list_for_each_entry(blkcg, &all_blkcgs, all_blkcgs_node) { 1495 if (blkcg->cpd[pol->plid]) { 1496 pol->cpd_free_fn(blkcg->cpd[pol->plid]); 1497 blkcg->cpd[pol->plid] = NULL; 1498 } 1499 } 1500 } 1501 blkcg_policy[pol->plid] = NULL; 1502 1503 mutex_unlock(&blkcg_pol_mutex); 1504 out_unlock: 1505 mutex_unlock(&blkcg_pol_register_mutex); 1506 } 1507 EXPORT_SYMBOL_GPL(blkcg_policy_unregister); 1508