diff options
| -rw-r--r-- | block/blk-core.c | 18 | ||||
| -rw-r--r-- | block/blk-flush.c | 8 | ||||
| -rw-r--r-- | block/blk-lib.c | 2 | ||||
| -rw-r--r-- | block/blk-throttle.c | 29 | ||||
| -rw-r--r-- | block/cfq-iosched.c | 6 | ||||
| -rw-r--r-- | block/elevator.c | 4 | ||||
| -rw-r--r-- | drivers/block/loop.c | 5 | ||||
| -rw-r--r-- | drivers/scsi/scsi_lib.c | 2 | ||||
| -rw-r--r-- | drivers/scsi/scsi_transport_fc.c | 2 | ||||
| -rw-r--r-- | include/linux/blkdev.h | 5 | ||||
| -rw-r--r-- | include/linux/blktrace_api.h | 1 | ||||
| -rw-r--r-- | include/trace/events/block.h | 6 | ||||
| -rw-r--r-- | kernel/trace/blktrace.c | 16 |
13 files changed, 41 insertions, 63 deletions
diff --git a/block/blk-core.c b/block/blk-core.c index 2f4002f79a2..518dd423a5f 100644 --- a/block/blk-core.c +++ b/block/blk-core.c | |||
| @@ -352,7 +352,7 @@ void blk_start_queue(struct request_queue *q) | |||
| 352 | WARN_ON(!irqs_disabled()); | 352 | WARN_ON(!irqs_disabled()); |
| 353 | 353 | ||
| 354 | queue_flag_clear(QUEUE_FLAG_STOPPED, q); | 354 | queue_flag_clear(QUEUE_FLAG_STOPPED, q); |
| 355 | __blk_run_queue(q); | 355 | __blk_run_queue(q, false); |
| 356 | } | 356 | } |
| 357 | EXPORT_SYMBOL(blk_start_queue); | 357 | EXPORT_SYMBOL(blk_start_queue); |
| 358 | 358 | ||
| @@ -403,13 +403,14 @@ EXPORT_SYMBOL(blk_sync_queue); | |||
| 403 | /** | 403 | /** |
| 404 | * __blk_run_queue - run a single device queue | 404 | * __blk_run_queue - run a single device queue |
| 405 | * @q: The queue to run | 405 | * @q: The queue to run |
| 406 | * @force_kblockd: Don't run @q->request_fn directly. Use kblockd. | ||
| 406 | * | 407 | * |
| 407 | * Description: | 408 | * Description: |
| 408 | * See @blk_run_queue. This variant must be called with the queue lock | 409 | * See @blk_run_queue. This variant must be called with the queue lock |
| 409 | * held and interrupts disabled. | 410 | * held and interrupts disabled. |
| 410 | * | 411 | * |
| 411 | */ | 412 | */ |
| 412 | void __blk_run_queue(struct request_queue *q) | 413 | void __blk_run_queue(struct request_queue *q, bool force_kblockd) |
| 413 | { | 414 | { |
| 414 | blk_remove_plug(q); | 415 | blk_remove_plug(q); |
| 415 | 416 | ||
| @@ -423,7 +424,7 @@ void __blk_run_queue(struct request_queue *q) | |||
| 423 | * Only recurse once to avoid overrunning the stack, let the unplug | 424 | * Only recurse once to avoid overrunning the stack, let the unplug |
| 424 | * handling reinvoke the handler shortly if we already got there. | 425 | * handling reinvoke the handler shortly if we already got there. |
| 425 | */ | 426 | */ |
| 426 | if (!queue_flag_test_and_set(QUEUE_FLAG_REENTER, q)) { | 427 | if (!force_kblockd && !queue_flag_test_and_set(QUEUE_FLAG_REENTER, q)) { |
| 427 | q->request_fn(q); | 428 | q->request_fn(q); |
| 428 | queue_flag_clear(QUEUE_FLAG_REENTER, q); | 429 | queue_flag_clear(QUEUE_FLAG_REENTER, q); |
| 429 | } else { | 430 | } else { |
| @@ -446,7 +447,7 @@ void blk_run_queue(struct request_queue *q) | |||
| 446 | unsigned long flags; | 447 | unsigned long flags; |
| 447 | 448 | ||
| 448 | spin_lock_irqsave(q->queue_lock, flags); | 449 | spin_lock_irqsave(q->queue_lock, flags); |
| 449 | __blk_run_queue(q); | 450 | __blk_run_queue(q, false); |
| 450 | spin_unlock_irqrestore(q->queue_lock, flags); | 451 | spin_unlock_irqrestore(q->queue_lock, flags); |
| 451 | } | 452 | } |
| 452 | EXPORT_SYMBOL(blk_run_queue); | 453 | EXPORT_SYMBOL(blk_run_queue); |
| @@ -1053,7 +1054,7 @@ void blk_insert_request(struct request_queue *q, struct request *rq, | |||
| 1053 | 1054 | ||
| 1054 | drive_stat_acct(rq, 1); | 1055 | drive_stat_acct(rq, 1); |
| 1055 | __elv_add_request(q, rq, where, 0); | 1056 | __elv_add_request(q, rq, where, 0); |
| 1056 | __blk_run_queue(q); | 1057 | __blk_run_queue(q, false); |
| 1057 | spin_unlock_irqrestore(q->queue_lock, flags); | 1058 | spin_unlock_irqrestore(q->queue_lock, flags); |
| 1058 | } | 1059 | } |
| 1059 | EXPORT_SYMBOL(blk_insert_request); | 1060 | EXPORT_SYMBOL(blk_insert_request); |
| @@ -2610,13 +2611,6 @@ int kblockd_schedule_work(struct request_queue *q, struct work_struct *work) | |||
| 2610 | } | 2611 | } |
| 2611 | EXPORT_SYMBOL(kblockd_schedule_work); | 2612 | EXPORT_SYMBOL(kblockd_schedule_work); |
| 2612 | 2613 | ||
| 2613 | int kblockd_schedule_delayed_work(struct request_queue *q, | ||
| 2614 | struct delayed_work *dwork, unsigned long delay) | ||
| 2615 | { | ||
| 2616 | return queue_delayed_work(kblockd_workqueue, dwork, delay); | ||
| 2617 | } | ||
| 2618 | EXPORT_SYMBOL(kblockd_schedule_delayed_work); | ||
| 2619 | |||
| 2620 | int __init blk_dev_init(void) | 2614 | int __init blk_dev_init(void) |
| 2621 | { | 2615 | { |
| 2622 | BUILD_BUG_ON(__REQ_NR_BITS > 8 * | 2616 | BUILD_BUG_ON(__REQ_NR_BITS > 8 * |
diff --git a/block/blk-flush.c b/block/blk-flush.c index 54b123d6563..b27d0208611 100644 --- a/block/blk-flush.c +++ b/block/blk-flush.c | |||
| @@ -66,10 +66,12 @@ static void blk_flush_complete_seq_end_io(struct request_queue *q, | |||
| 66 | 66 | ||
| 67 | /* | 67 | /* |
| 68 | * Moving a request silently to empty queue_head may stall the | 68 | * Moving a request silently to empty queue_head may stall the |
| 69 | * queue. Kick the queue in those cases. | 69 | * queue. Kick the queue in those cases. This function is called |
| 70 | * from request completion path and calling directly into | ||
| 71 | * request_fn may confuse the driver. Always use kblockd. | ||
| 70 | */ | 72 | */ |
| 71 | if (was_empty && next_rq) | 73 | if (was_empty && next_rq) |
| 72 | __blk_run_queue(q); | 74 | __blk_run_queue(q, true); |
| 73 | } | 75 | } |
| 74 | 76 | ||
| 75 | static void pre_flush_end_io(struct request *rq, int error) | 77 | static void pre_flush_end_io(struct request *rq, int error) |
| @@ -130,7 +132,7 @@ static struct request *queue_next_fseq(struct request_queue *q) | |||
| 130 | BUG(); | 132 | BUG(); |
| 131 | } | 133 | } |
| 132 | 134 | ||
| 133 | elv_insert(q, rq, ELEVATOR_INSERT_FRONT); | 135 | elv_insert(q, rq, ELEVATOR_INSERT_REQUEUE); |
| 134 | return rq; | 136 | return rq; |
| 135 | } | 137 | } |
| 136 | 138 | ||
diff --git a/block/blk-lib.c b/block/blk-lib.c index 1a320d2406b..eec78becb35 100644 --- a/block/blk-lib.c +++ b/block/blk-lib.c | |||
| @@ -132,7 +132,7 @@ static void bio_batch_end_io(struct bio *bio, int err) | |||
| 132 | } | 132 | } |
| 133 | 133 | ||
| 134 | /** | 134 | /** |
| 135 | * blkdev_issue_zeroout generate number of zero filed write bios | 135 | * blkdev_issue_zeroout - generate number of zero filed write bios |
| 136 | * @bdev: blockdev to issue | 136 | * @bdev: blockdev to issue |
| 137 | * @sector: start sector | 137 | * @sector: start sector |
| 138 | * @nr_sects: number of sectors to write | 138 | * @nr_sects: number of sectors to write |
diff --git a/block/blk-throttle.c b/block/blk-throttle.c index a89043a3caa..e36cc10a346 100644 --- a/block/blk-throttle.c +++ b/block/blk-throttle.c | |||
| @@ -20,6 +20,11 @@ static int throtl_quantum = 32; | |||
| 20 | /* Throttling is performed over 100ms slice and after that slice is renewed */ | 20 | /* Throttling is performed over 100ms slice and after that slice is renewed */ |
| 21 | static unsigned long throtl_slice = HZ/10; /* 100 ms */ | 21 | static unsigned long throtl_slice = HZ/10; /* 100 ms */ |
| 22 | 22 | ||
| 23 | /* A workqueue to queue throttle related work */ | ||
| 24 | static struct workqueue_struct *kthrotld_workqueue; | ||
| 25 | static void throtl_schedule_delayed_work(struct throtl_data *td, | ||
| 26 | unsigned long delay); | ||
| 27 | |||
| 23 | struct throtl_rb_root { | 28 | struct throtl_rb_root { |
| 24 | struct rb_root rb; | 29 | struct rb_root rb; |
| 25 | struct rb_node *left; | 30 | struct rb_node *left; |
| @@ -345,10 +350,9 @@ static void throtl_schedule_next_dispatch(struct throtl_data *td) | |||
| 345 | update_min_dispatch_time(st); | 350 | update_min_dispatch_time(st); |
| 346 | 351 | ||
| 347 | if (time_before_eq(st->min_disptime, jiffies)) | 352 | if (time_before_eq(st->min_disptime, jiffies)) |
| 348 | throtl_schedule_delayed_work(td->queue, 0); | 353 | throtl_schedule_delayed_work(td, 0); |
| 349 | else | 354 | else |
| 350 | throtl_schedule_delayed_work(td->queue, | 355 | throtl_schedule_delayed_work(td, (st->min_disptime - jiffies)); |
| 351 | (st->min_disptime - jiffies)); | ||
| 352 | } | 356 | } |
| 353 | 357 | ||
| 354 | static inline void | 358 | static inline void |
| @@ -815,10 +819,10 @@ void blk_throtl_work(struct work_struct *work) | |||
| 815 | } | 819 | } |
| 816 | 820 | ||
| 817 | /* Call with queue lock held */ | 821 | /* Call with queue lock held */ |
| 818 | void throtl_schedule_delayed_work(struct request_queue *q, unsigned long delay) | 822 | static void |
| 823 | throtl_schedule_delayed_work(struct throtl_data *td, unsigned long delay) | ||
| 819 | { | 824 | { |
| 820 | 825 | ||
| 821 | struct throtl_data *td = q->td; | ||
| 822 | struct delayed_work *dwork = &td->throtl_work; | 826 | struct delayed_work *dwork = &td->throtl_work; |
| 823 | 827 | ||
| 824 | if (total_nr_queued(td) > 0) { | 828 | if (total_nr_queued(td) > 0) { |
| @@ -827,12 +831,11 @@ void throtl_schedule_delayed_work(struct request_queue *q, unsigned long delay) | |||
| 827 | * Cancel that and schedule a new one. | 831 | * Cancel that and schedule a new one. |
| 828 | */ | 832 | */ |
| 829 | __cancel_delayed_work(dwork); | 833 | __cancel_delayed_work(dwork); |
| 830 | kblockd_schedule_delayed_work(q, dwork, delay); | 834 | queue_delayed_work(kthrotld_workqueue, dwork, delay); |
| 831 | throtl_log(td, "schedule work. delay=%lu jiffies=%lu", | 835 | throtl_log(td, "schedule work. delay=%lu jiffies=%lu", |
| 832 | delay, jiffies); | 836 | delay, jiffies); |
| 833 | } | 837 | } |
| 834 | } | 838 | } |
| 835 | EXPORT_SYMBOL(throtl_schedule_delayed_work); | ||
| 836 | 839 | ||
| 837 | static void | 840 | static void |
| 838 | throtl_destroy_tg(struct throtl_data *td, struct throtl_grp *tg) | 841 | throtl_destroy_tg(struct throtl_data *td, struct throtl_grp *tg) |
| @@ -920,7 +923,7 @@ static void throtl_update_blkio_group_read_bps(void *key, | |||
| 920 | smp_mb__after_atomic_inc(); | 923 | smp_mb__after_atomic_inc(); |
| 921 | 924 | ||
| 922 | /* Schedule a work now to process the limit change */ | 925 | /* Schedule a work now to process the limit change */ |
| 923 | throtl_schedule_delayed_work(td->queue, 0); | 926 | throtl_schedule_delayed_work(td, 0); |
| 924 | } | 927 | } |
| 925 | 928 | ||
| 926 | static void throtl_update_blkio_group_write_bps(void *key, | 929 | static void throtl_update_blkio_group_write_bps(void *key, |
| @@ -934,7 +937,7 @@ static void throtl_update_blkio_group_write_bps(void *key, | |||
| 934 | smp_mb__before_atomic_inc(); | 937 | smp_mb__before_atomic_inc(); |
| 935 | atomic_inc(&td->limits_changed); | 938 | atomic_inc(&td->limits_changed); |
| 936 | smp_mb__after_atomic_inc(); | 939 | smp_mb__after_atomic_inc(); |
| 937 | throtl_schedule_delayed_work(td->queue, 0); | 940 | throtl_schedule_delayed_work(td, 0); |
| 938 | } | 941 | } |
| 939 | 942 | ||
| 940 | static void throtl_update_blkio_group_read_iops(void *key, | 943 | static void throtl_update_blkio_group_read_iops(void *key, |
| @@ -948,7 +951,7 @@ static void throtl_update_blkio_group_read_iops(void *key, | |||
| 948 | smp_mb__before_atomic_inc(); | 951 | smp_mb__before_atomic_inc(); |
| 949 | atomic_inc(&td->limits_changed); | 952 | atomic_inc(&td->limits_changed); |
| 950 | smp_mb__after_atomic_inc(); | 953 | smp_mb__after_atomic_inc(); |
| 951 | throtl_schedule_delayed_work(td->queue, 0); | 954 | throtl_schedule_delayed_work(td, 0); |
| 952 | } | 955 | } |
| 953 | 956 | ||
| 954 | static void throtl_update_blkio_group_write_iops(void *key, | 957 | static void throtl_update_blkio_group_write_iops(void *key, |
| @@ -962,7 +965,7 @@ static void throtl_update_blkio_group_write_iops(void *key, | |||
| 962 | smp_mb__before_atomic_inc(); | 965 | smp_mb__before_atomic_inc(); |
| 963 | atomic_inc(&td->limits_changed); | 966 | atomic_inc(&td->limits_changed); |
| 964 | smp_mb__after_atomic_inc(); | 967 | smp_mb__after_atomic_inc(); |
| 965 | throtl_schedule_delayed_work(td->queue, 0); | 968 | throtl_schedule_delayed_work(td, 0); |
| 966 | } | 969 | } |
| 967 | 970 | ||
| 968 | void throtl_shutdown_timer_wq(struct request_queue *q) | 971 | void throtl_shutdown_timer_wq(struct request_queue *q) |
| @@ -1135,6 +1138,10 @@ void blk_throtl_exit(struct request_queue *q) | |||
| 1135 | 1138 | ||
| 1136 | static int __init throtl_init(void) | 1139 | static int __init throtl_init(void) |
| 1137 | { | 1140 | { |
| 1141 | kthrotld_workqueue = alloc_workqueue("kthrotld", WQ_MEM_RECLAIM, 0); | ||
| 1142 | if (!kthrotld_workqueue) | ||
| 1143 | panic("Failed to create kthrotld\n"); | ||
| 1144 | |||
| 1138 | blkio_policy_register(&blkio_policy_throtl); | 1145 | blkio_policy_register(&blkio_policy_throtl); |
| 1139 | return 0; | 1146 | return 0; |
| 1140 | } | 1147 | } |
diff --git a/block/cfq-iosched.c b/block/cfq-iosched.c index 7be4c795962..ea83a4f0c27 100644 --- a/block/cfq-iosched.c +++ b/block/cfq-iosched.c | |||
| @@ -3355,7 +3355,7 @@ cfq_rq_enqueued(struct cfq_data *cfqd, struct cfq_queue *cfqq, | |||
| 3355 | cfqd->busy_queues > 1) { | 3355 | cfqd->busy_queues > 1) { |
| 3356 | cfq_del_timer(cfqd, cfqq); | 3356 | cfq_del_timer(cfqd, cfqq); |
| 3357 | cfq_clear_cfqq_wait_request(cfqq); | 3357 | cfq_clear_cfqq_wait_request(cfqq); |
| 3358 | __blk_run_queue(cfqd->queue); | 3358 | __blk_run_queue(cfqd->queue, false); |
| 3359 | } else { | 3359 | } else { |
| 3360 | cfq_blkiocg_update_idle_time_stats( | 3360 | cfq_blkiocg_update_idle_time_stats( |
| 3361 | &cfqq->cfqg->blkg); | 3361 | &cfqq->cfqg->blkg); |
| @@ -3370,7 +3370,7 @@ cfq_rq_enqueued(struct cfq_data *cfqd, struct cfq_queue *cfqq, | |||
| 3370 | * this new queue is RT and the current one is BE | 3370 | * this new queue is RT and the current one is BE |
| 3371 | */ | 3371 | */ |
| 3372 | cfq_preempt_queue(cfqd, cfqq); | 3372 | cfq_preempt_queue(cfqd, cfqq); |
| 3373 | __blk_run_queue(cfqd->queue); | 3373 | __blk_run_queue(cfqd->queue, false); |
| 3374 | } | 3374 | } |
| 3375 | } | 3375 | } |
| 3376 | 3376 | ||
| @@ -3731,7 +3731,7 @@ static void cfq_kick_queue(struct work_struct *work) | |||
| 3731 | struct request_queue *q = cfqd->queue; | 3731 | struct request_queue *q = cfqd->queue; |
| 3732 | 3732 | ||
| 3733 | spin_lock_irq(q->queue_lock); | 3733 | spin_lock_irq(q->queue_lock); |
| 3734 | __blk_run_queue(cfqd->queue); | 3734 | __blk_run_queue(cfqd->queue, false); |
| 3735 | spin_unlock_irq(q->queue_lock); | 3735 | spin_unlock_irq(q->queue_lock); |
| 3736 | } | 3736 | } |
| 3737 | 3737 | ||
diff --git a/block/elevator.c b/block/elevator.c index 2569512830d..236e93c1f46 100644 --- a/block/elevator.c +++ b/block/elevator.c | |||
| @@ -602,7 +602,7 @@ void elv_quiesce_start(struct request_queue *q) | |||
| 602 | */ | 602 | */ |
| 603 | elv_drain_elevator(q); | 603 | elv_drain_elevator(q); |
| 604 | while (q->rq.elvpriv) { | 604 | while (q->rq.elvpriv) { |
| 605 | __blk_run_queue(q); | 605 | __blk_run_queue(q, false); |
| 606 | spin_unlock_irq(q->queue_lock); | 606 | spin_unlock_irq(q->queue_lock); |
| 607 | msleep(10); | 607 | msleep(10); |
| 608 | spin_lock_irq(q->queue_lock); | 608 | spin_lock_irq(q->queue_lock); |
| @@ -651,7 +651,7 @@ void elv_insert(struct request_queue *q, struct request *rq, int where) | |||
| 651 | * with anything. There's no point in delaying queue | 651 | * with anything. There's no point in delaying queue |
| 652 | * processing. | 652 | * processing. |
| 653 | */ | 653 | */ |
| 654 | __blk_run_queue(q); | 654 | __blk_run_queue(q, false); |
| 655 | break; | 655 | break; |
| 656 | 656 | ||
| 657 | case ELEVATOR_INSERT_SORT: | 657 | case ELEVATOR_INSERT_SORT: |
diff --git a/drivers/block/loop.c b/drivers/block/loop.c index 49e6a545eb6..dbf31ec9114 100644 --- a/drivers/block/loop.c +++ b/drivers/block/loop.c | |||
| @@ -78,7 +78,6 @@ | |||
| 78 | 78 | ||
| 79 | #include <asm/uaccess.h> | 79 | #include <asm/uaccess.h> |
| 80 | 80 | ||
| 81 | static DEFINE_MUTEX(loop_mutex); | ||
| 82 | static LIST_HEAD(loop_devices); | 81 | static LIST_HEAD(loop_devices); |
| 83 | static DEFINE_MUTEX(loop_devices_mutex); | 82 | static DEFINE_MUTEX(loop_devices_mutex); |
| 84 | 83 | ||
| @@ -1501,11 +1500,9 @@ static int lo_open(struct block_device *bdev, fmode_t mode) | |||
| 1501 | { | 1500 | { |
| 1502 | struct loop_device *lo = bdev->bd_disk->private_data; | 1501 | struct loop_device *lo = bdev->bd_disk->private_data; |
| 1503 | 1502 | ||
| 1504 | mutex_lock(&loop_mutex); | ||
| 1505 | mutex_lock(&lo->lo_ctl_mutex); | 1503 | mutex_lock(&lo->lo_ctl_mutex); |
| 1506 | lo->lo_refcnt++; | 1504 | lo->lo_refcnt++; |
| 1507 | mutex_unlock(&lo->lo_ctl_mutex); | 1505 | mutex_unlock(&lo->lo_ctl_mutex); |
| 1508 | mutex_unlock(&loop_mutex); | ||
| 1509 | 1506 | ||
| 1510 | return 0; | 1507 | return 0; |
| 1511 | } | 1508 | } |
| @@ -1515,7 +1512,6 @@ static int lo_release(struct gendisk *disk, fmode_t mode) | |||
| 1515 | struct loop_device *lo = disk->private_data; | 1512 | struct loop_device *lo = disk->private_data; |
| 1516 | int err; | 1513 | int err; |
| 1517 | 1514 | ||
| 1518 | mutex_lock(&loop_mutex); | ||
| 1519 | mutex_lock(&lo->lo_ctl_mutex); | 1515 | mutex_lock(&lo->lo_ctl_mutex); |
| 1520 | 1516 | ||
| 1521 | if (--lo->lo_refcnt) | 1517 | if (--lo->lo_refcnt) |
| @@ -1540,7 +1536,6 @@ static int lo_release(struct gendisk *disk, fmode_t mode) | |||
| 1540 | out: | 1536 | out: |
| 1541 | mutex_unlock(&lo->lo_ctl_mutex); | 1537 | mutex_unlock(&lo->lo_ctl_mutex); |
| 1542 | out_unlocked: | 1538 | out_unlocked: |
| 1543 | mutex_unlock(&loop_mutex); | ||
| 1544 | return 0; | 1539 | return 0; |
| 1545 | } | 1540 | } |
| 1546 | 1541 | ||
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c index 9045c52abd2..fb2bb35c62c 100644 --- a/drivers/scsi/scsi_lib.c +++ b/drivers/scsi/scsi_lib.c | |||
| @@ -443,7 +443,7 @@ static void scsi_run_queue(struct request_queue *q) | |||
| 443 | &sdev->request_queue->queue_flags); | 443 | &sdev->request_queue->queue_flags); |
| 444 | if (flagset) | 444 | if (flagset) |
| 445 | queue_flag_set(QUEUE_FLAG_REENTER, sdev->request_queue); | 445 | queue_flag_set(QUEUE_FLAG_REENTER, sdev->request_queue); |
| 446 | __blk_run_queue(sdev->request_queue); | 446 | __blk_run_queue(sdev->request_queue, false); |
| 447 | if (flagset) | 447 | if (flagset) |
| 448 | queue_flag_clear(QUEUE_FLAG_REENTER, sdev->request_queue); | 448 | queue_flag_clear(QUEUE_FLAG_REENTER, sdev->request_queue); |
| 449 | spin_unlock(sdev->request_queue->queue_lock); | 449 | spin_unlock(sdev->request_queue->queue_lock); |
diff --git a/drivers/scsi/scsi_transport_fc.c b/drivers/scsi/scsi_transport_fc.c index 998c01be323..5c3ccfc6b62 100644 --- a/drivers/scsi/scsi_transport_fc.c +++ b/drivers/scsi/scsi_transport_fc.c | |||
| @@ -3829,7 +3829,7 @@ fc_bsg_goose_queue(struct fc_rport *rport) | |||
| 3829 | !test_bit(QUEUE_FLAG_REENTER, &rport->rqst_q->queue_flags); | 3829 | !test_bit(QUEUE_FLAG_REENTER, &rport->rqst_q->queue_flags); |
| 3830 | if (flagset) | 3830 | if (flagset) |
| 3831 | queue_flag_set(QUEUE_FLAG_REENTER, rport->rqst_q); | 3831 | queue_flag_set(QUEUE_FLAG_REENTER, rport->rqst_q); |
| 3832 | __blk_run_queue(rport->rqst_q); | 3832 | __blk_run_queue(rport->rqst_q, false); |
| 3833 | if (flagset) | 3833 | if (flagset) |
| 3834 | queue_flag_clear(QUEUE_FLAG_REENTER, rport->rqst_q); | 3834 | queue_flag_clear(QUEUE_FLAG_REENTER, rport->rqst_q); |
| 3835 | spin_unlock_irqrestore(rport->rqst_q->queue_lock, flags); | 3835 | spin_unlock_irqrestore(rport->rqst_q->queue_lock, flags); |
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index 4d18ff34670..d5063e1b555 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h | |||
| @@ -699,7 +699,7 @@ extern void blk_start_queue(struct request_queue *q); | |||
| 699 | extern void blk_stop_queue(struct request_queue *q); | 699 | extern void blk_stop_queue(struct request_queue *q); |
| 700 | extern void blk_sync_queue(struct request_queue *q); | 700 | extern void blk_sync_queue(struct request_queue *q); |
| 701 | extern void __blk_stop_queue(struct request_queue *q); | 701 | extern void __blk_stop_queue(struct request_queue *q); |
| 702 | extern void __blk_run_queue(struct request_queue *); | 702 | extern void __blk_run_queue(struct request_queue *q, bool force_kblockd); |
| 703 | extern void blk_run_queue(struct request_queue *); | 703 | extern void blk_run_queue(struct request_queue *); |
| 704 | extern int blk_rq_map_user(struct request_queue *, struct request *, | 704 | extern int blk_rq_map_user(struct request_queue *, struct request *, |
| 705 | struct rq_map_data *, void __user *, unsigned long, | 705 | struct rq_map_data *, void __user *, unsigned long, |
| @@ -1088,7 +1088,6 @@ static inline void put_dev_sector(Sector p) | |||
| 1088 | 1088 | ||
| 1089 | struct work_struct; | 1089 | struct work_struct; |
| 1090 | int kblockd_schedule_work(struct request_queue *q, struct work_struct *work); | 1090 | int kblockd_schedule_work(struct request_queue *q, struct work_struct *work); |
| 1091 | int kblockd_schedule_delayed_work(struct request_queue *q, struct delayed_work *dwork, unsigned long delay); | ||
| 1092 | 1091 | ||
| 1093 | #ifdef CONFIG_BLK_CGROUP | 1092 | #ifdef CONFIG_BLK_CGROUP |
| 1094 | /* | 1093 | /* |
| @@ -1136,7 +1135,6 @@ static inline uint64_t rq_io_start_time_ns(struct request *req) | |||
| 1136 | extern int blk_throtl_init(struct request_queue *q); | 1135 | extern int blk_throtl_init(struct request_queue *q); |
| 1137 | extern void blk_throtl_exit(struct request_queue *q); | 1136 | extern void blk_throtl_exit(struct request_queue *q); |
| 1138 | extern int blk_throtl_bio(struct request_queue *q, struct bio **bio); | 1137 | extern int blk_throtl_bio(struct request_queue *q, struct bio **bio); |
| 1139 | extern void throtl_schedule_delayed_work(struct request_queue *q, unsigned long delay); | ||
| 1140 | extern void throtl_shutdown_timer_wq(struct request_queue *q); | 1138 | extern void throtl_shutdown_timer_wq(struct request_queue *q); |
| 1141 | #else /* CONFIG_BLK_DEV_THROTTLING */ | 1139 | #else /* CONFIG_BLK_DEV_THROTTLING */ |
| 1142 | static inline int blk_throtl_bio(struct request_queue *q, struct bio **bio) | 1140 | static inline int blk_throtl_bio(struct request_queue *q, struct bio **bio) |
| @@ -1146,7 +1144,6 @@ static inline int blk_throtl_bio(struct request_queue *q, struct bio **bio) | |||
| 1146 | 1144 | ||
| 1147 | static inline int blk_throtl_init(struct request_queue *q) { return 0; } | 1145 | static inline int blk_throtl_init(struct request_queue *q) { return 0; } |
| 1148 | static inline int blk_throtl_exit(struct request_queue *q) { return 0; } | 1146 | static inline int blk_throtl_exit(struct request_queue *q) { return 0; } |
| 1149 | static inline void throtl_schedule_delayed_work(struct request_queue *q, unsigned long delay) {} | ||
| 1150 | static inline void throtl_shutdown_timer_wq(struct request_queue *q) {} | 1147 | static inline void throtl_shutdown_timer_wq(struct request_queue *q) {} |
| 1151 | #endif /* CONFIG_BLK_DEV_THROTTLING */ | 1148 | #endif /* CONFIG_BLK_DEV_THROTTLING */ |
| 1152 | 1149 | ||
diff --git a/include/linux/blktrace_api.h b/include/linux/blktrace_api.h index 3395cf7130f..b22fb0d3db0 100644 --- a/include/linux/blktrace_api.h +++ b/include/linux/blktrace_api.h | |||
| @@ -245,7 +245,6 @@ static inline int blk_cmd_buf_len(struct request *rq) | |||
| 245 | 245 | ||
| 246 | extern void blk_dump_cmd(char *buf, struct request *rq); | 246 | extern void blk_dump_cmd(char *buf, struct request *rq); |
| 247 | extern void blk_fill_rwbs(char *rwbs, u32 rw, int bytes); | 247 | extern void blk_fill_rwbs(char *rwbs, u32 rw, int bytes); |
| 248 | extern void blk_fill_rwbs_rq(char *rwbs, struct request *rq); | ||
| 249 | 248 | ||
| 250 | #endif /* CONFIG_EVENT_TRACING && CONFIG_BLOCK */ | 249 | #endif /* CONFIG_EVENT_TRACING && CONFIG_BLOCK */ |
| 251 | 250 | ||
diff --git a/include/trace/events/block.h b/include/trace/events/block.h index aba421d68f6..78f18adb49c 100644 --- a/include/trace/events/block.h +++ b/include/trace/events/block.h | |||
| @@ -31,7 +31,7 @@ DECLARE_EVENT_CLASS(block_rq_with_error, | |||
| 31 | 0 : blk_rq_sectors(rq); | 31 | 0 : blk_rq_sectors(rq); |
| 32 | __entry->errors = rq->errors; | 32 | __entry->errors = rq->errors; |
| 33 | 33 | ||
| 34 | blk_fill_rwbs_rq(__entry->rwbs, rq); | 34 | blk_fill_rwbs(__entry->rwbs, rq->cmd_flags, blk_rq_bytes(rq)); |
| 35 | blk_dump_cmd(__get_str(cmd), rq); | 35 | blk_dump_cmd(__get_str(cmd), rq); |
| 36 | ), | 36 | ), |
| 37 | 37 | ||
| @@ -118,7 +118,7 @@ DECLARE_EVENT_CLASS(block_rq, | |||
| 118 | __entry->bytes = (rq->cmd_type == REQ_TYPE_BLOCK_PC) ? | 118 | __entry->bytes = (rq->cmd_type == REQ_TYPE_BLOCK_PC) ? |
| 119 | blk_rq_bytes(rq) : 0; | 119 | blk_rq_bytes(rq) : 0; |
| 120 | 120 | ||
| 121 | blk_fill_rwbs_rq(__entry->rwbs, rq); | 121 | blk_fill_rwbs(__entry->rwbs, rq->cmd_flags, blk_rq_bytes(rq)); |
| 122 | blk_dump_cmd(__get_str(cmd), rq); | 122 | blk_dump_cmd(__get_str(cmd), rq); |
| 123 | memcpy(__entry->comm, current->comm, TASK_COMM_LEN); | 123 | memcpy(__entry->comm, current->comm, TASK_COMM_LEN); |
| 124 | ), | 124 | ), |
| @@ -563,7 +563,7 @@ TRACE_EVENT(block_rq_remap, | |||
| 563 | __entry->nr_sector = blk_rq_sectors(rq); | 563 | __entry->nr_sector = blk_rq_sectors(rq); |
| 564 | __entry->old_dev = dev; | 564 | __entry->old_dev = dev; |
| 565 | __entry->old_sector = from; | 565 | __entry->old_sector = from; |
| 566 | blk_fill_rwbs_rq(__entry->rwbs, rq); | 566 | blk_fill_rwbs(__entry->rwbs, rq->cmd_flags, blk_rq_bytes(rq)); |
| 567 | ), | 567 | ), |
| 568 | 568 | ||
| 569 | TP_printk("%d,%d %s %llu + %u <- (%d,%d) %llu", | 569 | TP_printk("%d,%d %s %llu + %u <- (%d,%d) %llu", |
diff --git a/kernel/trace/blktrace.c b/kernel/trace/blktrace.c index d95721f3370..cbafed7d4f3 100644 --- a/kernel/trace/blktrace.c +++ b/kernel/trace/blktrace.c | |||
| @@ -1827,21 +1827,5 @@ void blk_fill_rwbs(char *rwbs, u32 rw, int bytes) | |||
| 1827 | rwbs[i] = '\0'; | 1827 | rwbs[i] = '\0'; |
| 1828 | } | 1828 | } |
| 1829 | 1829 | ||
| 1830 | void blk_fill_rwbs_rq(char *rwbs, struct request *rq) | ||
| 1831 | { | ||
| 1832 | int rw = rq->cmd_flags & 0x03; | ||
| 1833 | int bytes; | ||
| 1834 | |||
| 1835 | if (rq->cmd_flags & REQ_DISCARD) | ||
| 1836 | rw |= REQ_DISCARD; | ||
| 1837 | |||
| 1838 | if (rq->cmd_flags & REQ_SECURE) | ||
| 1839 | rw |= REQ_SECURE; | ||
| 1840 | |||
| 1841 | bytes = blk_rq_bytes(rq); | ||
| 1842 | |||
| 1843 | blk_fill_rwbs(rwbs, rw, bytes); | ||
| 1844 | } | ||
| 1845 | |||
| 1846 | #endif /* CONFIG_EVENT_TRACING */ | 1830 | #endif /* CONFIG_EVENT_TRACING */ |
| 1847 | 1831 | ||
