1 /* 2 * Block device elevator/IO-scheduler. 3 * 4 * Copyright (C) 2000 Andrea Arcangeli <andrea@suse.de> SuSE 5 * 6 * 30042000 Jens Axboe <axboe@kernel.dk> : 7 * 8 * Split the elevator a bit so that it is possible to choose a different 9 * one or even write a new "plug in". There are three pieces: 10 * - elevator_fn, inserts a new request in the queue list 11 * - elevator_merge_fn, decides whether a new buffer can be merged with 12 * an existing request 13 * - elevator_dequeue_fn, called when a request is taken off the active list 14 * 15 * 20082000 Dave Jones <davej@suse.de> : 16 * Removed tests for max-bomb-segments, which was breaking elvtune 17 * when run without -bN 18 * 19 * Jens: 20 * - Rework again to work with bio instead of buffer_heads 21 * - loose bi_dev comparisons, partition handling is right now 22 * - completely modularize elevator setup and teardown 23 * 24 */ 25 #include <linux/kernel.h> 26 #include <linux/fs.h> 27 #include <linux/blkdev.h> 28 #include <linux/elevator.h> 29 #include <linux/bio.h> 30 #include <linux/module.h> 31 #include <linux/slab.h> 32 #include <linux/init.h> 33 #include <linux/compiler.h> 34 #include <linux/blktrace_api.h> 35 #include <linux/hash.h> 36 #include <linux/uaccess.h> 37 38 #include <trace/events/block.h> 39 40 #include "blk.h" 41 42 static DEFINE_SPINLOCK(elv_list_lock); 43 static LIST_HEAD(elv_list); 44 45 /* 46 * Merge hash stuff. 47 */ 48 static const int elv_hash_shift = 6; 49 #define ELV_HASH_BLOCK(sec) ((sec) >> 3) 50 #define ELV_HASH_FN(sec) \ 51 (hash_long(ELV_HASH_BLOCK((sec)), elv_hash_shift)) 52 #define ELV_HASH_ENTRIES (1 << elv_hash_shift) 53 #define rq_hash_key(rq) (blk_rq_pos(rq) + blk_rq_sectors(rq)) 54 55 /* 56 * Query io scheduler to see if the current process issuing bio may be 57 * merged with rq. 58 */ 59 static int elv_iosched_allow_merge(struct request *rq, struct bio *bio) 60 { 61 struct request_queue *q = rq->q; 62 struct elevator_queue *e = q->elevator; 63 64 if (e->type->ops.elevator_allow_merge_fn) 65 return e->type->ops.elevator_allow_merge_fn(q, rq, bio); 66 67 return 1; 68 } 69 70 /* 71 * can we safely merge with this request? 72 */ 73 int elv_rq_merge_ok(struct request *rq, struct bio *bio) 74 { 75 if (!rq_mergeable(rq)) 76 return 0; 77 78 /* 79 * Don't merge file system requests and discard requests 80 */ 81 if ((bio->bi_rw & REQ_DISCARD) != (rq->bio->bi_rw & REQ_DISCARD)) 82 return 0; 83 84 /* 85 * Don't merge discard requests and secure discard requests 86 */ 87 if ((bio->bi_rw & REQ_SECURE) != (rq->bio->bi_rw & REQ_SECURE)) 88 return 0; 89 90 /* 91 * different data direction or already started, don't merge 92 */ 93 if (bio_data_dir(bio) != rq_data_dir(rq)) 94 return 0; 95 96 /* 97 * must be same device and not a special request 98 */ 99 if (rq->rq_disk != bio->bi_bdev->bd_disk || rq->special) 100 return 0; 101 102 /* 103 * only merge integrity protected bio into ditto rq 104 */ 105 if (bio_integrity(bio) != blk_integrity_rq(rq)) 106 return 0; 107 108 if (!elv_iosched_allow_merge(rq, bio)) 109 return 0; 110 111 return 1; 112 } 113 EXPORT_SYMBOL(elv_rq_merge_ok); 114 115 int elv_try_merge(struct request *__rq, struct bio *bio) 116 { 117 int ret = ELEVATOR_NO_MERGE; 118 119 /* 120 * we can merge and sequence is ok, check if it's possible 121 */ 122 if (elv_rq_merge_ok(__rq, bio)) { 123 if (blk_rq_pos(__rq) + blk_rq_sectors(__rq) == bio->bi_sector) 124 ret = ELEVATOR_BACK_MERGE; 125 else if (blk_rq_pos(__rq) - bio_sectors(bio) == bio->bi_sector) 126 ret = ELEVATOR_FRONT_MERGE; 127 } 128 129 return ret; 130 } 131 132 static struct elevator_type *elevator_find(const char *name) 133 { 134 struct elevator_type *e; 135 136 list_for_each_entry(e, &elv_list, list) { 137 if (!strcmp(e->elevator_name, name)) 138 return e; 139 } 140 141 return NULL; 142 } 143 144 static void elevator_put(struct elevator_type *e) 145 { 146 module_put(e->elevator_owner); 147 } 148 149 static struct elevator_type *elevator_get(const char *name) 150 { 151 struct elevator_type *e; 152 153 spin_lock(&elv_list_lock); 154 155 e = elevator_find(name); 156 if (!e) { 157 spin_unlock(&elv_list_lock); 158 request_module("%s-iosched", name); 159 spin_lock(&elv_list_lock); 160 e = elevator_find(name); 161 } 162 163 if (e && !try_module_get(e->elevator_owner)) 164 e = NULL; 165 166 spin_unlock(&elv_list_lock); 167 168 return e; 169 } 170 171 static int elevator_init_queue(struct request_queue *q, 172 struct elevator_queue *eq) 173 { 174 eq->elevator_data = eq->type->ops.elevator_init_fn(q); 175 if (eq->elevator_data) 176 return 0; 177 return -ENOMEM; 178 } 179 180 static char chosen_elevator[ELV_NAME_MAX]; 181 182 static int __init elevator_setup(char *str) 183 { 184 /* 185 * Be backwards-compatible with previous kernels, so users 186 * won't get the wrong elevator. 187 */ 188 strncpy(chosen_elevator, str, sizeof(chosen_elevator) - 1); 189 return 1; 190 } 191 192 __setup("elevator=", elevator_setup); 193 194 static struct kobj_type elv_ktype; 195 196 static struct elevator_queue *elevator_alloc(struct request_queue *q, 197 struct elevator_type *e) 198 { 199 struct elevator_queue *eq; 200 int i; 201 202 eq = kmalloc_node(sizeof(*eq), GFP_KERNEL | __GFP_ZERO, q->node); 203 if (unlikely(!eq)) 204 goto err; 205 206 eq->type = e; 207 kobject_init(&eq->kobj, &elv_ktype); 208 mutex_init(&eq->sysfs_lock); 209 210 eq->hash = kmalloc_node(sizeof(struct hlist_head) * ELV_HASH_ENTRIES, 211 GFP_KERNEL, q->node); 212 if (!eq->hash) 213 goto err; 214 215 for (i = 0; i < ELV_HASH_ENTRIES; i++) 216 INIT_HLIST_HEAD(&eq->hash[i]); 217 218 return eq; 219 err: 220 kfree(eq); 221 elevator_put(e); 222 return NULL; 223 } 224 225 static void elevator_release(struct kobject *kobj) 226 { 227 struct elevator_queue *e; 228 229 e = container_of(kobj, struct elevator_queue, kobj); 230 elevator_put(e->type); 231 kfree(e->hash); 232 kfree(e); 233 } 234 235 int elevator_init(struct request_queue *q, char *name) 236 { 237 struct elevator_type *e = NULL; 238 struct elevator_queue *eq; 239 int err; 240 241 if (unlikely(q->elevator)) 242 return 0; 243 244 INIT_LIST_HEAD(&q->queue_head); 245 q->last_merge = NULL; 246 q->end_sector = 0; 247 q->boundary_rq = NULL; 248 249 if (name) { 250 e = elevator_get(name); 251 if (!e) 252 return -EINVAL; 253 } 254 255 if (!e && *chosen_elevator) { 256 e = elevator_get(chosen_elevator); 257 if (!e) 258 printk(KERN_ERR "I/O scheduler %s not found\n", 259 chosen_elevator); 260 } 261 262 if (!e) { 263 e = elevator_get(CONFIG_DEFAULT_IOSCHED); 264 if (!e) { 265 printk(KERN_ERR 266 "Default I/O scheduler not found. " \ 267 "Using noop.\n"); 268 e = elevator_get("noop"); 269 } 270 } 271 272 eq = elevator_alloc(q, e); 273 if (!eq) 274 return -ENOMEM; 275 276 err = elevator_init_queue(q, eq); 277 if (err) { 278 kobject_put(&eq->kobj); 279 return err; 280 } 281 282 q->elevator = eq; 283 return 0; 284 } 285 EXPORT_SYMBOL(elevator_init); 286 287 void elevator_exit(struct elevator_queue *e) 288 { 289 mutex_lock(&e->sysfs_lock); 290 if (e->type->ops.elevator_exit_fn) 291 e->type->ops.elevator_exit_fn(e); 292 mutex_unlock(&e->sysfs_lock); 293 294 kobject_put(&e->kobj); 295 } 296 EXPORT_SYMBOL(elevator_exit); 297 298 static inline void __elv_rqhash_del(struct request *rq) 299 { 300 hlist_del_init(&rq->hash); 301 } 302 303 static void elv_rqhash_del(struct request_queue *q, struct request *rq) 304 { 305 if (ELV_ON_HASH(rq)) 306 __elv_rqhash_del(rq); 307 } 308 309 static void elv_rqhash_add(struct request_queue *q, struct request *rq) 310 { 311 struct elevator_queue *e = q->elevator; 312 313 BUG_ON(ELV_ON_HASH(rq)); 314 hlist_add_head(&rq->hash, &e->hash[ELV_HASH_FN(rq_hash_key(rq))]); 315 } 316 317 static void elv_rqhash_reposition(struct request_queue *q, struct request *rq) 318 { 319 __elv_rqhash_del(rq); 320 elv_rqhash_add(q, rq); 321 } 322 323 static struct request *elv_rqhash_find(struct request_queue *q, sector_t offset) 324 { 325 struct elevator_queue *e = q->elevator; 326 struct hlist_head *hash_list = &e->hash[ELV_HASH_FN(offset)]; 327 struct hlist_node *entry, *next; 328 struct request *rq; 329 330 hlist_for_each_entry_safe(rq, entry, next, hash_list, hash) { 331 BUG_ON(!ELV_ON_HASH(rq)); 332 333 if (unlikely(!rq_mergeable(rq))) { 334 __elv_rqhash_del(rq); 335 continue; 336 } 337 338 if (rq_hash_key(rq) == offset) 339 return rq; 340 } 341 342 return NULL; 343 } 344 345 /* 346 * RB-tree support functions for inserting/lookup/removal of requests 347 * in a sorted RB tree. 348 */ 349 void elv_rb_add(struct rb_root *root, struct request *rq) 350 { 351 struct rb_node **p = &root->rb_node; 352 struct rb_node *parent = NULL; 353 struct request *__rq; 354 355 while (*p) { 356 parent = *p; 357 __rq = rb_entry(parent, struct request, rb_node); 358 359 if (blk_rq_pos(rq) < blk_rq_pos(__rq)) 360 p = &(*p)->rb_left; 361 else if (blk_rq_pos(rq) >= blk_rq_pos(__rq)) 362 p = &(*p)->rb_right; 363 } 364 365 rb_link_node(&rq->rb_node, parent, p); 366 rb_insert_color(&rq->rb_node, root); 367 } 368 EXPORT_SYMBOL(elv_rb_add); 369 370 void elv_rb_del(struct rb_root *root, struct request *rq) 371 { 372 BUG_ON(RB_EMPTY_NODE(&rq->rb_node)); 373 rb_erase(&rq->rb_node, root); 374 RB_CLEAR_NODE(&rq->rb_node); 375 } 376 EXPORT_SYMBOL(elv_rb_del); 377 378 struct request *elv_rb_find(struct rb_root *root, sector_t sector) 379 { 380 struct rb_node *n = root->rb_node; 381 struct request *rq; 382 383 while (n) { 384 rq = rb_entry(n, struct request, rb_node); 385 386 if (sector < blk_rq_pos(rq)) 387 n = n->rb_left; 388 else if (sector > blk_rq_pos(rq)) 389 n = n->rb_right; 390 else 391 return rq; 392 } 393 394 return NULL; 395 } 396 EXPORT_SYMBOL(elv_rb_find); 397 398 /* 399 * Insert rq into dispatch queue of q. Queue lock must be held on 400 * entry. rq is sort instead into the dispatch queue. To be used by 401 * specific elevators. 402 */ 403 void elv_dispatch_sort(struct request_queue *q, struct request *rq) 404 { 405 sector_t boundary; 406 struct list_head *entry; 407 int stop_flags; 408 409 if (q->last_merge == rq) 410 q->last_merge = NULL; 411 412 elv_rqhash_del(q, rq); 413 414 q->nr_sorted--; 415 416 boundary = q->end_sector; 417 stop_flags = REQ_SOFTBARRIER | REQ_STARTED; 418 list_for_each_prev(entry, &q->queue_head) { 419 struct request *pos = list_entry_rq(entry); 420 421 if ((rq->cmd_flags & REQ_DISCARD) != 422 (pos->cmd_flags & REQ_DISCARD)) 423 break; 424 if (rq_data_dir(rq) != rq_data_dir(pos)) 425 break; 426 if (pos->cmd_flags & stop_flags) 427 break; 428 if (blk_rq_pos(rq) >= boundary) { 429 if (blk_rq_pos(pos) < boundary) 430 continue; 431 } else { 432 if (blk_rq_pos(pos) >= boundary) 433 break; 434 } 435 if (blk_rq_pos(rq) >= blk_rq_pos(pos)) 436 break; 437 } 438 439 list_add(&rq->queuelist, entry); 440 } 441 EXPORT_SYMBOL(elv_dispatch_sort); 442 443 /* 444 * Insert rq into dispatch queue of q. Queue lock must be held on 445 * entry. rq is added to the back of the dispatch queue. To be used by 446 * specific elevators. 447 */ 448 void elv_dispatch_add_tail(struct request_queue *q, struct request *rq) 449 { 450 if (q->last_merge == rq) 451 q->last_merge = NULL; 452 453 elv_rqhash_del(q, rq); 454 455 q->nr_sorted--; 456 457 q->end_sector = rq_end_sector(rq); 458 q->boundary_rq = rq; 459 list_add_tail(&rq->queuelist, &q->queue_head); 460 } 461 EXPORT_SYMBOL(elv_dispatch_add_tail); 462 463 int elv_merge(struct request_queue *q, struct request **req, struct bio *bio) 464 { 465 struct elevator_queue *e = q->elevator; 466 struct request *__rq; 467 int ret; 468 469 /* 470 * Levels of merges: 471 * nomerges: No merges at all attempted 472 * noxmerges: Only simple one-hit cache try 473 * merges: All merge tries attempted 474 */ 475 if (blk_queue_nomerges(q)) 476 return ELEVATOR_NO_MERGE; 477 478 /* 479 * First try one-hit cache. 480 */ 481 if (q->last_merge) { 482 ret = elv_try_merge(q->last_merge, bio); 483 if (ret != ELEVATOR_NO_MERGE) { 484 *req = q->last_merge; 485 return ret; 486 } 487 } 488 489 if (blk_queue_noxmerges(q)) 490 return ELEVATOR_NO_MERGE; 491 492 /* 493 * See if our hash lookup can find a potential backmerge. 494 */ 495 __rq = elv_rqhash_find(q, bio->bi_sector); 496 if (__rq && elv_rq_merge_ok(__rq, bio)) { 497 *req = __rq; 498 return ELEVATOR_BACK_MERGE; 499 } 500 501 if (e->type->ops.elevator_merge_fn) 502 return e->type->ops.elevator_merge_fn(q, req, bio); 503 504 return ELEVATOR_NO_MERGE; 505 } 506 507 /* 508 * Attempt to do an insertion back merge. Only check for the case where 509 * we can append 'rq' to an existing request, so we can throw 'rq' away 510 * afterwards. 511 * 512 * Returns true if we merged, false otherwise 513 */ 514 static bool elv_attempt_insert_merge(struct request_queue *q, 515 struct request *rq) 516 { 517 struct request *__rq; 518 519 if (blk_queue_nomerges(q)) 520 return false; 521 522 /* 523 * First try one-hit cache. 524 */ 525 if (q->last_merge && blk_attempt_req_merge(q, q->last_merge, rq)) 526 return true; 527 528 if (blk_queue_noxmerges(q)) 529 return false; 530 531 /* 532 * See if our hash lookup can find a potential backmerge. 533 */ 534 __rq = elv_rqhash_find(q, blk_rq_pos(rq)); 535 if (__rq && blk_attempt_req_merge(q, __rq, rq)) 536 return true; 537 538 return false; 539 } 540 541 void elv_merged_request(struct request_queue *q, struct request *rq, int type) 542 { 543 struct elevator_queue *e = q->elevator; 544 545 if (e->type->ops.elevator_merged_fn) 546 e->type->ops.elevator_merged_fn(q, rq, type); 547 548 if (type == ELEVATOR_BACK_MERGE) 549 elv_rqhash_reposition(q, rq); 550 551 q->last_merge = rq; 552 } 553 554 void elv_merge_requests(struct request_queue *q, struct request *rq, 555 struct request *next) 556 { 557 struct elevator_queue *e = q->elevator; 558 const int next_sorted = next->cmd_flags & REQ_SORTED; 559 560 if (next_sorted && e->type->ops.elevator_merge_req_fn) 561 e->type->ops.elevator_merge_req_fn(q, rq, next); 562 563 elv_rqhash_reposition(q, rq); 564 565 if (next_sorted) { 566 elv_rqhash_del(q, next); 567 q->nr_sorted--; 568 } 569 570 q->last_merge = rq; 571 } 572 573 void elv_bio_merged(struct request_queue *q, struct request *rq, 574 struct bio *bio) 575 { 576 struct elevator_queue *e = q->elevator; 577 578 if (e->type->ops.elevator_bio_merged_fn) 579 e->type->ops.elevator_bio_merged_fn(q, rq, bio); 580 } 581 582 void elv_requeue_request(struct request_queue *q, struct request *rq) 583 { 584 /* 585 * it already went through dequeue, we need to decrement the 586 * in_flight count again 587 */ 588 if (blk_account_rq(rq)) { 589 q->in_flight[rq_is_sync(rq)]--; 590 if (rq->cmd_flags & REQ_SORTED) 591 elv_deactivate_rq(q, rq); 592 } 593 594 rq->cmd_flags &= ~REQ_STARTED; 595 596 __elv_add_request(q, rq, ELEVATOR_INSERT_REQUEUE); 597 } 598 599 void elv_drain_elevator(struct request_queue *q) 600 { 601 static int printed; 602 603 lockdep_assert_held(q->queue_lock); 604 605 while (q->elevator->type->ops.elevator_dispatch_fn(q, 1)) 606 ; 607 if (q->nr_sorted && printed++ < 10) { 608 printk(KERN_ERR "%s: forced dispatching is broken " 609 "(nr_sorted=%u), please report this\n", 610 q->elevator->type->elevator_name, q->nr_sorted); 611 } 612 } 613 614 void elv_quiesce_start(struct request_queue *q) 615 { 616 if (!q->elevator) 617 return; 618 619 spin_lock_irq(q->queue_lock); 620 queue_flag_set(QUEUE_FLAG_ELVSWITCH, q); 621 spin_unlock_irq(q->queue_lock); 622 623 blk_drain_queue(q, false); 624 } 625 626 void elv_quiesce_end(struct request_queue *q) 627 { 628 spin_lock_irq(q->queue_lock); 629 queue_flag_clear(QUEUE_FLAG_ELVSWITCH, q); 630 spin_unlock_irq(q->queue_lock); 631 } 632 633 void __elv_add_request(struct request_queue *q, struct request *rq, int where) 634 { 635 trace_block_rq_insert(q, rq); 636 637 rq->q = q; 638 639 if (rq->cmd_flags & REQ_SOFTBARRIER) { 640 /* barriers are scheduling boundary, update end_sector */ 641 if (rq->cmd_type == REQ_TYPE_FS || 642 (rq->cmd_flags & REQ_DISCARD)) { 643 q->end_sector = rq_end_sector(rq); 644 q->boundary_rq = rq; 645 } 646 } else if (!(rq->cmd_flags & REQ_ELVPRIV) && 647 (where == ELEVATOR_INSERT_SORT || 648 where == ELEVATOR_INSERT_SORT_MERGE)) 649 where = ELEVATOR_INSERT_BACK; 650 651 switch (where) { 652 case ELEVATOR_INSERT_REQUEUE: 653 case ELEVATOR_INSERT_FRONT: 654 rq->cmd_flags |= REQ_SOFTBARRIER; 655 list_add(&rq->queuelist, &q->queue_head); 656 break; 657 658 case ELEVATOR_INSERT_BACK: 659 rq->cmd_flags |= REQ_SOFTBARRIER; 660 elv_drain_elevator(q); 661 list_add_tail(&rq->queuelist, &q->queue_head); 662 /* 663 * We kick the queue here for the following reasons. 664 * - The elevator might have returned NULL previously 665 * to delay requests and returned them now. As the 666 * queue wasn't empty before this request, ll_rw_blk 667 * won't run the queue on return, resulting in hang. 668 * - Usually, back inserted requests won't be merged 669 * with anything. There's no point in delaying queue 670 * processing. 671 */ 672 __blk_run_queue(q); 673 break; 674 675 case ELEVATOR_INSERT_SORT_MERGE: 676 /* 677 * If we succeed in merging this request with one in the 678 * queue already, we are done - rq has now been freed, 679 * so no need to do anything further. 680 */ 681 if (elv_attempt_insert_merge(q, rq)) 682 break; 683 case ELEVATOR_INSERT_SORT: 684 BUG_ON(rq->cmd_type != REQ_TYPE_FS && 685 !(rq->cmd_flags & REQ_DISCARD)); 686 rq->cmd_flags |= REQ_SORTED; 687 q->nr_sorted++; 688 if (rq_mergeable(rq)) { 689 elv_rqhash_add(q, rq); 690 if (!q->last_merge) 691 q->last_merge = rq; 692 } 693 694 /* 695 * Some ioscheds (cfq) run q->request_fn directly, so 696 * rq cannot be accessed after calling 697 * elevator_add_req_fn. 698 */ 699 q->elevator->type->ops.elevator_add_req_fn(q, rq); 700 break; 701 702 case ELEVATOR_INSERT_FLUSH: 703 rq->cmd_flags |= REQ_SOFTBARRIER; 704 blk_insert_flush(rq); 705 break; 706 default: 707 printk(KERN_ERR "%s: bad insertion point %d\n", 708 __func__, where); 709 BUG(); 710 } 711 } 712 EXPORT_SYMBOL(__elv_add_request); 713 714 void elv_add_request(struct request_queue *q, struct request *rq, int where) 715 { 716 unsigned long flags; 717 718 spin_lock_irqsave(q->queue_lock, flags); 719 __elv_add_request(q, rq, where); 720 spin_unlock_irqrestore(q->queue_lock, flags); 721 } 722 EXPORT_SYMBOL(elv_add_request); 723 724 struct request *elv_latter_request(struct request_queue *q, struct request *rq) 725 { 726 struct elevator_queue *e = q->elevator; 727 728 if (e->type->ops.elevator_latter_req_fn) 729 return e->type->ops.elevator_latter_req_fn(q, rq); 730 return NULL; 731 } 732 733 struct request *elv_former_request(struct request_queue *q, struct request *rq) 734 { 735 struct elevator_queue *e = q->elevator; 736 737 if (e->type->ops.elevator_former_req_fn) 738 return e->type->ops.elevator_former_req_fn(q, rq); 739 return NULL; 740 } 741 742 int elv_set_request(struct request_queue *q, struct request *rq, gfp_t gfp_mask) 743 { 744 struct elevator_queue *e = q->elevator; 745 746 if (e->type->ops.elevator_set_req_fn) 747 return e->type->ops.elevator_set_req_fn(q, rq, gfp_mask); 748 return 0; 749 } 750 751 void elv_put_request(struct request_queue *q, struct request *rq) 752 { 753 struct elevator_queue *e = q->elevator; 754 755 if (e->type->ops.elevator_put_req_fn) 756 e->type->ops.elevator_put_req_fn(rq); 757 } 758 759 int elv_may_queue(struct request_queue *q, int rw) 760 { 761 struct elevator_queue *e = q->elevator; 762 763 if (e->type->ops.elevator_may_queue_fn) 764 return e->type->ops.elevator_may_queue_fn(q, rw); 765 766 return ELV_MQUEUE_MAY; 767 } 768 769 void elv_abort_queue(struct request_queue *q) 770 { 771 struct request *rq; 772 773 blk_abort_flushes(q); 774 775 while (!list_empty(&q->queue_head)) { 776 rq = list_entry_rq(q->queue_head.next); 777 rq->cmd_flags |= REQ_QUIET; 778 trace_block_rq_abort(q, rq); 779 /* 780 * Mark this request as started so we don't trigger 781 * any debug logic in the end I/O path. 782 */ 783 blk_start_request(rq); 784 __blk_end_request_all(rq, -EIO); 785 } 786 } 787 EXPORT_SYMBOL(elv_abort_queue); 788 789 void elv_completed_request(struct request_queue *q, struct request *rq) 790 { 791 struct elevator_queue *e = q->elevator; 792 793 /* 794 * request is released from the driver, io must be done 795 */ 796 if (blk_account_rq(rq)) { 797 q->in_flight[rq_is_sync(rq)]--; 798 if ((rq->cmd_flags & REQ_SORTED) && 799 e->type->ops.elevator_completed_req_fn) 800 e->type->ops.elevator_completed_req_fn(q, rq); 801 } 802 } 803 804 #define to_elv(atr) container_of((atr), struct elv_fs_entry, attr) 805 806 static ssize_t 807 elv_attr_show(struct kobject *kobj, struct attribute *attr, char *page) 808 { 809 struct elv_fs_entry *entry = to_elv(attr); 810 struct elevator_queue *e; 811 ssize_t error; 812 813 if (!entry->show) 814 return -EIO; 815 816 e = container_of(kobj, struct elevator_queue, kobj); 817 mutex_lock(&e->sysfs_lock); 818 error = e->type ? entry->show(e, page) : -ENOENT; 819 mutex_unlock(&e->sysfs_lock); 820 return error; 821 } 822 823 static ssize_t 824 elv_attr_store(struct kobject *kobj, struct attribute *attr, 825 const char *page, size_t length) 826 { 827 struct elv_fs_entry *entry = to_elv(attr); 828 struct elevator_queue *e; 829 ssize_t error; 830 831 if (!entry->store) 832 return -EIO; 833 834 e = container_of(kobj, struct elevator_queue, kobj); 835 mutex_lock(&e->sysfs_lock); 836 error = e->type ? entry->store(e, page, length) : -ENOENT; 837 mutex_unlock(&e->sysfs_lock); 838 return error; 839 } 840 841 static const struct sysfs_ops elv_sysfs_ops = { 842 .show = elv_attr_show, 843 .store = elv_attr_store, 844 }; 845 846 static struct kobj_type elv_ktype = { 847 .sysfs_ops = &elv_sysfs_ops, 848 .release = elevator_release, 849 }; 850 851 int __elv_register_queue(struct request_queue *q, struct elevator_queue *e) 852 { 853 int error; 854 855 error = kobject_add(&e->kobj, &q->kobj, "%s", "iosched"); 856 if (!error) { 857 struct elv_fs_entry *attr = e->type->elevator_attrs; 858 if (attr) { 859 while (attr->attr.name) { 860 if (sysfs_create_file(&e->kobj, &attr->attr)) 861 break; 862 attr++; 863 } 864 } 865 kobject_uevent(&e->kobj, KOBJ_ADD); 866 e->registered = 1; 867 } 868 return error; 869 } 870 871 int elv_register_queue(struct request_queue *q) 872 { 873 return __elv_register_queue(q, q->elevator); 874 } 875 EXPORT_SYMBOL(elv_register_queue); 876 877 void elv_unregister_queue(struct request_queue *q) 878 { 879 if (q) { 880 struct elevator_queue *e = q->elevator; 881 882 kobject_uevent(&e->kobj, KOBJ_REMOVE); 883 kobject_del(&e->kobj); 884 e->registered = 0; 885 } 886 } 887 EXPORT_SYMBOL(elv_unregister_queue); 888 889 int elv_register(struct elevator_type *e) 890 { 891 char *def = ""; 892 893 /* create icq_cache if requested */ 894 if (e->icq_size) { 895 if (WARN_ON(e->icq_size < sizeof(struct io_cq)) || 896 WARN_ON(e->icq_align < __alignof__(struct io_cq))) 897 return -EINVAL; 898 899 snprintf(e->icq_cache_name, sizeof(e->icq_cache_name), 900 "%s_io_cq", e->elevator_name); 901 e->icq_cache = kmem_cache_create(e->icq_cache_name, e->icq_size, 902 e->icq_align, 0, NULL); 903 if (!e->icq_cache) 904 return -ENOMEM; 905 } 906 907 /* register, don't allow duplicate names */ 908 spin_lock(&elv_list_lock); 909 if (elevator_find(e->elevator_name)) { 910 spin_unlock(&elv_list_lock); 911 if (e->icq_cache) 912 kmem_cache_destroy(e->icq_cache); 913 return -EBUSY; 914 } 915 list_add_tail(&e->list, &elv_list); 916 spin_unlock(&elv_list_lock); 917 918 /* print pretty message */ 919 if (!strcmp(e->elevator_name, chosen_elevator) || 920 (!*chosen_elevator && 921 !strcmp(e->elevator_name, CONFIG_DEFAULT_IOSCHED))) 922 def = " (default)"; 923 924 printk(KERN_INFO "io scheduler %s registered%s\n", e->elevator_name, 925 def); 926 return 0; 927 } 928 EXPORT_SYMBOL_GPL(elv_register); 929 930 void elv_unregister(struct elevator_type *e) 931 { 932 /* unregister */ 933 spin_lock(&elv_list_lock); 934 list_del_init(&e->list); 935 spin_unlock(&elv_list_lock); 936 937 /* 938 * Destroy icq_cache if it exists. icq's are RCU managed. Make 939 * sure all RCU operations are complete before proceeding. 940 */ 941 if (e->icq_cache) { 942 rcu_barrier(); 943 kmem_cache_destroy(e->icq_cache); 944 e->icq_cache = NULL; 945 } 946 } 947 EXPORT_SYMBOL_GPL(elv_unregister); 948 949 /* 950 * switch to new_e io scheduler. be careful not to introduce deadlocks - 951 * we don't free the old io scheduler, before we have allocated what we 952 * need for the new one. this way we have a chance of going back to the old 953 * one, if the new one fails init for some reason. 954 */ 955 static int elevator_switch(struct request_queue *q, struct elevator_type *new_e) 956 { 957 struct elevator_queue *old_elevator, *e; 958 int err; 959 960 /* allocate new elevator */ 961 e = elevator_alloc(q, new_e); 962 if (!e) 963 return -ENOMEM; 964 965 err = elevator_init_queue(q, e); 966 if (err) { 967 kobject_put(&e->kobj); 968 return err; 969 } 970 971 /* turn on BYPASS and drain all requests w/ elevator private data */ 972 elv_quiesce_start(q); 973 974 /* unregister old queue, register new one and kill old elevator */ 975 if (q->elevator->registered) { 976 elv_unregister_queue(q); 977 err = __elv_register_queue(q, e); 978 if (err) 979 goto fail_register; 980 } 981 982 /* done, clear io_cq's, switch elevators and turn off BYPASS */ 983 spin_lock_irq(q->queue_lock); 984 ioc_clear_queue(q); 985 old_elevator = q->elevator; 986 q->elevator = e; 987 spin_unlock_irq(q->queue_lock); 988 989 elevator_exit(old_elevator); 990 elv_quiesce_end(q); 991 992 blk_add_trace_msg(q, "elv switch: %s", e->type->elevator_name); 993 994 return 0; 995 996 fail_register: 997 /* 998 * switch failed, exit the new io scheduler and reattach the old 999 * one again (along with re-adding the sysfs dir) 1000 */ 1001 elevator_exit(e); 1002 elv_register_queue(q); 1003 elv_quiesce_end(q); 1004 1005 return err; 1006 } 1007 1008 /* 1009 * Switch this queue to the given IO scheduler. 1010 */ 1011 int elevator_change(struct request_queue *q, const char *name) 1012 { 1013 char elevator_name[ELV_NAME_MAX]; 1014 struct elevator_type *e; 1015 1016 if (!q->elevator) 1017 return -ENXIO; 1018 1019 strlcpy(elevator_name, name, sizeof(elevator_name)); 1020 e = elevator_get(strstrip(elevator_name)); 1021 if (!e) { 1022 printk(KERN_ERR "elevator: type %s not found\n", elevator_name); 1023 return -EINVAL; 1024 } 1025 1026 if (!strcmp(elevator_name, q->elevator->type->elevator_name)) { 1027 elevator_put(e); 1028 return 0; 1029 } 1030 1031 return elevator_switch(q, e); 1032 } 1033 EXPORT_SYMBOL(elevator_change); 1034 1035 ssize_t elv_iosched_store(struct request_queue *q, const char *name, 1036 size_t count) 1037 { 1038 int ret; 1039 1040 if (!q->elevator) 1041 return count; 1042 1043 ret = elevator_change(q, name); 1044 if (!ret) 1045 return count; 1046 1047 printk(KERN_ERR "elevator: switch to %s failed\n", name); 1048 return ret; 1049 } 1050 1051 ssize_t elv_iosched_show(struct request_queue *q, char *name) 1052 { 1053 struct elevator_queue *e = q->elevator; 1054 struct elevator_type *elv; 1055 struct elevator_type *__e; 1056 int len = 0; 1057 1058 if (!q->elevator || !blk_queue_stackable(q)) 1059 return sprintf(name, "none\n"); 1060 1061 elv = e->type; 1062 1063 spin_lock(&elv_list_lock); 1064 list_for_each_entry(__e, &elv_list, list) { 1065 if (!strcmp(elv->elevator_name, __e->elevator_name)) 1066 len += sprintf(name+len, "[%s] ", elv->elevator_name); 1067 else 1068 len += sprintf(name+len, "%s ", __e->elevator_name); 1069 } 1070 spin_unlock(&elv_list_lock); 1071 1072 len += sprintf(len+name, "\n"); 1073 return len; 1074 } 1075 1076 struct request *elv_rb_former_request(struct request_queue *q, 1077 struct request *rq) 1078 { 1079 struct rb_node *rbprev = rb_prev(&rq->rb_node); 1080 1081 if (rbprev) 1082 return rb_entry_rq(rbprev); 1083 1084 return NULL; 1085 } 1086 EXPORT_SYMBOL(elv_rb_former_request); 1087 1088 struct request *elv_rb_latter_request(struct request_queue *q, 1089 struct request *rq) 1090 { 1091 struct rb_node *rbnext = rb_next(&rq->rb_node); 1092 1093 if (rbnext) 1094 return rb_entry_rq(rbnext); 1095 1096 return NULL; 1097 } 1098 EXPORT_SYMBOL(elv_rb_latter_request); 1099