1
2
3
4
5
6
7
8
9
10
11
12
13
14#include <linux/kernel.h>
15#include <linux/module.h>
16#include <linux/backing-dev.h>
17#include <linux/bio.h>
18#include <linux/blkdev.h>
19#include <linux/blk-mq.h>
20#include <linux/highmem.h>
21#include <linux/mm.h>
22#include <linux/kernel_stat.h>
23#include <linux/string.h>
24#include <linux/init.h>
25#include <linux/completion.h>
26#include <linux/slab.h>
27#include <linux/swap.h>
28#include <linux/writeback.h>
29#include <linux/task_io_accounting_ops.h>
30#include <linux/fault-inject.h>
31#include <linux/list_sort.h>
32#include <linux/delay.h>
33#include <linux/ratelimit.h>
34#include <linux/pm_runtime.h>
35
36#define CREATE_TRACE_POINTS
37#include <trace/events/block.h>
38
39#include "blk.h"
40#include "blk-cgroup.h"
41
42EXPORT_TRACEPOINT_SYMBOL_GPL(block_bio_remap);
43EXPORT_TRACEPOINT_SYMBOL_GPL(block_rq_remap);
44EXPORT_TRACEPOINT_SYMBOL_GPL(block_bio_complete);
45EXPORT_TRACEPOINT_SYMBOL_GPL(block_unplug);
46
47DEFINE_IDA(blk_queue_ida);
48
49
50
51
52struct kmem_cache *request_cachep = NULL;
53
54
55
56
57struct kmem_cache *blk_requestq_cachep;
58
59
60
61
62static struct workqueue_struct *kblockd_workqueue;
63
64void blk_queue_congestion_threshold(struct request_queue *q)
65{
66 int nr;
67
68 nr = q->nr_requests - (q->nr_requests / 8) + 1;
69 if (nr > q->nr_requests)
70 nr = q->nr_requests;
71 q->nr_congestion_on = nr;
72
73 nr = q->nr_requests - (q->nr_requests / 8) - (q->nr_requests / 16) - 1;
74 if (nr < 1)
75 nr = 1;
76 q->nr_congestion_off = nr;
77}
78
79
80
81
82
83
84
85
86
87
88struct backing_dev_info *blk_get_backing_dev_info(struct block_device *bdev)
89{
90 struct backing_dev_info *ret = NULL;
91 struct request_queue *q = bdev_get_queue(bdev);
92
93 if (q)
94 ret = &q->backing_dev_info;
95 return ret;
96}
97EXPORT_SYMBOL(blk_get_backing_dev_info);
98
99void blk_rq_init(struct request_queue *q, struct request *rq)
100{
101 memset(rq, 0, sizeof(*rq));
102
103 INIT_LIST_HEAD(&rq->queuelist);
104 INIT_LIST_HEAD(&rq->timeout_list);
105 rq->cpu = -1;
106 rq->q = q;
107 rq->__sector = (sector_t) -1;
108 INIT_HLIST_NODE(&rq->hash);
109 RB_CLEAR_NODE(&rq->rb_node);
110 rq->cmd = rq->__cmd;
111 rq->cmd_len = BLK_MAX_CDB;
112 rq->tag = -1;
113 rq->start_time = jiffies;
114 set_start_time_ns(rq);
115 rq->part = NULL;
116}
117EXPORT_SYMBOL(blk_rq_init);
118
119static void req_bio_endio(struct request *rq, struct bio *bio,
120 unsigned int nbytes, int error)
121{
122 if (error)
123 clear_bit(BIO_UPTODATE, &bio->bi_flags);
124 else if (!test_bit(BIO_UPTODATE, &bio->bi_flags))
125 error = -EIO;
126
127 if (unlikely(rq->cmd_flags & REQ_QUIET))
128 set_bit(BIO_QUIET, &bio->bi_flags);
129
130 bio_advance(bio, nbytes);
131
132
133 if (bio->bi_size == 0 && !(rq->cmd_flags & REQ_FLUSH_SEQ))
134 bio_endio(bio, error);
135}
136
137void blk_dump_rq_flags(struct request *rq, char *msg)
138{
139 int bit;
140
141 printk(KERN_INFO "%s: dev %s: type=%x, flags=%llx\n", msg,
142 rq->rq_disk ? rq->rq_disk->disk_name : "?", rq->cmd_type,
143 (unsigned long long) rq->cmd_flags);
144
145 printk(KERN_INFO " sector %llu, nr/cnr %u/%u\n",
146 (unsigned long long)blk_rq_pos(rq),
147 blk_rq_sectors(rq), blk_rq_cur_sectors(rq));
148 printk(KERN_INFO " bio %p, biotail %p, buffer %p, len %u\n",
149 rq->bio, rq->biotail, rq->buffer, blk_rq_bytes(rq));
150
151 if (rq->cmd_type == REQ_TYPE_BLOCK_PC) {
152 printk(KERN_INFO " cdb: ");
153 for (bit = 0; bit < BLK_MAX_CDB; bit++)
154 printk("%02x ", rq->cmd[bit]);
155 printk("\n");
156 }
157}
158EXPORT_SYMBOL(blk_dump_rq_flags);
159
160static void blk_delay_work(struct work_struct *work)
161{
162 struct request_queue *q;
163
164 q = container_of(work, struct request_queue, delay_work.work);
165 spin_lock_irq(q->queue_lock);
166 __blk_run_queue(q);
167 spin_unlock_irq(q->queue_lock);
168}
169
170
171
172
173
174
175
176
177
178
179
180void blk_delay_queue(struct request_queue *q, unsigned long msecs)
181{
182 if (likely(!blk_queue_dead(q)))
183 queue_delayed_work(kblockd_workqueue, &q->delay_work,
184 msecs_to_jiffies(msecs));
185}
186EXPORT_SYMBOL(blk_delay_queue);
187
188
189
190
191
192
193
194
195
196
197void blk_start_queue(struct request_queue *q)
198{
199 WARN_ON(!irqs_disabled());
200
201 queue_flag_clear(QUEUE_FLAG_STOPPED, q);
202 __blk_run_queue(q);
203}
204EXPORT_SYMBOL(blk_start_queue);
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220void blk_stop_queue(struct request_queue *q)
221{
222 cancel_delayed_work(&q->delay_work);
223 queue_flag_set(QUEUE_FLAG_STOPPED, q);
224}
225EXPORT_SYMBOL(blk_stop_queue);
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245void blk_sync_queue(struct request_queue *q)
246{
247 del_timer_sync(&q->timeout);
248 cancel_delayed_work_sync(&q->delay_work);
249}
250EXPORT_SYMBOL(blk_sync_queue);
251
252
253
254
255
256
257
258
259
260
261
262
263inline void __blk_run_queue_uncond(struct request_queue *q)
264{
265 if (unlikely(blk_queue_dead(q)))
266 return;
267
268
269
270
271
272
273
274
275 q->request_fn_active++;
276 q->request_fn(q);
277 q->request_fn_active--;
278}
279
280
281
282
283
284
285
286
287
288void __blk_run_queue(struct request_queue *q)
289{
290 if (unlikely(blk_queue_stopped(q)))
291 return;
292
293 __blk_run_queue_uncond(q);
294}
295EXPORT_SYMBOL(__blk_run_queue);
296
297
298
299
300
301
302
303
304
305void blk_run_queue_async(struct request_queue *q)
306{
307 if (likely(!blk_queue_stopped(q) && !blk_queue_dead(q)))
308 mod_delayed_work(kblockd_workqueue, &q->delay_work, 0);
309}
310EXPORT_SYMBOL(blk_run_queue_async);
311
312
313
314
315
316
317
318
319
320void blk_run_queue(struct request_queue *q)
321{
322 unsigned long flags;
323
324 spin_lock_irqsave(q->queue_lock, flags);
325 __blk_run_queue(q);
326 spin_unlock_irqrestore(q->queue_lock, flags);
327}
328EXPORT_SYMBOL(blk_run_queue);
329
330void blk_put_queue(struct request_queue *q)
331{
332 kobject_put(&q->kobj);
333}
334EXPORT_SYMBOL(blk_put_queue);
335
336
337
338
339
340
341
342
343
344
345static void __blk_drain_queue(struct request_queue *q, bool drain_all)
346 __releases(q->queue_lock)
347 __acquires(q->queue_lock)
348{
349 int i;
350
351 lockdep_assert_held(q->queue_lock);
352
353 while (true) {
354 bool drain = false;
355
356
357
358
359
360 if (q->elevator)
361 elv_drain_elevator(q);
362
363 blkcg_drain_queue(q);
364
365
366
367
368
369
370
371
372 if (!list_empty(&q->queue_head) && q->request_fn)
373 __blk_run_queue(q);
374
375 drain |= q->nr_rqs_elvpriv;
376 drain |= q->request_fn_active;
377
378
379
380
381
382
383 if (drain_all) {
384 drain |= !list_empty(&q->queue_head);
385 for (i = 0; i < 2; i++) {
386 drain |= q->nr_rqs[i];
387 drain |= q->in_flight[i];
388 drain |= !list_empty(&q->flush_queue[i]);
389 }
390 }
391
392 if (!drain)
393 break;
394
395 spin_unlock_irq(q->queue_lock);
396
397 msleep(10);
398
399 spin_lock_irq(q->queue_lock);
400 }
401
402
403
404
405
406
407 if (q->request_fn) {
408 struct request_list *rl;
409
410 blk_queue_for_each_rl(rl, q)
411 for (i = 0; i < ARRAY_SIZE(rl->wait); i++)
412 wake_up_all(&rl->wait[i]);
413 }
414}
415
416
417
418
419
420
421
422
423
424
425
426void blk_queue_bypass_start(struct request_queue *q)
427{
428 bool drain;
429
430 spin_lock_irq(q->queue_lock);
431 drain = !q->bypass_depth++;
432 queue_flag_set(QUEUE_FLAG_BYPASS, q);
433 spin_unlock_irq(q->queue_lock);
434
435 if (drain) {
436 spin_lock_irq(q->queue_lock);
437 __blk_drain_queue(q, false);
438 spin_unlock_irq(q->queue_lock);
439
440
441 synchronize_rcu();
442 }
443}
444EXPORT_SYMBOL_GPL(blk_queue_bypass_start);
445
446
447
448
449
450
451
452void blk_queue_bypass_end(struct request_queue *q)
453{
454 spin_lock_irq(q->queue_lock);
455 if (!--q->bypass_depth)
456 queue_flag_clear(QUEUE_FLAG_BYPASS, q);
457 WARN_ON_ONCE(q->bypass_depth < 0);
458 spin_unlock_irq(q->queue_lock);
459}
460EXPORT_SYMBOL_GPL(blk_queue_bypass_end);
461
462
463
464
465
466
467
468
469void blk_cleanup_queue(struct request_queue *q)
470{
471 spinlock_t *lock = q->queue_lock;
472
473
474 mutex_lock(&q->sysfs_lock);
475 queue_flag_set_unlocked(QUEUE_FLAG_DYING, q);
476 spin_lock_irq(lock);
477
478
479
480
481
482
483
484
485
486
487 q->bypass_depth++;
488 queue_flag_set(QUEUE_FLAG_BYPASS, q);
489
490 queue_flag_set(QUEUE_FLAG_NOMERGES, q);
491 queue_flag_set(QUEUE_FLAG_NOXMERGES, q);
492 queue_flag_set(QUEUE_FLAG_DYING, q);
493 spin_unlock_irq(lock);
494 mutex_unlock(&q->sysfs_lock);
495
496
497
498
499
500 spin_lock_irq(lock);
501 __blk_drain_queue(q, true);
502 queue_flag_set(QUEUE_FLAG_DEAD, q);
503 spin_unlock_irq(lock);
504
505
506 del_timer_sync(&q->backing_dev_info.laptop_mode_wb_timer);
507 blk_sync_queue(q);
508
509 spin_lock_irq(lock);
510 if (q->queue_lock != &q->__queue_lock)
511 q->queue_lock = &q->__queue_lock;
512 spin_unlock_irq(lock);
513
514
515 blk_put_queue(q);
516}
517EXPORT_SYMBOL(blk_cleanup_queue);
518
519int blk_init_rl(struct request_list *rl, struct request_queue *q,
520 gfp_t gfp_mask)
521{
522 if (unlikely(rl->rq_pool))
523 return 0;
524
525 rl->q = q;
526 rl->count[BLK_RW_SYNC] = rl->count[BLK_RW_ASYNC] = 0;
527 rl->starved[BLK_RW_SYNC] = rl->starved[BLK_RW_ASYNC] = 0;
528 init_waitqueue_head(&rl->wait[BLK_RW_SYNC]);
529 init_waitqueue_head(&rl->wait[BLK_RW_ASYNC]);
530
531 rl->rq_pool = mempool_create_node(BLKDEV_MIN_RQ, mempool_alloc_slab,
532 mempool_free_slab, request_cachep,
533 gfp_mask, q->node);
534 if (!rl->rq_pool)
535 return -ENOMEM;
536
537 return 0;
538}
539
540void blk_exit_rl(struct request_list *rl)
541{
542 if (rl->rq_pool)
543 mempool_destroy(rl->rq_pool);
544}
545
546struct request_queue *blk_alloc_queue(gfp_t gfp_mask)
547{
548 return blk_alloc_queue_node(gfp_mask, NUMA_NO_NODE);
549}
550EXPORT_SYMBOL(blk_alloc_queue);
551
552struct request_queue *blk_alloc_queue_node(gfp_t gfp_mask, int node_id)
553{
554 struct request_queue *q;
555 int err;
556
557 q = kmem_cache_alloc_node(blk_requestq_cachep,
558 gfp_mask | __GFP_ZERO, node_id);
559 if (!q)
560 return NULL;
561
562 if (percpu_counter_init(&q->mq_usage_counter, 0))
563 goto fail_q;
564
565 q->id = ida_simple_get(&blk_queue_ida, 0, 0, gfp_mask);
566 if (q->id < 0)
567 goto fail_c;
568
569 q->backing_dev_info.ra_pages =
570 (VM_MAX_READAHEAD * 1024) / PAGE_CACHE_SIZE;
571 q->backing_dev_info.state = 0;
572 q->backing_dev_info.capabilities = BDI_CAP_MAP_COPY;
573 q->backing_dev_info.name = "block";
574 q->node = node_id;
575
576 err = bdi_init(&q->backing_dev_info);
577 if (err)
578 goto fail_id;
579
580 setup_timer(&q->backing_dev_info.laptop_mode_wb_timer,
581 laptop_mode_timer_fn, (unsigned long) q);
582 setup_timer(&q->timeout, blk_rq_timed_out_timer, (unsigned long) q);
583 INIT_LIST_HEAD(&q->queue_head);
584 INIT_LIST_HEAD(&q->timeout_list);
585 INIT_LIST_HEAD(&q->icq_list);
586#ifdef CONFIG_BLK_CGROUP
587 INIT_LIST_HEAD(&q->blkg_list);
588#endif
589 INIT_LIST_HEAD(&q->flush_queue[0]);
590 INIT_LIST_HEAD(&q->flush_queue[1]);
591 INIT_LIST_HEAD(&q->flush_data_in_flight);
592 INIT_DELAYED_WORK(&q->delay_work, blk_delay_work);
593
594 kobject_init(&q->kobj, &blk_queue_ktype);
595
596 mutex_init(&q->sysfs_lock);
597 spin_lock_init(&q->__queue_lock);
598
599
600
601
602
603 q->queue_lock = &q->__queue_lock;
604
605
606
607
608
609
610
611 q->bypass_depth = 1;
612 __set_bit(QUEUE_FLAG_BYPASS, &q->queue_flags);
613
614 init_waitqueue_head(&q->mq_freeze_wq);
615
616 if (blkcg_init_queue(q))
617 goto fail_bdi;
618
619 return q;
620
621fail_bdi:
622 bdi_destroy(&q->backing_dev_info);
623fail_id:
624 ida_simple_remove(&blk_queue_ida, q->id);
625fail_c:
626 percpu_counter_destroy(&q->mq_usage_counter);
627fail_q:
628 kmem_cache_free(blk_requestq_cachep, q);
629 return NULL;
630}
631EXPORT_SYMBOL(blk_alloc_queue_node);
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666struct request_queue *blk_init_queue(request_fn_proc *rfn, spinlock_t *lock)
667{
668 return blk_init_queue_node(rfn, lock, NUMA_NO_NODE);
669}
670EXPORT_SYMBOL(blk_init_queue);
671
672struct request_queue *
673blk_init_queue_node(request_fn_proc *rfn, spinlock_t *lock, int node_id)
674{
675 struct request_queue *uninit_q, *q;
676
677 uninit_q = blk_alloc_queue_node(GFP_KERNEL, node_id);
678 if (!uninit_q)
679 return NULL;
680
681 q = blk_init_allocated_queue(uninit_q, rfn, lock);
682 if (!q)
683 blk_cleanup_queue(uninit_q);
684
685 return q;
686}
687EXPORT_SYMBOL(blk_init_queue_node);
688
689struct request_queue *
690blk_init_allocated_queue(struct request_queue *q, request_fn_proc *rfn,
691 spinlock_t *lock)
692{
693 if (!q)
694 return NULL;
695
696 if (blk_init_rl(&q->root_rl, q, GFP_KERNEL))
697 return NULL;
698
699 q->request_fn = rfn;
700 q->prep_rq_fn = NULL;
701 q->unprep_rq_fn = NULL;
702 q->queue_flags |= QUEUE_FLAG_DEFAULT;
703
704
705 if (lock)
706 q->queue_lock = lock;
707
708
709
710
711 blk_queue_make_request(q, blk_queue_bio);
712
713 q->sg_reserved_size = INT_MAX;
714
715
716 mutex_lock(&q->sysfs_lock);
717
718
719 if (elevator_init(q, NULL)) {
720 mutex_unlock(&q->sysfs_lock);
721 return NULL;
722 }
723
724 mutex_unlock(&q->sysfs_lock);
725
726 return q;
727}
728EXPORT_SYMBOL(blk_init_allocated_queue);
729
730bool blk_get_queue(struct request_queue *q)
731{
732 if (likely(!blk_queue_dying(q))) {
733 __blk_get_queue(q);
734 return true;
735 }
736
737 return false;
738}
739EXPORT_SYMBOL(blk_get_queue);
740
741static inline void blk_free_request(struct request_list *rl, struct request *rq)
742{
743 if (rq->cmd_flags & REQ_ELVPRIV) {
744 elv_put_request(rl->q, rq);
745 if (rq->elv.icq)
746 put_io_context(rq->elv.icq->ioc);
747 }
748
749 mempool_free(rq, rl->rq_pool);
750}
751
752
753
754
755
756static inline int ioc_batching(struct request_queue *q, struct io_context *ioc)
757{
758 if (!ioc)
759 return 0;
760
761
762
763
764
765
766 return ioc->nr_batch_requests == q->nr_batching ||
767 (ioc->nr_batch_requests > 0
768 && time_before(jiffies, ioc->last_waited + BLK_BATCH_TIME));
769}
770
771
772
773
774
775
776
777static void ioc_set_batching(struct request_queue *q, struct io_context *ioc)
778{
779 if (!ioc || ioc_batching(q, ioc))
780 return;
781
782 ioc->nr_batch_requests = q->nr_batching;
783 ioc->last_waited = jiffies;
784}
785
786static void __freed_request(struct request_list *rl, int sync)
787{
788 struct request_queue *q = rl->q;
789
790
791
792
793
794 if (rl == &q->root_rl &&
795 rl->count[sync] < queue_congestion_off_threshold(q))
796 blk_clear_queue_congested(q, sync);
797
798 if (rl->count[sync] + 1 <= q->nr_requests) {
799 if (waitqueue_active(&rl->wait[sync]))
800 wake_up(&rl->wait[sync]);
801
802 blk_clear_rl_full(rl, sync);
803 }
804}
805
806
807
808
809
810static void freed_request(struct request_list *rl, unsigned int flags)
811{
812 struct request_queue *q = rl->q;
813 int sync = rw_is_sync(flags);
814
815 q->nr_rqs[sync]--;
816 rl->count[sync]--;
817 if (flags & REQ_ELVPRIV)
818 q->nr_rqs_elvpriv--;
819
820 __freed_request(rl, sync);
821
822 if (unlikely(rl->starved[sync ^ 1]))
823 __freed_request(rl, sync ^ 1);
824}
825
826
827
828
829
830static bool blk_rq_should_init_elevator(struct bio *bio)
831{
832 if (!bio)
833 return true;
834
835
836
837
838
839 if (bio->bi_rw & (REQ_FLUSH | REQ_FUA))
840 return false;
841
842 return true;
843}
844
845
846
847
848
849
850
851
852static struct io_context *rq_ioc(struct bio *bio)
853{
854#ifdef CONFIG_BLK_CGROUP
855 if (bio && bio->bi_ioc)
856 return bio->bi_ioc;
857#endif
858 return current->io_context;
859}
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875static struct request *__get_request(struct request_list *rl, int rw_flags,
876 struct bio *bio, gfp_t gfp_mask)
877{
878 struct request_queue *q = rl->q;
879 struct request *rq;
880 struct elevator_type *et = q->elevator->type;
881 struct io_context *ioc = rq_ioc(bio);
882 struct io_cq *icq = NULL;
883 const bool is_sync = rw_is_sync(rw_flags) != 0;
884 int may_queue;
885
886 if (unlikely(blk_queue_dying(q)))
887 return NULL;
888
889 may_queue = elv_may_queue(q, rw_flags);
890 if (may_queue == ELV_MQUEUE_NO)
891 goto rq_starved;
892
893 if (rl->count[is_sync]+1 >= queue_congestion_on_threshold(q)) {
894 if (rl->count[is_sync]+1 >= q->nr_requests) {
895
896
897
898
899
900
901 if (!blk_rl_full(rl, is_sync)) {
902 ioc_set_batching(q, ioc);
903 blk_set_rl_full(rl, is_sync);
904 } else {
905 if (may_queue != ELV_MQUEUE_MUST
906 && !ioc_batching(q, ioc)) {
907
908
909
910
911
912 return NULL;
913 }
914 }
915 }
916
917
918
919
920 if (rl == &q->root_rl)
921 blk_set_queue_congested(q, is_sync);
922 }
923
924
925
926
927
928
929 if (rl->count[is_sync] >= (3 * q->nr_requests / 2))
930 return NULL;
931
932 q->nr_rqs[is_sync]++;
933 rl->count[is_sync]++;
934 rl->starved[is_sync] = 0;
935
936
937
938
939
940
941
942
943
944
945
946 if (blk_rq_should_init_elevator(bio) && !blk_queue_bypass(q)) {
947 rw_flags |= REQ_ELVPRIV;
948 q->nr_rqs_elvpriv++;
949 if (et->icq_cache && ioc)
950 icq = ioc_lookup_icq(ioc, q);
951 }
952
953 if (blk_queue_io_stat(q))
954 rw_flags |= REQ_IO_STAT;
955 spin_unlock_irq(q->queue_lock);
956
957
958 rq = mempool_alloc(rl->rq_pool, gfp_mask);
959 if (!rq)
960 goto fail_alloc;
961
962 blk_rq_init(q, rq);
963 blk_rq_set_rl(rq, rl);
964 rq->cmd_flags = rw_flags | REQ_ALLOCED;
965
966
967 if (rw_flags & REQ_ELVPRIV) {
968 if (unlikely(et->icq_cache && !icq)) {
969 if (ioc)
970 icq = ioc_create_icq(ioc, q, gfp_mask);
971 if (!icq)
972 goto fail_elvpriv;
973 }
974
975 rq->elv.icq = icq;
976 if (unlikely(elv_set_request(q, rq, bio, gfp_mask)))
977 goto fail_elvpriv;
978
979
980 if (icq)
981 get_io_context(icq->ioc);
982 }
983out:
984
985
986
987
988
989
990 if (ioc_batching(q, ioc))
991 ioc->nr_batch_requests--;
992
993 trace_block_getrq(q, bio, rw_flags & 1);
994 return rq;
995
996fail_elvpriv:
997
998
999
1000
1001
1002
1003 printk_ratelimited(KERN_WARNING "%s: request aux data allocation failed, iosched may be disturbed\n",
1004 dev_name(q->backing_dev_info.dev));
1005
1006 rq->cmd_flags &= ~REQ_ELVPRIV;
1007 rq->elv.icq = NULL;
1008
1009 spin_lock_irq(q->queue_lock);
1010 q->nr_rqs_elvpriv--;
1011 spin_unlock_irq(q->queue_lock);
1012 goto out;
1013
1014fail_alloc:
1015
1016
1017
1018
1019
1020
1021
1022 spin_lock_irq(q->queue_lock);
1023 freed_request(rl, rw_flags);
1024
1025
1026
1027
1028
1029
1030
1031
1032rq_starved:
1033 if (unlikely(rl->count[is_sync] == 0))
1034 rl->starved[is_sync] = 1;
1035 return NULL;
1036}
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052static struct request *get_request(struct request_queue *q, int rw_flags,
1053 struct bio *bio, gfp_t gfp_mask)
1054{
1055 const bool is_sync = rw_is_sync(rw_flags) != 0;
1056 DEFINE_WAIT(wait);
1057 struct request_list *rl;
1058 struct request *rq;
1059
1060 rl = blk_get_rl(q, bio);
1061retry:
1062 rq = __get_request(rl, rw_flags, bio, gfp_mask);
1063 if (rq)
1064 return rq;
1065
1066 if (!(gfp_mask & __GFP_WAIT) || unlikely(blk_queue_dying(q))) {
1067 blk_put_rl(rl);
1068 return NULL;
1069 }
1070
1071
1072 prepare_to_wait_exclusive(&rl->wait[is_sync], &wait,
1073 TASK_UNINTERRUPTIBLE);
1074
1075 trace_block_sleeprq(q, bio, rw_flags & 1);
1076
1077 spin_unlock_irq(q->queue_lock);
1078 io_schedule();
1079
1080
1081
1082
1083
1084
1085 ioc_set_batching(q, current->io_context);
1086
1087 spin_lock_irq(q->queue_lock);
1088 finish_wait(&rl->wait[is_sync], &wait);
1089
1090 goto retry;
1091}
1092
1093static struct request *blk_old_get_request(struct request_queue *q, int rw,
1094 gfp_t gfp_mask)
1095{
1096 struct request *rq;
1097
1098 BUG_ON(rw != READ && rw != WRITE);
1099
1100
1101 create_io_context(gfp_mask, q->node);
1102
1103 spin_lock_irq(q->queue_lock);
1104 rq = get_request(q, rw, NULL, gfp_mask);
1105 if (!rq)
1106 spin_unlock_irq(q->queue_lock);
1107
1108
1109 return rq;
1110}
1111
1112struct request *blk_get_request(struct request_queue *q, int rw, gfp_t gfp_mask)
1113{
1114 if (q->mq_ops)
1115 return blk_mq_alloc_request(q, rw, gfp_mask, false);
1116 else
1117 return blk_old_get_request(q, rw, gfp_mask);
1118}
1119EXPORT_SYMBOL(blk_get_request);
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152struct request *blk_make_request(struct request_queue *q, struct bio *bio,
1153 gfp_t gfp_mask)
1154{
1155 struct request *rq = blk_get_request(q, bio_data_dir(bio), gfp_mask);
1156
1157 if (unlikely(!rq))
1158 return ERR_PTR(-ENOMEM);
1159
1160 for_each_bio(bio) {
1161 struct bio *bounce_bio = bio;
1162 int ret;
1163
1164 blk_queue_bounce(q, &bounce_bio);
1165 ret = blk_rq_append_bio(q, rq, bounce_bio);
1166 if (unlikely(ret)) {
1167 blk_put_request(rq);
1168 return ERR_PTR(ret);
1169 }
1170 }
1171
1172 return rq;
1173}
1174EXPORT_SYMBOL(blk_make_request);
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186void blk_requeue_request(struct request_queue *q, struct request *rq)
1187{
1188 blk_delete_timer(rq);
1189 blk_clear_rq_complete(rq);
1190 trace_block_rq_requeue(q, rq);
1191
1192 if (blk_rq_tagged(rq))
1193 blk_queue_end_tag(q, rq);
1194
1195 BUG_ON(blk_queued_rq(rq));
1196
1197 elv_requeue_request(q, rq);
1198}
1199EXPORT_SYMBOL(blk_requeue_request);
1200
1201static void add_acct_request(struct request_queue *q, struct request *rq,
1202 int where)
1203{
1204 blk_account_io_start(rq, true);
1205 __elv_add_request(q, rq, where);
1206}
1207
1208static void part_round_stats_single(int cpu, struct hd_struct *part,
1209 unsigned long now)
1210{
1211 if (now == part->stamp)
1212 return;
1213
1214 if (part_in_flight(part)) {
1215 __part_stat_add(cpu, part, time_in_queue,
1216 part_in_flight(part) * (now - part->stamp));
1217 __part_stat_add(cpu, part, io_ticks, (now - part->stamp));
1218 }
1219 part->stamp = now;
1220}
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238void part_round_stats(int cpu, struct hd_struct *part)
1239{
1240 unsigned long now = jiffies;
1241
1242 if (part->partno)
1243 part_round_stats_single(cpu, &part_to_disk(part)->part0, now);
1244 part_round_stats_single(cpu, part, now);
1245}
1246EXPORT_SYMBOL_GPL(part_round_stats);
1247
1248#ifdef CONFIG_PM_RUNTIME
1249static void blk_pm_put_request(struct request *rq)
1250{
1251 if (rq->q->dev && !(rq->cmd_flags & REQ_PM) && !--rq->q->nr_pending)
1252 pm_runtime_mark_last_busy(rq->q->dev);
1253}
1254#else
1255static inline void blk_pm_put_request(struct request *rq) {}
1256#endif
1257
1258
1259
1260
1261void __blk_put_request(struct request_queue *q, struct request *req)
1262{
1263 if (unlikely(!q))
1264 return;
1265
1266 blk_pm_put_request(req);
1267
1268 elv_completed_request(q, req);
1269
1270
1271 WARN_ON(req->bio != NULL);
1272
1273
1274
1275
1276
1277 if (req->cmd_flags & REQ_ALLOCED) {
1278 unsigned int flags = req->cmd_flags;
1279 struct request_list *rl = blk_rq_rl(req);
1280
1281 BUG_ON(!list_empty(&req->queuelist));
1282 BUG_ON(!hlist_unhashed(&req->hash));
1283
1284 blk_free_request(rl, req);
1285 freed_request(rl, flags);
1286 blk_put_rl(rl);
1287 }
1288}
1289EXPORT_SYMBOL_GPL(__blk_put_request);
1290
1291void blk_put_request(struct request *req)
1292{
1293 struct request_queue *q = req->q;
1294
1295 if (q->mq_ops)
1296 blk_mq_free_request(req);
1297 else {
1298 unsigned long flags;
1299
1300 spin_lock_irqsave(q->queue_lock, flags);
1301 __blk_put_request(q, req);
1302 spin_unlock_irqrestore(q->queue_lock, flags);
1303 }
1304}
1305EXPORT_SYMBOL(blk_put_request);
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320void blk_add_request_payload(struct request *rq, struct page *page,
1321 unsigned int len)
1322{
1323 struct bio *bio = rq->bio;
1324
1325 bio->bi_io_vec->bv_page = page;
1326 bio->bi_io_vec->bv_offset = 0;
1327 bio->bi_io_vec->bv_len = len;
1328
1329 bio->bi_size = len;
1330 bio->bi_vcnt = 1;
1331 bio->bi_phys_segments = 1;
1332
1333 rq->__data_len = rq->resid_len = len;
1334 rq->nr_phys_segments = 1;
1335 rq->buffer = bio_data(bio);
1336}
1337EXPORT_SYMBOL_GPL(blk_add_request_payload);
1338
1339bool bio_attempt_back_merge(struct request_queue *q, struct request *req,
1340 struct bio *bio)
1341{
1342 const int ff = bio->bi_rw & REQ_FAILFAST_MASK;
1343
1344 if (!ll_back_merge_fn(q, req, bio))
1345 return false;
1346
1347 trace_block_bio_backmerge(q, req, bio);
1348
1349 if ((req->cmd_flags & REQ_FAILFAST_MASK) != ff)
1350 blk_rq_set_mixed_merge(req);
1351
1352 req->biotail->bi_next = bio;
1353 req->biotail = bio;
1354 req->__data_len += bio->bi_size;
1355 req->ioprio = ioprio_best(req->ioprio, bio_prio(bio));
1356
1357 blk_account_io_start(req, false);
1358 return true;
1359}
1360
1361bool bio_attempt_front_merge(struct request_queue *q, struct request *req,
1362 struct bio *bio)
1363{
1364 const int ff = bio->bi_rw & REQ_FAILFAST_MASK;
1365
1366 if (!ll_front_merge_fn(q, req, bio))
1367 return false;
1368
1369 trace_block_bio_frontmerge(q, req, bio);
1370
1371 if ((req->cmd_flags & REQ_FAILFAST_MASK) != ff)
1372 blk_rq_set_mixed_merge(req);
1373
1374 bio->bi_next = req->bio;
1375 req->bio = bio;
1376
1377
1378
1379
1380
1381
1382 req->buffer = bio_data(bio);
1383 req->__sector = bio->bi_sector;
1384 req->__data_len += bio->bi_size;
1385 req->ioprio = ioprio_best(req->ioprio, bio_prio(bio));
1386
1387 blk_account_io_start(req, false);
1388 return true;
1389}
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408bool blk_attempt_plug_merge(struct request_queue *q, struct bio *bio,
1409 unsigned int *request_count)
1410{
1411 struct blk_plug *plug;
1412 struct request *rq;
1413 bool ret = false;
1414 struct list_head *plug_list;
1415
1416 if (blk_queue_nomerges(q))
1417 goto out;
1418
1419 plug = current->plug;
1420 if (!plug)
1421 goto out;
1422 *request_count = 0;
1423
1424 if (q->mq_ops)
1425 plug_list = &plug->mq_list;
1426 else
1427 plug_list = &plug->list;
1428
1429 list_for_each_entry_reverse(rq, plug_list, queuelist) {
1430 int el_ret;
1431
1432 if (rq->q == q)
1433 (*request_count)++;
1434
1435 if (rq->q != q || !blk_rq_merge_ok(rq, bio))
1436 continue;
1437
1438 el_ret = blk_try_merge(rq, bio);
1439 if (el_ret == ELEVATOR_BACK_MERGE) {
1440 ret = bio_attempt_back_merge(q, rq, bio);
1441 if (ret)
1442 break;
1443 } else if (el_ret == ELEVATOR_FRONT_MERGE) {
1444 ret = bio_attempt_front_merge(q, rq, bio);
1445 if (ret)
1446 break;
1447 }
1448 }
1449out:
1450 return ret;
1451}
1452
1453void init_request_from_bio(struct request *req, struct bio *bio)
1454{
1455 req->cmd_type = REQ_TYPE_FS;
1456
1457 req->cmd_flags |= bio->bi_rw & REQ_COMMON_MASK;
1458 if (bio->bi_rw & REQ_RAHEAD)
1459 req->cmd_flags |= REQ_FAILFAST_MASK;
1460
1461 req->errors = 0;
1462 req->__sector = bio->bi_sector;
1463 req->ioprio = bio_prio(bio);
1464 blk_rq_bio_prep(req->q, req, bio);
1465}
1466
1467void blk_queue_bio(struct request_queue *q, struct bio *bio)
1468{
1469 const bool sync = !!(bio->bi_rw & REQ_SYNC);
1470 struct blk_plug *plug;
1471 int el_ret, rw_flags, where = ELEVATOR_INSERT_SORT;
1472 struct request *req;
1473 unsigned int request_count = 0;
1474
1475
1476
1477
1478
1479
1480 blk_queue_bounce(q, &bio);
1481
1482 if (bio_integrity_enabled(bio) && bio_integrity_prep(bio)) {
1483 bio_endio(bio, -EIO);
1484 return;
1485 }
1486
1487 if (bio->bi_rw & (REQ_FLUSH | REQ_FUA)) {
1488 spin_lock_irq(q->queue_lock);
1489 where = ELEVATOR_INSERT_FLUSH;
1490 goto get_rq;
1491 }
1492
1493
1494
1495
1496
1497 if (blk_attempt_plug_merge(q, bio, &request_count))
1498 return;
1499
1500 spin_lock_irq(q->queue_lock);
1501
1502 el_ret = elv_merge(q, &req, bio);
1503 if (el_ret == ELEVATOR_BACK_MERGE) {
1504 if (bio_attempt_back_merge(q, req, bio)) {
1505 elv_bio_merged(q, req, bio);
1506 if (!attempt_back_merge(q, req))
1507 elv_merged_request(q, req, el_ret);
1508 goto out_unlock;
1509 }
1510 } else if (el_ret == ELEVATOR_FRONT_MERGE) {
1511 if (bio_attempt_front_merge(q, req, bio)) {
1512 elv_bio_merged(q, req, bio);
1513 if (!attempt_front_merge(q, req))
1514 elv_merged_request(q, req, el_ret);
1515 goto out_unlock;
1516 }
1517 }
1518
1519get_rq:
1520
1521
1522
1523
1524
1525 rw_flags = bio_data_dir(bio);
1526 if (sync)
1527 rw_flags |= REQ_SYNC;
1528
1529
1530
1531
1532
1533 req = get_request(q, rw_flags, bio, GFP_NOIO);
1534 if (unlikely(!req)) {
1535 bio_endio(bio, -ENODEV);
1536 goto out_unlock;
1537 }
1538
1539
1540
1541
1542
1543
1544
1545 init_request_from_bio(req, bio);
1546
1547 if (test_bit(QUEUE_FLAG_SAME_COMP, &q->queue_flags))
1548 req->cpu = raw_smp_processor_id();
1549
1550 plug = current->plug;
1551 if (plug) {
1552
1553
1554
1555
1556 if (!request_count)
1557 trace_block_plug(q);
1558 else {
1559 if (request_count >= BLK_MAX_REQUEST_COUNT) {
1560 blk_flush_plug_list(plug, false);
1561 trace_block_plug(q);
1562 }
1563 }
1564 list_add_tail(&req->queuelist, &plug->list);
1565 blk_account_io_start(req, true);
1566 } else {
1567 spin_lock_irq(q->queue_lock);
1568 add_acct_request(q, req, where);
1569 __blk_run_queue(q);
1570out_unlock:
1571 spin_unlock_irq(q->queue_lock);
1572 }
1573}
1574EXPORT_SYMBOL_GPL(blk_queue_bio);
1575
1576
1577
1578
1579static inline void blk_partition_remap(struct bio *bio)
1580{
1581 struct block_device *bdev = bio->bi_bdev;
1582
1583 if (bio_sectors(bio) && bdev != bdev->bd_contains) {
1584 struct hd_struct *p = bdev->bd_part;
1585
1586 bio->bi_sector += p->start_sect;
1587 bio->bi_bdev = bdev->bd_contains;
1588
1589 trace_block_bio_remap(bdev_get_queue(bio->bi_bdev), bio,
1590 bdev->bd_dev,
1591 bio->bi_sector - p->start_sect);
1592 }
1593}
1594
1595static void handle_bad_sector(struct bio *bio)
1596{
1597 char b[BDEVNAME_SIZE];
1598
1599 printk(KERN_INFO "attempt to access beyond end of device\n");
1600 printk(KERN_INFO "%s: rw=%ld, want=%Lu, limit=%Lu\n",
1601 bdevname(bio->bi_bdev, b),
1602 bio->bi_rw,
1603 (unsigned long long)bio_end_sector(bio),
1604 (long long)(i_size_read(bio->bi_bdev->bd_inode) >> 9));
1605
1606 set_bit(BIO_EOF, &bio->bi_flags);
1607}
1608
1609#ifdef CONFIG_FAIL_MAKE_REQUEST
1610
1611static DECLARE_FAULT_ATTR(fail_make_request);
1612
1613static int __init setup_fail_make_request(char *str)
1614{
1615 return setup_fault_attr(&fail_make_request, str);
1616}
1617__setup("fail_make_request=", setup_fail_make_request);
1618
1619static bool should_fail_request(struct hd_struct *part, unsigned int bytes)
1620{
1621 return part->make_it_fail && should_fail(&fail_make_request, bytes);
1622}
1623
1624static int __init fail_make_request_debugfs(void)
1625{
1626 struct dentry *dir = fault_create_debugfs_attr("fail_make_request",
1627 NULL, &fail_make_request);
1628
1629 return IS_ERR(dir) ? PTR_ERR(dir) : 0;
1630}
1631
1632late_initcall(fail_make_request_debugfs);
1633
1634#else
1635
1636static inline bool should_fail_request(struct hd_struct *part,
1637 unsigned int bytes)
1638{
1639 return false;
1640}
1641
1642#endif
1643
1644
1645
1646
1647static inline int bio_check_eod(struct bio *bio, unsigned int nr_sectors)
1648{
1649 sector_t maxsector;
1650
1651 if (!nr_sectors)
1652 return 0;
1653
1654
1655 maxsector = i_size_read(bio->bi_bdev->bd_inode) >> 9;
1656 if (maxsector) {
1657 sector_t sector = bio->bi_sector;
1658
1659 if (maxsector < nr_sectors || maxsector - nr_sectors < sector) {
1660
1661
1662
1663
1664
1665 handle_bad_sector(bio);
1666 return 1;
1667 }
1668 }
1669
1670 return 0;
1671}
1672
1673static noinline_for_stack bool
1674generic_make_request_checks(struct bio *bio)
1675{
1676 struct request_queue *q;
1677 int nr_sectors = bio_sectors(bio);
1678 int err = -EIO;
1679 char b[BDEVNAME_SIZE];
1680 struct hd_struct *part;
1681
1682 might_sleep();
1683
1684 if (bio_check_eod(bio, nr_sectors))
1685 goto end_io;
1686
1687 q = bdev_get_queue(bio->bi_bdev);
1688 if (unlikely(!q)) {
1689 printk(KERN_ERR
1690 "generic_make_request: Trying to access "
1691 "nonexistent block-device %s (%Lu)\n",
1692 bdevname(bio->bi_bdev, b),
1693 (long long) bio->bi_sector);
1694 goto end_io;
1695 }
1696
1697 if (likely(bio_is_rw(bio) &&
1698 nr_sectors > queue_max_hw_sectors(q))) {
1699 printk(KERN_ERR "bio too big device %s (%u > %u)\n",
1700 bdevname(bio->bi_bdev, b),
1701 bio_sectors(bio),
1702 queue_max_hw_sectors(q));
1703 goto end_io;
1704 }
1705
1706 part = bio->bi_bdev->bd_part;
1707 if (should_fail_request(part, bio->bi_size) ||
1708 should_fail_request(&part_to_disk(part)->part0,
1709 bio->bi_size))
1710 goto end_io;
1711
1712
1713
1714
1715
1716 blk_partition_remap(bio);
1717
1718 if (bio_check_eod(bio, nr_sectors))
1719 goto end_io;
1720
1721
1722
1723
1724
1725
1726 if ((bio->bi_rw & (REQ_FLUSH | REQ_FUA)) && !q->flush_flags) {
1727 bio->bi_rw &= ~(REQ_FLUSH | REQ_FUA);
1728 if (!nr_sectors) {
1729 err = 0;
1730 goto end_io;
1731 }
1732 }
1733
1734 if ((bio->bi_rw & REQ_DISCARD) &&
1735 (!blk_queue_discard(q) ||
1736 ((bio->bi_rw & REQ_SECURE) && !blk_queue_secdiscard(q)))) {
1737 err = -EOPNOTSUPP;
1738 goto end_io;
1739 }
1740
1741 if (bio->bi_rw & REQ_WRITE_SAME && !bdev_write_same(bio->bi_bdev)) {
1742 err = -EOPNOTSUPP;
1743 goto end_io;
1744 }
1745
1746
1747
1748
1749
1750
1751
1752 create_io_context(GFP_ATOMIC, q->node);
1753
1754 if (blk_throtl_bio(q, bio))
1755 return false;
1756
1757 trace_block_bio_queue(q, bio);
1758 return true;
1759
1760end_io:
1761 bio_endio(bio, err);
1762 return false;
1763}
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789void generic_make_request(struct bio *bio)
1790{
1791 struct bio_list bio_list_on_stack;
1792
1793 if (!generic_make_request_checks(bio))
1794 return;
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806 if (current->bio_list) {
1807 bio_list_add(current->bio_list, bio);
1808 return;
1809 }
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825 BUG_ON(bio->bi_next);
1826 bio_list_init(&bio_list_on_stack);
1827 current->bio_list = &bio_list_on_stack;
1828 do {
1829 struct request_queue *q = bdev_get_queue(bio->bi_bdev);
1830
1831 q->make_request_fn(q, bio);
1832
1833 bio = bio_list_pop(current->bio_list);
1834 } while (bio);
1835 current->bio_list = NULL;
1836}
1837EXPORT_SYMBOL(generic_make_request);
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849void submit_bio(int rw, struct bio *bio)
1850{
1851 bio->bi_rw |= rw;
1852
1853
1854
1855
1856
1857 if (bio_has_data(bio)) {
1858 unsigned int count;
1859
1860 if (unlikely(rw & REQ_WRITE_SAME))
1861 count = bdev_logical_block_size(bio->bi_bdev) >> 9;
1862 else
1863 count = bio_sectors(bio);
1864
1865 if (rw & WRITE) {
1866 count_vm_events(PGPGOUT, count);
1867 } else {
1868 task_io_account_read(bio->bi_size);
1869 count_vm_events(PGPGIN, count);
1870 }
1871
1872 if (unlikely(block_dump)) {
1873 char b[BDEVNAME_SIZE];
1874 printk(KERN_DEBUG "%s(%d): %s block %Lu on %s (%u sectors)\n",
1875 current->comm, task_pid_nr(current),
1876 (rw & WRITE) ? "WRITE" : "READ",
1877 (unsigned long long)bio->bi_sector,
1878 bdevname(bio->bi_bdev, b),
1879 count);
1880 }
1881 }
1882
1883 generic_make_request(bio);
1884}
1885EXPORT_SYMBOL(submit_bio);
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908int blk_rq_check_limits(struct request_queue *q, struct request *rq)
1909{
1910 if (!rq_mergeable(rq))
1911 return 0;
1912
1913 if (blk_rq_sectors(rq) > blk_queue_get_max_sectors(q, rq->cmd_flags)) {
1914 printk(KERN_ERR "%s: over max size limit.\n", __func__);
1915 return -EIO;
1916 }
1917
1918
1919
1920
1921
1922
1923
1924 blk_recalc_rq_segments(rq);
1925 if (rq->nr_phys_segments > queue_max_segments(q)) {
1926 printk(KERN_ERR "%s: over max segments limit.\n", __func__);
1927 return -EIO;
1928 }
1929
1930 return 0;
1931}
1932EXPORT_SYMBOL_GPL(blk_rq_check_limits);
1933
1934
1935
1936
1937
1938
1939int blk_insert_cloned_request(struct request_queue *q, struct request *rq)
1940{
1941 unsigned long flags;
1942 int where = ELEVATOR_INSERT_BACK;
1943
1944 if (blk_rq_check_limits(q, rq))
1945 return -EIO;
1946
1947 if (rq->rq_disk &&
1948 should_fail_request(&rq->rq_disk->part0, blk_rq_bytes(rq)))
1949 return -EIO;
1950
1951 spin_lock_irqsave(q->queue_lock, flags);
1952 if (unlikely(blk_queue_dying(q))) {
1953 spin_unlock_irqrestore(q->queue_lock, flags);
1954 return -ENODEV;
1955 }
1956
1957
1958
1959
1960
1961 BUG_ON(blk_queued_rq(rq));
1962
1963 if (rq->cmd_flags & (REQ_FLUSH|REQ_FUA))
1964 where = ELEVATOR_INSERT_FLUSH;
1965
1966 add_acct_request(q, rq, where);
1967 if (where == ELEVATOR_INSERT_FLUSH)
1968 __blk_run_queue(q);
1969 spin_unlock_irqrestore(q->queue_lock, flags);
1970
1971 return 0;
1972}
1973EXPORT_SYMBOL_GPL(blk_insert_cloned_request);
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991unsigned int blk_rq_err_bytes(const struct request *rq)
1992{
1993 unsigned int ff = rq->cmd_flags & REQ_FAILFAST_MASK;
1994 unsigned int bytes = 0;
1995 struct bio *bio;
1996
1997 if (!(rq->cmd_flags & REQ_MIXED_MERGE))
1998 return blk_rq_bytes(rq);
1999
2000
2001
2002
2003
2004
2005
2006
2007 for (bio = rq->bio; bio; bio = bio->bi_next) {
2008 if ((bio->bi_rw & ff) != ff)
2009 break;
2010 bytes += bio->bi_size;
2011 }
2012
2013
2014 BUG_ON(blk_rq_bytes(rq) && !bytes);
2015 return bytes;
2016}
2017EXPORT_SYMBOL_GPL(blk_rq_err_bytes);
2018
2019void blk_account_io_completion(struct request *req, unsigned int bytes)
2020{
2021 if (blk_do_io_stat(req)) {
2022 const int rw = rq_data_dir(req);
2023 struct hd_struct *part;
2024 int cpu;
2025
2026 cpu = part_stat_lock();
2027 part = req->part;
2028 part_stat_add(cpu, part, sectors[rw], bytes >> 9);
2029 part_stat_unlock();
2030 }
2031}
2032
2033void blk_account_io_done(struct request *req)
2034{
2035
2036
2037
2038
2039
2040 if (blk_do_io_stat(req) && !(req->cmd_flags & REQ_FLUSH_SEQ)) {
2041 unsigned long duration = jiffies - req->start_time;
2042 const int rw = rq_data_dir(req);
2043 struct hd_struct *part;
2044 int cpu;
2045
2046 cpu = part_stat_lock();
2047 part = req->part;
2048
2049 part_stat_inc(cpu, part, ios[rw]);
2050 part_stat_add(cpu, part, ticks[rw], duration);
2051 part_round_stats(cpu, part);
2052 part_dec_in_flight(part, rw);
2053
2054 hd_struct_put(part);
2055 part_stat_unlock();
2056 }
2057}
2058
2059#ifdef CONFIG_PM_RUNTIME
2060
2061
2062
2063
2064static struct request *blk_pm_peek_request(struct request_queue *q,
2065 struct request *rq)
2066{
2067 if (q->dev && (q->rpm_status == RPM_SUSPENDED ||
2068 (q->rpm_status != RPM_ACTIVE && !(rq->cmd_flags & REQ_PM))))
2069 return NULL;
2070 else
2071 return rq;
2072}
2073#else
2074static inline struct request *blk_pm_peek_request(struct request_queue *q,
2075 struct request *rq)
2076{
2077 return rq;
2078}
2079#endif
2080
2081void blk_account_io_start(struct request *rq, bool new_io)
2082{
2083 struct hd_struct *part;
2084 int rw = rq_data_dir(rq);
2085 int cpu;
2086
2087 if (!blk_do_io_stat(rq))
2088 return;
2089
2090 cpu = part_stat_lock();
2091
2092 if (!new_io) {
2093 part = rq->part;
2094 part_stat_inc(cpu, part, merges[rw]);
2095 } else {
2096 part = disk_map_sector_rcu(rq->rq_disk, blk_rq_pos(rq));
2097 if (!hd_struct_try_get(part)) {
2098
2099
2100
2101
2102
2103
2104
2105
2106 part = &rq->rq_disk->part0;
2107 hd_struct_get(part);
2108 }
2109 part_round_stats(cpu, part);
2110 part_inc_in_flight(part, rw);
2111 rq->part = part;
2112 }
2113
2114 part_stat_unlock();
2115}
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133struct request *blk_peek_request(struct request_queue *q)
2134{
2135 struct request *rq;
2136 int ret;
2137
2138 while ((rq = __elv_next_request(q)) != NULL) {
2139
2140 rq = blk_pm_peek_request(q, rq);
2141 if (!rq)
2142 break;
2143
2144 if (!(rq->cmd_flags & REQ_STARTED)) {
2145
2146
2147
2148
2149
2150 if (rq->cmd_flags & REQ_SORTED)
2151 elv_activate_rq(q, rq);
2152
2153
2154
2155
2156
2157
2158 rq->cmd_flags |= REQ_STARTED;
2159 trace_block_rq_issue(q, rq);
2160 }
2161
2162 if (!q->boundary_rq || q->boundary_rq == rq) {
2163 q->end_sector = rq_end_sector(rq);
2164 q->boundary_rq = NULL;
2165 }
2166
2167 if (rq->cmd_flags & REQ_DONTPREP)
2168 break;
2169
2170 if (q->dma_drain_size && blk_rq_bytes(rq)) {
2171
2172
2173
2174
2175
2176
2177 rq->nr_phys_segments++;
2178 }
2179
2180 if (!q->prep_rq_fn)
2181 break;
2182
2183 ret = q->prep_rq_fn(q, rq);
2184 if (ret == BLKPREP_OK) {
2185 break;
2186 } else if (ret == BLKPREP_DEFER) {
2187
2188
2189
2190
2191
2192
2193 if (q->dma_drain_size && blk_rq_bytes(rq) &&
2194 !(rq->cmd_flags & REQ_DONTPREP)) {
2195
2196
2197
2198
2199 --rq->nr_phys_segments;
2200 }
2201
2202 rq = NULL;
2203 break;
2204 } else if (ret == BLKPREP_KILL) {
2205 rq->cmd_flags |= REQ_QUIET;
2206
2207
2208
2209
2210 blk_start_request(rq);
2211 __blk_end_request_all(rq, -EIO);
2212 } else {
2213 printk(KERN_ERR "%s: bad return=%d\n", __func__, ret);
2214 break;
2215 }
2216 }
2217
2218 return rq;
2219}
2220EXPORT_SYMBOL(blk_peek_request);
2221
2222void blk_dequeue_request(struct request *rq)
2223{
2224 struct request_queue *q = rq->q;
2225
2226 BUG_ON(list_empty(&rq->queuelist));
2227 BUG_ON(ELV_ON_HASH(rq));
2228
2229 list_del_init(&rq->queuelist);
2230
2231
2232
2233
2234
2235
2236 if (blk_account_rq(rq)) {
2237 q->in_flight[rq_is_sync(rq)]++;
2238 set_io_start_time_ns(rq);
2239 }
2240}
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256void blk_start_request(struct request *req)
2257{
2258 blk_dequeue_request(req);
2259
2260
2261
2262
2263
2264 req->resid_len = blk_rq_bytes(req);
2265 if (unlikely(blk_bidi_rq(req)))
2266 req->next_rq->resid_len = blk_rq_bytes(req->next_rq);
2267
2268 BUG_ON(test_bit(REQ_ATOM_COMPLETE, &req->atomic_flags));
2269 blk_add_timer(req);
2270}
2271EXPORT_SYMBOL(blk_start_request);
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288struct request *blk_fetch_request(struct request_queue *q)
2289{
2290 struct request *rq;
2291
2292 rq = blk_peek_request(q);
2293 if (rq)
2294 blk_start_request(rq);
2295 return rq;
2296}
2297EXPORT_SYMBOL(blk_fetch_request);
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321bool blk_update_request(struct request *req, int error, unsigned int nr_bytes)
2322{
2323 int total_bytes;
2324
2325 if (!req->bio)
2326 return false;
2327
2328 trace_block_rq_complete(req->q, req);
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338 if (req->cmd_type == REQ_TYPE_FS)
2339 req->errors = 0;
2340
2341 if (error && req->cmd_type == REQ_TYPE_FS &&
2342 !(req->cmd_flags & REQ_QUIET)) {
2343 char *error_type;
2344
2345 switch (error) {
2346 case -ENOLINK:
2347 error_type = "recoverable transport";
2348 break;
2349 case -EREMOTEIO:
2350 error_type = "critical target";
2351 break;
2352 case -EBADE:
2353 error_type = "critical nexus";
2354 break;
2355 case -ETIMEDOUT:
2356 error_type = "timeout";
2357 break;
2358 case -ENOSPC:
2359 error_type = "critical space allocation";
2360 break;
2361 case -ENODATA:
2362 error_type = "critical medium";
2363 break;
2364 case -EIO:
2365 default:
2366 error_type = "I/O";
2367 break;
2368 }
2369 printk_ratelimited(KERN_ERR "end_request: %s error, dev %s, sector %llu\n",
2370 error_type, req->rq_disk ?
2371 req->rq_disk->disk_name : "?",
2372 (unsigned long long)blk_rq_pos(req));
2373
2374 }
2375
2376 blk_account_io_completion(req, nr_bytes);
2377
2378 total_bytes = 0;
2379 while (req->bio) {
2380 struct bio *bio = req->bio;
2381 unsigned bio_bytes = min(bio->bi_size, nr_bytes);
2382
2383 if (bio_bytes == bio->bi_size)
2384 req->bio = bio->bi_next;
2385
2386 req_bio_endio(req, bio, bio_bytes, error);
2387
2388 total_bytes += bio_bytes;
2389 nr_bytes -= bio_bytes;
2390
2391 if (!nr_bytes)
2392 break;
2393 }
2394
2395
2396
2397
2398 if (!req->bio) {
2399
2400
2401
2402
2403
2404 req->__data_len = 0;
2405 return false;
2406 }
2407
2408 req->__data_len -= total_bytes;
2409 req->buffer = bio_data(req->bio);
2410
2411
2412 if (req->cmd_type == REQ_TYPE_FS)
2413 req->__sector += total_bytes >> 9;
2414
2415
2416 if (req->cmd_flags & REQ_MIXED_MERGE) {
2417 req->cmd_flags &= ~REQ_FAILFAST_MASK;
2418 req->cmd_flags |= req->bio->bi_rw & REQ_FAILFAST_MASK;
2419 }
2420
2421
2422
2423
2424
2425 if (blk_rq_bytes(req) < blk_rq_cur_bytes(req)) {
2426 blk_dump_rq_flags(req, "request botched");
2427 req->__data_len = blk_rq_cur_bytes(req);
2428 }
2429
2430
2431 blk_recalc_rq_segments(req);
2432
2433 return true;
2434}
2435EXPORT_SYMBOL_GPL(blk_update_request);
2436
2437static bool blk_update_bidi_request(struct request *rq, int error,
2438 unsigned int nr_bytes,
2439 unsigned int bidi_bytes)
2440{
2441 if (blk_update_request(rq, error, nr_bytes))
2442 return true;
2443
2444
2445 if (unlikely(blk_bidi_rq(rq)) &&
2446 blk_update_request(rq->next_rq, error, bidi_bytes))
2447 return true;
2448
2449 if (blk_queue_add_random(rq->q))
2450 add_disk_randomness(rq->rq_disk);
2451
2452 return false;
2453}
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465void blk_unprep_request(struct request *req)
2466{
2467 struct request_queue *q = req->q;
2468
2469 req->cmd_flags &= ~REQ_DONTPREP;
2470 if (q->unprep_rq_fn)
2471 q->unprep_rq_fn(q, req);
2472}
2473EXPORT_SYMBOL_GPL(blk_unprep_request);
2474
2475
2476
2477
2478static void blk_finish_request(struct request *req, int error)
2479{
2480 if (blk_rq_tagged(req))
2481 blk_queue_end_tag(req->q, req);
2482
2483 BUG_ON(blk_queued_rq(req));
2484
2485 if (unlikely(laptop_mode) && req->cmd_type == REQ_TYPE_FS)
2486 laptop_io_completion(&req->q->backing_dev_info);
2487
2488 blk_delete_timer(req);
2489
2490 if (req->cmd_flags & REQ_DONTPREP)
2491 blk_unprep_request(req);
2492
2493 blk_account_io_done(req);
2494
2495 if (req->end_io)
2496 req->end_io(req, error);
2497 else {
2498 if (blk_bidi_rq(req))
2499 __blk_put_request(req->next_rq->q, req->next_rq);
2500
2501 __blk_put_request(req->q, req);
2502 }
2503}
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522static bool blk_end_bidi_request(struct request *rq, int error,
2523 unsigned int nr_bytes, unsigned int bidi_bytes)
2524{
2525 struct request_queue *q = rq->q;
2526 unsigned long flags;
2527
2528 if (blk_update_bidi_request(rq, error, nr_bytes, bidi_bytes))
2529 return true;
2530
2531 spin_lock_irqsave(q->queue_lock, flags);
2532 blk_finish_request(rq, error);
2533 spin_unlock_irqrestore(q->queue_lock, flags);
2534
2535 return false;
2536}
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553bool __blk_end_bidi_request(struct request *rq, int error,
2554 unsigned int nr_bytes, unsigned int bidi_bytes)
2555{
2556 if (blk_update_bidi_request(rq, error, nr_bytes, bidi_bytes))
2557 return true;
2558
2559 blk_finish_request(rq, error);
2560
2561 return false;
2562}
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578bool blk_end_request(struct request *rq, int error, unsigned int nr_bytes)
2579{
2580 return blk_end_bidi_request(rq, error, nr_bytes, 0);
2581}
2582EXPORT_SYMBOL(blk_end_request);
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592void blk_end_request_all(struct request *rq, int error)
2593{
2594 bool pending;
2595 unsigned int bidi_bytes = 0;
2596
2597 if (unlikely(blk_bidi_rq(rq)))
2598 bidi_bytes = blk_rq_bytes(rq->next_rq);
2599
2600 pending = blk_end_bidi_request(rq, error, blk_rq_bytes(rq), bidi_bytes);
2601 BUG_ON(pending);
2602}
2603EXPORT_SYMBOL(blk_end_request_all);
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617bool blk_end_request_cur(struct request *rq, int error)
2618{
2619 return blk_end_request(rq, error, blk_rq_cur_bytes(rq));
2620}
2621EXPORT_SYMBOL(blk_end_request_cur);
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635bool blk_end_request_err(struct request *rq, int error)
2636{
2637 WARN_ON(error >= 0);
2638 return blk_end_request(rq, error, blk_rq_err_bytes(rq));
2639}
2640EXPORT_SYMBOL_GPL(blk_end_request_err);
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655bool __blk_end_request(struct request *rq, int error, unsigned int nr_bytes)
2656{
2657 return __blk_end_bidi_request(rq, error, nr_bytes, 0);
2658}
2659EXPORT_SYMBOL(__blk_end_request);
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669void __blk_end_request_all(struct request *rq, int error)
2670{
2671 bool pending;
2672 unsigned int bidi_bytes = 0;
2673
2674 if (unlikely(blk_bidi_rq(rq)))
2675 bidi_bytes = blk_rq_bytes(rq->next_rq);
2676
2677 pending = __blk_end_bidi_request(rq, error, blk_rq_bytes(rq), bidi_bytes);
2678 BUG_ON(pending);
2679}
2680EXPORT_SYMBOL(__blk_end_request_all);
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695bool __blk_end_request_cur(struct request *rq, int error)
2696{
2697 return __blk_end_request(rq, error, blk_rq_cur_bytes(rq));
2698}
2699EXPORT_SYMBOL(__blk_end_request_cur);
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714bool __blk_end_request_err(struct request *rq, int error)
2715{
2716 WARN_ON(error >= 0);
2717 return __blk_end_request(rq, error, blk_rq_err_bytes(rq));
2718}
2719EXPORT_SYMBOL_GPL(__blk_end_request_err);
2720
2721void blk_rq_bio_prep(struct request_queue *q, struct request *rq,
2722 struct bio *bio)
2723{
2724
2725 rq->cmd_flags |= bio->bi_rw & REQ_WRITE;
2726
2727 if (bio_has_data(bio)) {
2728 rq->nr_phys_segments = bio_phys_segments(q, bio);
2729 rq->buffer = bio_data(bio);
2730 }
2731 rq->__data_len = bio->bi_size;
2732 rq->bio = rq->biotail = bio;
2733
2734 if (bio->bi_bdev)
2735 rq->rq_disk = bio->bi_bdev->bd_disk;
2736}
2737
2738#if ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE
2739
2740
2741
2742
2743
2744
2745
2746void rq_flush_dcache_pages(struct request *rq)
2747{
2748 struct req_iterator iter;
2749 struct bio_vec *bvec;
2750
2751 rq_for_each_segment(bvec, rq, iter)
2752 flush_dcache_page(bvec->bv_page);
2753}
2754EXPORT_SYMBOL_GPL(rq_flush_dcache_pages);
2755#endif
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776int blk_lld_busy(struct request_queue *q)
2777{
2778 if (q->lld_busy_fn)
2779 return q->lld_busy_fn(q);
2780
2781 return 0;
2782}
2783EXPORT_SYMBOL_GPL(blk_lld_busy);
2784
2785
2786
2787
2788
2789
2790
2791
2792void blk_rq_unprep_clone(struct request *rq)
2793{
2794 struct bio *bio;
2795
2796 while ((bio = rq->bio) != NULL) {
2797 rq->bio = bio->bi_next;
2798
2799 bio_put(bio);
2800 }
2801}
2802EXPORT_SYMBOL_GPL(blk_rq_unprep_clone);
2803
2804
2805
2806
2807
2808static void __blk_rq_prep_clone(struct request *dst, struct request *src)
2809{
2810 dst->cpu = src->cpu;
2811 dst->cmd_flags = (src->cmd_flags & REQ_CLONE_MASK) | REQ_NOMERGE;
2812 dst->cmd_type = src->cmd_type;
2813 dst->__sector = blk_rq_pos(src);
2814 dst->__data_len = blk_rq_bytes(src);
2815 dst->nr_phys_segments = src->nr_phys_segments;
2816 dst->ioprio = src->ioprio;
2817 dst->extra_len = src->extra_len;
2818}
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839int blk_rq_prep_clone(struct request *rq, struct request *rq_src,
2840 struct bio_set *bs, gfp_t gfp_mask,
2841 int (*bio_ctr)(struct bio *, struct bio *, void *),
2842 void *data)
2843{
2844 struct bio *bio, *bio_src;
2845
2846 if (!bs)
2847 bs = fs_bio_set;
2848
2849 blk_rq_init(NULL, rq);
2850
2851 __rq_for_each_bio(bio_src, rq_src) {
2852 bio = bio_clone_bioset(bio_src, gfp_mask, bs);
2853 if (!bio)
2854 goto free_and_out;
2855
2856 if (bio_ctr && bio_ctr(bio, bio_src, data))
2857 goto free_and_out;
2858
2859 if (rq->bio) {
2860 rq->biotail->bi_next = bio;
2861 rq->biotail = bio;
2862 } else
2863 rq->bio = rq->biotail = bio;
2864 }
2865
2866 __blk_rq_prep_clone(rq, rq_src);
2867
2868 return 0;
2869
2870free_and_out:
2871 if (bio)
2872 bio_put(bio);
2873 blk_rq_unprep_clone(rq);
2874
2875 return -ENOMEM;
2876}
2877EXPORT_SYMBOL_GPL(blk_rq_prep_clone);
2878
2879int kblockd_schedule_work(struct request_queue *q, struct work_struct *work)
2880{
2881 return queue_work(kblockd_workqueue, work);
2882}
2883EXPORT_SYMBOL(kblockd_schedule_work);
2884
2885int kblockd_schedule_delayed_work(struct request_queue *q,
2886 struct delayed_work *dwork, unsigned long delay)
2887{
2888 return queue_delayed_work(kblockd_workqueue, dwork, delay);
2889}
2890EXPORT_SYMBOL(kblockd_schedule_delayed_work);
2891
2892#define PLUG_MAGIC 0x91827364
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908void blk_start_plug(struct blk_plug *plug)
2909{
2910 struct task_struct *tsk = current;
2911
2912 plug->magic = PLUG_MAGIC;
2913 INIT_LIST_HEAD(&plug->list);
2914 INIT_LIST_HEAD(&plug->mq_list);
2915 INIT_LIST_HEAD(&plug->cb_list);
2916
2917
2918
2919
2920
2921 if (!tsk->plug) {
2922
2923
2924
2925
2926 tsk->plug = plug;
2927 }
2928}
2929EXPORT_SYMBOL(blk_start_plug);
2930
2931static int plug_rq_cmp(void *priv, struct list_head *a, struct list_head *b)
2932{
2933 struct request *rqa = container_of(a, struct request, queuelist);
2934 struct request *rqb = container_of(b, struct request, queuelist);
2935
2936 return !(rqa->q < rqb->q ||
2937 (rqa->q == rqb->q && blk_rq_pos(rqa) < blk_rq_pos(rqb)));
2938}
2939
2940
2941
2942
2943
2944
2945
2946static void queue_unplugged(struct request_queue *q, unsigned int depth,
2947 bool from_schedule)
2948 __releases(q->queue_lock)
2949{
2950 trace_block_unplug(q, depth, !from_schedule);
2951
2952 if (from_schedule)
2953 blk_run_queue_async(q);
2954 else
2955 __blk_run_queue(q);
2956 spin_unlock(q->queue_lock);
2957}
2958
2959static void flush_plug_callbacks(struct blk_plug *plug, bool from_schedule)
2960{
2961 LIST_HEAD(callbacks);
2962
2963 while (!list_empty(&plug->cb_list)) {
2964 list_splice_init(&plug->cb_list, &callbacks);
2965
2966 while (!list_empty(&callbacks)) {
2967 struct blk_plug_cb *cb = list_first_entry(&callbacks,
2968 struct blk_plug_cb,
2969 list);
2970 list_del(&cb->list);
2971 cb->callback(cb, from_schedule);
2972 }
2973 }
2974}
2975
2976struct blk_plug_cb *blk_check_plugged(blk_plug_cb_fn unplug, void *data,
2977 int size)
2978{
2979 struct blk_plug *plug = current->plug;
2980 struct blk_plug_cb *cb;
2981
2982 if (!plug)
2983 return NULL;
2984
2985 list_for_each_entry(cb, &plug->cb_list, list)
2986 if (cb->callback == unplug && cb->data == data)
2987 return cb;
2988
2989
2990 BUG_ON(size < sizeof(*cb));
2991 cb = kzalloc(size, GFP_ATOMIC);
2992 if (cb) {
2993 cb->data = data;
2994 cb->callback = unplug;
2995 list_add(&cb->list, &plug->cb_list);
2996 }
2997 return cb;
2998}
2999EXPORT_SYMBOL(blk_check_plugged);
3000
3001void blk_flush_plug_list(struct blk_plug *plug, bool from_schedule)
3002{
3003 struct request_queue *q;
3004 unsigned long flags;
3005 struct request *rq;
3006 LIST_HEAD(list);
3007 unsigned int depth;
3008
3009 BUG_ON(plug->magic != PLUG_MAGIC);
3010
3011 flush_plug_callbacks(plug, from_schedule);
3012
3013 if (!list_empty(&plug->mq_list))
3014 blk_mq_flush_plug_list(plug, from_schedule);
3015
3016 if (list_empty(&plug->list))
3017 return;
3018
3019 list_splice_init(&plug->list, &list);
3020
3021 list_sort(NULL, &list, plug_rq_cmp);
3022
3023 q = NULL;
3024 depth = 0;
3025
3026
3027
3028
3029
3030 local_irq_save(flags);
3031 while (!list_empty(&list)) {
3032 rq = list_entry_rq(list.next);
3033 list_del_init(&rq->queuelist);
3034 BUG_ON(!rq->q);
3035 if (rq->q != q) {
3036
3037
3038
3039 if (q)
3040 queue_unplugged(q, depth, from_schedule);
3041 q = rq->q;
3042 depth = 0;
3043 spin_lock(q->queue_lock);
3044 }
3045
3046
3047
3048
3049 if (unlikely(blk_queue_dying(q))) {
3050 __blk_end_request_all(rq, -ENODEV);
3051 continue;
3052 }
3053
3054
3055
3056
3057 if (rq->cmd_flags & (REQ_FLUSH | REQ_FUA))
3058 __elv_add_request(q, rq, ELEVATOR_INSERT_FLUSH);
3059 else
3060 __elv_add_request(q, rq, ELEVATOR_INSERT_SORT_MERGE);
3061
3062 depth++;
3063 }
3064
3065
3066
3067
3068 if (q)
3069 queue_unplugged(q, depth, from_schedule);
3070
3071 local_irq_restore(flags);
3072}
3073
3074void blk_finish_plug(struct blk_plug *plug)
3075{
3076 blk_flush_plug_list(plug, false);
3077
3078 if (plug == current->plug)
3079 current->plug = NULL;
3080}
3081EXPORT_SYMBOL(blk_finish_plug);
3082
3083#ifdef CONFIG_PM_RUNTIME
3084
3085
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097
3098
3099
3100
3101
3102
3103
3104
3105void blk_pm_runtime_init(struct request_queue *q, struct device *dev)
3106{
3107 q->dev = dev;
3108 q->rpm_status = RPM_ACTIVE;
3109 pm_runtime_set_autosuspend_delay(q->dev, -1);
3110 pm_runtime_use_autosuspend(q->dev);
3111}
3112EXPORT_SYMBOL(blk_pm_runtime_init);
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122
3123
3124
3125
3126
3127
3128
3129
3130
3131
3132
3133
3134
3135int blk_pre_runtime_suspend(struct request_queue *q)
3136{
3137 int ret = 0;
3138
3139 spin_lock_irq(q->queue_lock);
3140 if (q->nr_pending) {
3141 ret = -EBUSY;
3142 pm_runtime_mark_last_busy(q->dev);
3143 } else {
3144 q->rpm_status = RPM_SUSPENDING;
3145 }
3146 spin_unlock_irq(q->queue_lock);
3147 return ret;
3148}
3149EXPORT_SYMBOL(blk_pre_runtime_suspend);
3150
3151
3152
3153
3154
3155
3156
3157
3158
3159
3160
3161
3162
3163
3164void blk_post_runtime_suspend(struct request_queue *q, int err)
3165{
3166 spin_lock_irq(q->queue_lock);
3167 if (!err) {
3168 q->rpm_status = RPM_SUSPENDED;
3169 } else {
3170 q->rpm_status = RPM_ACTIVE;
3171 pm_runtime_mark_last_busy(q->dev);
3172 }
3173 spin_unlock_irq(q->queue_lock);
3174}
3175EXPORT_SYMBOL(blk_post_runtime_suspend);
3176
3177
3178
3179
3180
3181
3182
3183
3184
3185
3186
3187
3188void blk_pre_runtime_resume(struct request_queue *q)
3189{
3190 spin_lock_irq(q->queue_lock);
3191 q->rpm_status = RPM_RESUMING;
3192 spin_unlock_irq(q->queue_lock);
3193}
3194EXPORT_SYMBOL(blk_pre_runtime_resume);
3195
3196
3197
3198
3199
3200
3201
3202
3203
3204
3205
3206
3207
3208
3209
3210void blk_post_runtime_resume(struct request_queue *q, int err)
3211{
3212 spin_lock_irq(q->queue_lock);
3213 if (!err) {
3214 q->rpm_status = RPM_ACTIVE;
3215 __blk_run_queue(q);
3216 pm_runtime_mark_last_busy(q->dev);
3217 pm_request_autosuspend(q->dev);
3218 } else {
3219 q->rpm_status = RPM_SUSPENDED;
3220 }
3221 spin_unlock_irq(q->queue_lock);
3222}
3223EXPORT_SYMBOL(blk_post_runtime_resume);
3224#endif
3225
3226int __init blk_dev_init(void)
3227{
3228 BUILD_BUG_ON(__REQ_NR_BITS > 8 *
3229 sizeof(((struct request *)0)->cmd_flags));
3230
3231
3232 kblockd_workqueue = alloc_workqueue("kblockd",
3233 WQ_MEM_RECLAIM | WQ_HIGHPRI |
3234 WQ_POWER_EFFICIENT, 0);
3235 if (!kblockd_workqueue)
3236 panic("Failed to create kblockd\n");
3237
3238 request_cachep = kmem_cache_create("blkdev_requests",
3239 sizeof(struct request), 0, SLAB_PANIC, NULL);
3240
3241 blk_requestq_cachep = kmem_cache_create("blkdev_queue",
3242 sizeof(struct request_queue), 0, SLAB_PANIC, NULL);
3243
3244 return 0;
3245}
3246