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