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