1 #ifndef _LINUX_BLKDEV_H
2 #define _LINUX_BLKDEV_H
3
4 #include <linux/sched.h>
5
6 #ifdef CONFIG_BLOCK
7
8 #include <linux/major.h>
9 #include <linux/genhd.h>
10 #include <linux/list.h>
11 #include <linux/llist.h>
12 #include <linux/timer.h>
13 #include <linux/workqueue.h>
14 #include <linux/pagemap.h>
15 #include <linux/backing-dev.h>
16 #include <linux/wait.h>
17 #include <linux/mempool.h>
18 #include <linux/bio.h>
19 #include <linux/stringify.h>
20 #include <linux/gfp.h>
21 #include <linux/bsg.h>
22 #include <linux/smp.h>
23 #include <linux/rcupdate.h>
24 #include <linux/percpu-refcount.h>
25
26 #include <asm/scatterlist.h>
27
28 struct module;
29 struct scsi_ioctl_command;
30
31 struct request_queue;
32 struct elevator_queue;
33 struct request_pm_state;
34 struct blk_trace;
35 struct request;
36 struct sg_io_hdr;
37 struct bsg_job;
38 struct blkcg_gq;
39 struct blk_flush_queue;
40
41 #define BLKDEV_MIN_RQ 4
42 #define BLKDEV_MAX_RQ 128 /* Default maximum */
43
44 /*
45 * Maximum number of blkcg policies allowed to be registered concurrently.
46 * Defined here to simplify include dependency.
47 */
48 #define BLKCG_MAX_POLS 2
49
50 struct request;
51 typedef void (rq_end_io_fn)(struct request *, int);
52
53 #define BLK_RL_SYNCFULL (1U << 0)
54 #define BLK_RL_ASYNCFULL (1U << 1)
55
56 struct request_list {
57 struct request_queue *q; /* the queue this rl belongs to */
58 #ifdef CONFIG_BLK_CGROUP
59 struct blkcg_gq *blkg; /* blkg this request pool belongs to */
60 #endif
61 /*
62 * count[], starved[], and wait[] are indexed by
63 * BLK_RW_SYNC/BLK_RW_ASYNC
64 */
65 int count[2];
66 int starved[2];
67 mempool_t *rq_pool;
68 wait_queue_head_t wait[2];
69 unsigned int flags;
70 };
71
72 /*
73 * request command types
74 */
75 enum rq_cmd_type_bits {
76 REQ_TYPE_FS = 1, /* fs request */
77 REQ_TYPE_BLOCK_PC, /* scsi command */
78 REQ_TYPE_SENSE, /* sense request */
79 REQ_TYPE_PM_SUSPEND, /* suspend request */
80 REQ_TYPE_PM_RESUME, /* resume request */
81 REQ_TYPE_PM_SHUTDOWN, /* shutdown request */
82 REQ_TYPE_SPECIAL, /* driver defined type */
83 /*
84 * for ATA/ATAPI devices. this really doesn't belong here, ide should
85 * use REQ_TYPE_SPECIAL and use rq->cmd[0] with the range of driver
86 * private REQ_LB opcodes to differentiate what type of request this is
87 */
88 REQ_TYPE_ATA_TASKFILE,
89 REQ_TYPE_ATA_PC,
90 };
91
92 #define BLK_MAX_CDB 16
93
94 /*
95 * Try to put the fields that are referenced together in the same cacheline.
96 *
97 * If you modify this structure, make sure to update blk_rq_init() and
98 * especially blk_mq_rq_ctx_init() to take care of the added fields.
99 */
100 struct request {
101 struct list_head queuelist;
102 union {
103 struct call_single_data csd;
104 unsigned long fifo_time;
105 };
106
107 struct request_queue *q;
108 struct blk_mq_ctx *mq_ctx;
109
110 u64 cmd_flags;
111 enum rq_cmd_type_bits cmd_type;
112 unsigned long atomic_flags;
113
114 int cpu;
115
116 /* the following two fields are internal, NEVER access directly */
117 unsigned int __data_len; /* total data len */
118 sector_t __sector; /* sector cursor */
119
120 struct bio *bio;
121 struct bio *biotail;
122
123 /*
124 * The hash is used inside the scheduler, and killed once the
125 * request reaches the dispatch list. The ipi_list is only used
126 * to queue the request for softirq completion, which is long
127 * after the request has been unhashed (and even removed from
128 * the dispatch list).
129 */
130 union {
131 struct hlist_node hash; /* merge hash */
132 struct list_head ipi_list;
133 };
134
135 /*
136 * The rb_node is only used inside the io scheduler, requests
137 * are pruned when moved to the dispatch queue. So let the
138 * completion_data share space with the rb_node.
139 */
140 union {
141 struct rb_node rb_node; /* sort/lookup */
142 void *completion_data;
143 };
144
145 /*
146 * Three pointers are available for the IO schedulers, if they need
147 * more they have to dynamically allocate it. Flush requests are
148 * never put on the IO scheduler. So let the flush fields share
149 * space with the elevator data.
150 */
151 union {
152 struct {
153 struct io_cq *icq;
154 void *priv[2];
155 } elv;
156
157 struct {
158 unsigned int seq;
159 struct list_head list;
160 rq_end_io_fn *saved_end_io;
161 } flush;
162 };
163
164 struct gendisk *rq_disk;
165 struct hd_struct *part;
166 unsigned long start_time;
167 #ifdef CONFIG_BLK_CGROUP
168 struct request_list *rl; /* rl this rq is alloced from */
169 unsigned long long start_time_ns;
170 unsigned long long io_start_time_ns; /* when passed to hardware */
171 #endif
172 /* Number of scatter-gather DMA addr+len pairs after
173 * physical address coalescing is performed.
174 */
175 unsigned short nr_phys_segments;
176 #if defined(CONFIG_BLK_DEV_INTEGRITY)
177 unsigned short nr_integrity_segments;
178 #endif
179
180 unsigned short ioprio;
181
182 void *special; /* opaque pointer available for LLD use */
183
184 int tag;
185 int errors;
186
187 /*
188 * when request is used as a packet command carrier
189 */
190 unsigned char __cmd[BLK_MAX_CDB];
191 unsigned char *cmd;
192 unsigned short cmd_len;
193
194 unsigned int extra_len; /* length of alignment and padding */
195 unsigned int sense_len;
196 unsigned int resid_len; /* residual count */
197 void *sense;
198
199 unsigned long deadline;
200 struct list_head timeout_list;
201 unsigned int timeout;
202 int retries;
203
204 /*
205 * completion callback.
206 */
207 rq_end_io_fn *end_io;
208 void *end_io_data;
209
210 /* for bidi */
211 struct request *next_rq;
212
213 ktime_t lat_hist_io_start;
214 int lat_hist_enabled;
215 };
216
req_get_ioprio(struct request * req)217 static inline unsigned short req_get_ioprio(struct request *req)
218 {
219 return req->ioprio;
220 }
221
222 /*
223 * State information carried for REQ_TYPE_PM_SUSPEND and REQ_TYPE_PM_RESUME
224 * requests. Some step values could eventually be made generic.
225 */
226 struct request_pm_state
227 {
228 /* PM state machine step value, currently driver specific */
229 int pm_step;
230 /* requested PM state value (S1, S2, S3, S4, ...) */
231 u32 pm_state;
232 void* data; /* for driver use */
233 };
234
235 #include <linux/elevator.h>
236
237 struct blk_queue_ctx;
238
239 typedef void (request_fn_proc) (struct request_queue *q);
240 typedef void (make_request_fn) (struct request_queue *q, struct bio *bio);
241 typedef int (prep_rq_fn) (struct request_queue *, struct request *);
242 typedef void (unprep_rq_fn) (struct request_queue *, struct request *);
243
244 struct bio_vec;
245 struct bvec_merge_data {
246 struct block_device *bi_bdev;
247 sector_t bi_sector;
248 unsigned bi_size;
249 unsigned long bi_rw;
250 };
251 typedef int (merge_bvec_fn) (struct request_queue *, struct bvec_merge_data *,
252 struct bio_vec *);
253 typedef void (softirq_done_fn)(struct request *);
254 typedef int (dma_drain_needed_fn)(struct request *);
255 typedef int (lld_busy_fn) (struct request_queue *q);
256 typedef int (bsg_job_fn) (struct bsg_job *);
257
258 enum blk_eh_timer_return {
259 BLK_EH_NOT_HANDLED,
260 BLK_EH_HANDLED,
261 BLK_EH_RESET_TIMER,
262 };
263
264 typedef enum blk_eh_timer_return (rq_timed_out_fn)(struct request *);
265
266 enum blk_queue_state {
267 Queue_down,
268 Queue_up,
269 };
270
271 struct blk_queue_tag {
272 struct request **tag_index; /* map of busy tags */
273 unsigned long *tag_map; /* bit map of free/busy tags */
274 int busy; /* current depth */
275 int max_depth; /* what we will send to device */
276 int real_max_depth; /* what the array can hold */
277 atomic_t refcnt; /* map can be shared */
278 };
279
280 #define BLK_SCSI_MAX_CMDS (256)
281 #define BLK_SCSI_CMD_PER_LONG (BLK_SCSI_MAX_CMDS / (sizeof(long) * 8))
282
283 struct queue_limits {
284 unsigned long bounce_pfn;
285 unsigned long seg_boundary_mask;
286
287 unsigned int max_hw_sectors;
288 unsigned int chunk_sectors;
289 unsigned int max_sectors;
290 unsigned int max_segment_size;
291 unsigned int physical_block_size;
292 unsigned int alignment_offset;
293 unsigned int io_min;
294 unsigned int io_opt;
295 unsigned int max_discard_sectors;
296 unsigned int max_write_same_sectors;
297 unsigned int discard_granularity;
298 unsigned int discard_alignment;
299
300 unsigned short logical_block_size;
301 unsigned short max_segments;
302 unsigned short max_integrity_segments;
303
304 unsigned char misaligned;
305 unsigned char discard_misaligned;
306 unsigned char cluster;
307 unsigned char discard_zeroes_data;
308 unsigned char raid_partial_stripes_expensive;
309 };
310
311 struct request_queue {
312 /*
313 * Together with queue_head for cacheline sharing
314 */
315 struct list_head queue_head;
316 struct request *last_merge;
317 struct elevator_queue *elevator;
318 int nr_rqs[2]; /* # allocated [a]sync rqs */
319 int nr_rqs_elvpriv; /* # allocated rqs w/ elvpriv */
320
321 /*
322 * If blkcg is not used, @q->root_rl serves all requests. If blkcg
323 * is used, root blkg allocates from @q->root_rl and all other
324 * blkgs from their own blkg->rl. Which one to use should be
325 * determined using bio_request_list().
326 */
327 struct request_list root_rl;
328
329 request_fn_proc *request_fn;
330 make_request_fn *make_request_fn;
331 prep_rq_fn *prep_rq_fn;
332 unprep_rq_fn *unprep_rq_fn;
333 merge_bvec_fn *merge_bvec_fn;
334 softirq_done_fn *softirq_done_fn;
335 rq_timed_out_fn *rq_timed_out_fn;
336 dma_drain_needed_fn *dma_drain_needed;
337 lld_busy_fn *lld_busy_fn;
338
339 struct blk_mq_ops *mq_ops;
340
341 unsigned int *mq_map;
342
343 /* sw queues */
344 struct blk_mq_ctx __percpu *queue_ctx;
345 unsigned int nr_queues;
346
347 /* hw dispatch queues */
348 struct blk_mq_hw_ctx **queue_hw_ctx;
349 unsigned int nr_hw_queues;
350
351 /*
352 * Dispatch queue sorting
353 */
354 sector_t end_sector;
355 struct request *boundary_rq;
356
357 /*
358 * Delayed queue handling
359 */
360 struct delayed_work delay_work;
361
362 struct backing_dev_info backing_dev_info;
363
364 /*
365 * The queue owner gets to use this for whatever they like.
366 * ll_rw_blk doesn't touch it.
367 */
368 void *queuedata;
369
370 /*
371 * various queue flags, see QUEUE_* below
372 */
373 unsigned long queue_flags;
374
375 /*
376 * ida allocated id for this queue. Used to index queues from
377 * ioctx.
378 */
379 int id;
380
381 /*
382 * queue needs bounce pages for pages above this limit
383 */
384 gfp_t bounce_gfp;
385
386 /*
387 * protects queue structures from reentrancy. ->__queue_lock should
388 * _never_ be used directly, it is queue private. always use
389 * ->queue_lock.
390 */
391 spinlock_t __queue_lock;
392 spinlock_t *queue_lock;
393
394 /*
395 * queue kobject
396 */
397 struct kobject kobj;
398
399 /*
400 * mq queue kobject
401 */
402 struct kobject mq_kobj;
403
404 #ifdef CONFIG_PM_RUNTIME
405 struct device *dev;
406 int rpm_status;
407 unsigned int nr_pending;
408 #endif
409
410 /*
411 * queue settings
412 */
413 unsigned long nr_requests; /* Max # of requests */
414 unsigned int nr_congestion_on;
415 unsigned int nr_congestion_off;
416 unsigned int nr_batching;
417
418 unsigned int dma_drain_size;
419 void *dma_drain_buffer;
420 unsigned int dma_pad_mask;
421 unsigned int dma_alignment;
422
423 struct blk_queue_tag *queue_tags;
424 struct list_head tag_busy_list;
425
426 unsigned int nr_sorted;
427 unsigned int in_flight[2];
428 /*
429 * Number of active block driver functions for which blk_drain_queue()
430 * must wait. Must be incremented around functions that unlock the
431 * queue_lock internally, e.g. scsi_request_fn().
432 */
433 unsigned int request_fn_active;
434
435 unsigned int rq_timeout;
436 struct timer_list timeout;
437 struct list_head timeout_list;
438
439 struct list_head icq_list;
440 #ifdef CONFIG_BLK_CGROUP
441 DECLARE_BITMAP (blkcg_pols, BLKCG_MAX_POLS);
442 struct blkcg_gq *root_blkg;
443 struct list_head blkg_list;
444 #endif
445
446 struct queue_limits limits;
447
448 /*
449 * sg stuff
450 */
451 unsigned int sg_timeout;
452 unsigned int sg_reserved_size;
453 int node;
454 #ifdef CONFIG_BLK_DEV_IO_TRACE
455 struct blk_trace *blk_trace;
456 #endif
457 /*
458 * for flush operations
459 */
460 unsigned int flush_flags;
461 unsigned int flush_not_queueable:1;
462 struct blk_flush_queue *fq;
463
464 struct list_head requeue_list;
465 spinlock_t requeue_lock;
466 struct work_struct requeue_work;
467
468 struct mutex sysfs_lock;
469
470 int bypass_depth;
471 int mq_freeze_depth;
472
473 #if defined(CONFIG_BLK_DEV_BSG)
474 bsg_job_fn *bsg_job_fn;
475 int bsg_job_size;
476 struct bsg_class_device bsg_dev;
477 #endif
478
479 #ifdef CONFIG_BLK_DEV_THROTTLING
480 /* Throttle data */
481 struct throtl_data *td;
482 #endif
483 struct rcu_head rcu_head;
484 wait_queue_head_t mq_freeze_wq;
485 struct percpu_ref mq_usage_counter;
486 struct list_head all_q_node;
487
488 struct blk_mq_tag_set *tag_set;
489 struct list_head tag_set_list;
490 };
491
492 #define QUEUE_FLAG_QUEUED 1 /* uses generic tag queueing */
493 #define QUEUE_FLAG_STOPPED 2 /* queue is stopped */
494 #define QUEUE_FLAG_SYNCFULL 3 /* read queue has been filled */
495 #define QUEUE_FLAG_ASYNCFULL 4 /* write queue has been filled */
496 #define QUEUE_FLAG_DYING 5 /* queue being torn down */
497 #define QUEUE_FLAG_BYPASS 6 /* act as dumb FIFO queue */
498 #define QUEUE_FLAG_BIDI 7 /* queue supports bidi requests */
499 #define QUEUE_FLAG_NOMERGES 8 /* disable merge attempts */
500 #define QUEUE_FLAG_SAME_COMP 9 /* complete on same CPU-group */
501 #define QUEUE_FLAG_FAIL_IO 10 /* fake timeout */
502 #define QUEUE_FLAG_STACKABLE 11 /* supports request stacking */
503 #define QUEUE_FLAG_NONROT 12 /* non-rotational device (SSD) */
504 #define QUEUE_FLAG_VIRT QUEUE_FLAG_NONROT /* paravirt device */
505 #define QUEUE_FLAG_IO_STAT 13 /* do IO stats */
506 #define QUEUE_FLAG_DISCARD 14 /* supports DISCARD */
507 #define QUEUE_FLAG_NOXMERGES 15 /* No extended merges */
508 #define QUEUE_FLAG_ADD_RANDOM 16 /* Contributes to random pool */
509 #define QUEUE_FLAG_SECDISCARD 17 /* supports SECDISCARD */
510 #define QUEUE_FLAG_SAME_FORCE 18 /* force complete on same CPU */
511 #define QUEUE_FLAG_DEAD 19 /* queue tear-down finished */
512 #define QUEUE_FLAG_INIT_DONE 20 /* queue is initialized */
513 #define QUEUE_FLAG_NO_SG_MERGE 21 /* don't attempt to merge SG segments*/
514 #define QUEUE_FLAG_SG_GAPS 22 /* queue doesn't support SG gaps */
515
516 #define QUEUE_FLAG_DEFAULT ((1 << QUEUE_FLAG_IO_STAT) | \
517 (1 << QUEUE_FLAG_STACKABLE) | \
518 (1 << QUEUE_FLAG_SAME_COMP) | \
519 (1 << QUEUE_FLAG_ADD_RANDOM))
520
521 #define QUEUE_FLAG_MQ_DEFAULT ((1 << QUEUE_FLAG_IO_STAT) | \
522 (1 << QUEUE_FLAG_SAME_COMP))
523
queue_lockdep_assert_held(struct request_queue * q)524 static inline void queue_lockdep_assert_held(struct request_queue *q)
525 {
526 if (q->queue_lock)
527 lockdep_assert_held(q->queue_lock);
528 }
529
queue_flag_set_unlocked(unsigned int flag,struct request_queue * q)530 static inline void queue_flag_set_unlocked(unsigned int flag,
531 struct request_queue *q)
532 {
533 __set_bit(flag, &q->queue_flags);
534 }
535
queue_flag_test_and_clear(unsigned int flag,struct request_queue * q)536 static inline int queue_flag_test_and_clear(unsigned int flag,
537 struct request_queue *q)
538 {
539 queue_lockdep_assert_held(q);
540
541 if (test_bit(flag, &q->queue_flags)) {
542 __clear_bit(flag, &q->queue_flags);
543 return 1;
544 }
545
546 return 0;
547 }
548
queue_flag_test_and_set(unsigned int flag,struct request_queue * q)549 static inline int queue_flag_test_and_set(unsigned int flag,
550 struct request_queue *q)
551 {
552 queue_lockdep_assert_held(q);
553
554 if (!test_bit(flag, &q->queue_flags)) {
555 __set_bit(flag, &q->queue_flags);
556 return 0;
557 }
558
559 return 1;
560 }
561
queue_flag_set(unsigned int flag,struct request_queue * q)562 static inline void queue_flag_set(unsigned int flag, struct request_queue *q)
563 {
564 queue_lockdep_assert_held(q);
565 __set_bit(flag, &q->queue_flags);
566 }
567
queue_flag_clear_unlocked(unsigned int flag,struct request_queue * q)568 static inline void queue_flag_clear_unlocked(unsigned int flag,
569 struct request_queue *q)
570 {
571 __clear_bit(flag, &q->queue_flags);
572 }
573
queue_in_flight(struct request_queue * q)574 static inline int queue_in_flight(struct request_queue *q)
575 {
576 return q->in_flight[0] + q->in_flight[1];
577 }
578
queue_flag_clear(unsigned int flag,struct request_queue * q)579 static inline void queue_flag_clear(unsigned int flag, struct request_queue *q)
580 {
581 queue_lockdep_assert_held(q);
582 __clear_bit(flag, &q->queue_flags);
583 }
584
585 #define blk_queue_tagged(q) test_bit(QUEUE_FLAG_QUEUED, &(q)->queue_flags)
586 #define blk_queue_stopped(q) test_bit(QUEUE_FLAG_STOPPED, &(q)->queue_flags)
587 #define blk_queue_dying(q) test_bit(QUEUE_FLAG_DYING, &(q)->queue_flags)
588 #define blk_queue_dead(q) test_bit(QUEUE_FLAG_DEAD, &(q)->queue_flags)
589 #define blk_queue_bypass(q) test_bit(QUEUE_FLAG_BYPASS, &(q)->queue_flags)
590 #define blk_queue_init_done(q) test_bit(QUEUE_FLAG_INIT_DONE, &(q)->queue_flags)
591 #define blk_queue_nomerges(q) test_bit(QUEUE_FLAG_NOMERGES, &(q)->queue_flags)
592 #define blk_queue_noxmerges(q) \
593 test_bit(QUEUE_FLAG_NOXMERGES, &(q)->queue_flags)
594 #define blk_queue_nonrot(q) test_bit(QUEUE_FLAG_NONROT, &(q)->queue_flags)
595 #define blk_queue_io_stat(q) test_bit(QUEUE_FLAG_IO_STAT, &(q)->queue_flags)
596 #define blk_queue_add_random(q) test_bit(QUEUE_FLAG_ADD_RANDOM, &(q)->queue_flags)
597 #define blk_queue_stackable(q) \
598 test_bit(QUEUE_FLAG_STACKABLE, &(q)->queue_flags)
599 #define blk_queue_discard(q) test_bit(QUEUE_FLAG_DISCARD, &(q)->queue_flags)
600 #define blk_queue_secdiscard(q) (blk_queue_discard(q) && \
601 test_bit(QUEUE_FLAG_SECDISCARD, &(q)->queue_flags))
602
603 #define blk_noretry_request(rq) \
604 ((rq)->cmd_flags & (REQ_FAILFAST_DEV|REQ_FAILFAST_TRANSPORT| \
605 REQ_FAILFAST_DRIVER))
606
607 #define blk_account_rq(rq) \
608 (((rq)->cmd_flags & REQ_STARTED) && \
609 ((rq)->cmd_type == REQ_TYPE_FS))
610
611 #define blk_pm_request(rq) \
612 ((rq)->cmd_type == REQ_TYPE_PM_SUSPEND || \
613 (rq)->cmd_type == REQ_TYPE_PM_RESUME)
614
615 #define blk_rq_cpu_valid(rq) ((rq)->cpu != -1)
616 #define blk_bidi_rq(rq) ((rq)->next_rq != NULL)
617 /* rq->queuelist of dequeued request must be list_empty() */
618 #define blk_queued_rq(rq) (!list_empty(&(rq)->queuelist))
619
620 #define list_entry_rq(ptr) list_entry((ptr), struct request, queuelist)
621
622 #define rq_data_dir(rq) ((int)((rq)->cmd_flags & 1))
623
624 /*
625 * Driver can handle struct request, if it either has an old style
626 * request_fn defined, or is blk-mq based.
627 */
queue_is_rq_based(struct request_queue * q)628 static inline bool queue_is_rq_based(struct request_queue *q)
629 {
630 return q->request_fn || q->mq_ops;
631 }
632
blk_queue_cluster(struct request_queue * q)633 static inline unsigned int blk_queue_cluster(struct request_queue *q)
634 {
635 return q->limits.cluster;
636 }
637
638 /*
639 * We regard a request as sync, if either a read or a sync write
640 */
rw_is_sync(unsigned int rw_flags)641 static inline bool rw_is_sync(unsigned int rw_flags)
642 {
643 return !(rw_flags & REQ_WRITE) || (rw_flags & REQ_SYNC);
644 }
645
rq_is_sync(struct request * rq)646 static inline bool rq_is_sync(struct request *rq)
647 {
648 return rw_is_sync(rq->cmd_flags);
649 }
650
blk_rl_full(struct request_list * rl,bool sync)651 static inline bool blk_rl_full(struct request_list *rl, bool sync)
652 {
653 unsigned int flag = sync ? BLK_RL_SYNCFULL : BLK_RL_ASYNCFULL;
654
655 return rl->flags & flag;
656 }
657
blk_set_rl_full(struct request_list * rl,bool sync)658 static inline void blk_set_rl_full(struct request_list *rl, bool sync)
659 {
660 unsigned int flag = sync ? BLK_RL_SYNCFULL : BLK_RL_ASYNCFULL;
661
662 rl->flags |= flag;
663 }
664
blk_clear_rl_full(struct request_list * rl,bool sync)665 static inline void blk_clear_rl_full(struct request_list *rl, bool sync)
666 {
667 unsigned int flag = sync ? BLK_RL_SYNCFULL : BLK_RL_ASYNCFULL;
668
669 rl->flags &= ~flag;
670 }
671
rq_mergeable(struct request * rq)672 static inline bool rq_mergeable(struct request *rq)
673 {
674 if (rq->cmd_type != REQ_TYPE_FS)
675 return false;
676
677 if (rq->cmd_flags & REQ_NOMERGE_FLAGS)
678 return false;
679
680 return true;
681 }
682
blk_check_merge_flags(unsigned int flags1,unsigned int flags2)683 static inline bool blk_check_merge_flags(unsigned int flags1,
684 unsigned int flags2)
685 {
686 if ((flags1 & REQ_DISCARD) != (flags2 & REQ_DISCARD))
687 return false;
688
689 if ((flags1 & REQ_SECURE) != (flags2 & REQ_SECURE))
690 return false;
691
692 if ((flags1 & REQ_WRITE_SAME) != (flags2 & REQ_WRITE_SAME))
693 return false;
694
695 return true;
696 }
697
blk_write_same_mergeable(struct bio * a,struct bio * b)698 static inline bool blk_write_same_mergeable(struct bio *a, struct bio *b)
699 {
700 if (bio_data(a) == bio_data(b))
701 return true;
702
703 return false;
704 }
705
706 /*
707 * q->prep_rq_fn return values
708 */
709 #define BLKPREP_OK 0 /* serve it */
710 #define BLKPREP_KILL 1 /* fatal error, kill */
711 #define BLKPREP_DEFER 2 /* leave on queue */
712
713 extern unsigned long blk_max_low_pfn, blk_max_pfn;
714
715 /*
716 * standard bounce addresses:
717 *
718 * BLK_BOUNCE_HIGH : bounce all highmem pages
719 * BLK_BOUNCE_ANY : don't bounce anything
720 * BLK_BOUNCE_ISA : bounce pages above ISA DMA boundary
721 */
722
723 #if BITS_PER_LONG == 32
724 #define BLK_BOUNCE_HIGH ((u64)blk_max_low_pfn << PAGE_SHIFT)
725 #else
726 #define BLK_BOUNCE_HIGH -1ULL
727 #endif
728 #define BLK_BOUNCE_ANY (-1ULL)
729 #define BLK_BOUNCE_ISA (DMA_BIT_MASK(24))
730
731 /*
732 * default timeout for SG_IO if none specified
733 */
734 #define BLK_DEFAULT_SG_TIMEOUT (60 * HZ)
735 #define BLK_MIN_SG_TIMEOUT (7 * HZ)
736
737 #ifdef CONFIG_BOUNCE
738 extern int init_emergency_isa_pool(void);
739 extern void blk_queue_bounce(struct request_queue *q, struct bio **bio);
740 #else
init_emergency_isa_pool(void)741 static inline int init_emergency_isa_pool(void)
742 {
743 return 0;
744 }
blk_queue_bounce(struct request_queue * q,struct bio ** bio)745 static inline void blk_queue_bounce(struct request_queue *q, struct bio **bio)
746 {
747 }
748 #endif /* CONFIG_MMU */
749
750 struct rq_map_data {
751 struct page **pages;
752 int page_order;
753 int nr_entries;
754 unsigned long offset;
755 int null_mapped;
756 int from_user;
757 };
758
759 struct req_iterator {
760 struct bvec_iter iter;
761 struct bio *bio;
762 };
763
764 /* This should not be used directly - use rq_for_each_segment */
765 #define for_each_bio(_bio) \
766 for (; _bio; _bio = _bio->bi_next)
767 #define __rq_for_each_bio(_bio, rq) \
768 if ((rq->bio)) \
769 for (_bio = (rq)->bio; _bio; _bio = _bio->bi_next)
770
771 #define rq_for_each_segment(bvl, _rq, _iter) \
772 __rq_for_each_bio(_iter.bio, _rq) \
773 bio_for_each_segment(bvl, _iter.bio, _iter.iter)
774
775 #define rq_iter_last(bvec, _iter) \
776 (_iter.bio->bi_next == NULL && \
777 bio_iter_last(bvec, _iter.iter))
778
779 #ifndef ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE
780 # error "You should define ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE for your platform"
781 #endif
782 #if ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE
783 extern void rq_flush_dcache_pages(struct request *rq);
784 #else
rq_flush_dcache_pages(struct request * rq)785 static inline void rq_flush_dcache_pages(struct request *rq)
786 {
787 }
788 #endif
789
790 extern int blk_register_queue(struct gendisk *disk);
791 extern void blk_unregister_queue(struct gendisk *disk);
792 extern void generic_make_request(struct bio *bio);
793 extern void blk_rq_init(struct request_queue *q, struct request *rq);
794 extern void blk_put_request(struct request *);
795 extern void __blk_put_request(struct request_queue *, struct request *);
796 extern struct request *blk_get_request(struct request_queue *, int, gfp_t);
797 extern struct request *blk_make_request(struct request_queue *, struct bio *,
798 gfp_t);
799 extern void blk_rq_set_block_pc(struct request *);
800 extern void blk_requeue_request(struct request_queue *, struct request *);
801 extern void blk_add_request_payload(struct request *rq, struct page *page,
802 unsigned int len);
803 extern int blk_rq_check_limits(struct request_queue *q, struct request *rq);
804 extern int blk_lld_busy(struct request_queue *q);
805 extern int blk_rq_prep_clone(struct request *rq, struct request *rq_src,
806 struct bio_set *bs, gfp_t gfp_mask,
807 int (*bio_ctr)(struct bio *, struct bio *, void *),
808 void *data);
809 extern void blk_rq_unprep_clone(struct request *rq);
810 extern int blk_insert_cloned_request(struct request_queue *q,
811 struct request *rq);
812 extern void blk_delay_queue(struct request_queue *, unsigned long);
813 extern void blk_recount_segments(struct request_queue *, struct bio *);
814 extern int scsi_verify_blk_ioctl(struct block_device *, unsigned int);
815 extern int scsi_cmd_blk_ioctl(struct block_device *, fmode_t,
816 unsigned int, void __user *);
817 extern int scsi_cmd_ioctl(struct request_queue *, struct gendisk *, fmode_t,
818 unsigned int, void __user *);
819 extern int sg_scsi_ioctl(struct request_queue *, struct gendisk *, fmode_t,
820 struct scsi_ioctl_command __user *);
821
822 extern void blk_queue_bio(struct request_queue *q, struct bio *bio);
823
824 /*
825 * A queue has just exitted congestion. Note this in the global counter of
826 * congested queues, and wake up anyone who was waiting for requests to be
827 * put back.
828 */
blk_clear_queue_congested(struct request_queue * q,int sync)829 static inline void blk_clear_queue_congested(struct request_queue *q, int sync)
830 {
831 clear_bdi_congested(&q->backing_dev_info, sync);
832 }
833
834 /*
835 * A queue has just entered congestion. Flag that in the queue's VM-visible
836 * state flags and increment the global gounter of congested queues.
837 */
blk_set_queue_congested(struct request_queue * q,int sync)838 static inline void blk_set_queue_congested(struct request_queue *q, int sync)
839 {
840 set_bdi_congested(&q->backing_dev_info, sync);
841 }
842
843 extern void blk_start_queue(struct request_queue *q);
844 extern void blk_stop_queue(struct request_queue *q);
845 extern void blk_sync_queue(struct request_queue *q);
846 extern void __blk_stop_queue(struct request_queue *q);
847 extern void __blk_run_queue(struct request_queue *q);
848 extern void blk_run_queue(struct request_queue *);
849 extern void blk_run_queue_async(struct request_queue *q);
850 extern int blk_rq_map_user(struct request_queue *, struct request *,
851 struct rq_map_data *, void __user *, unsigned long,
852 gfp_t);
853 extern int blk_rq_unmap_user(struct bio *);
854 extern int blk_rq_map_kern(struct request_queue *, struct request *, void *, unsigned int, gfp_t);
855 extern int blk_rq_map_user_iov(struct request_queue *, struct request *,
856 struct rq_map_data *, const struct sg_iovec *,
857 int, unsigned int, gfp_t);
858 extern int blk_execute_rq(struct request_queue *, struct gendisk *,
859 struct request *, int);
860 extern void blk_execute_rq_nowait(struct request_queue *, struct gendisk *,
861 struct request *, int, rq_end_io_fn *);
862
bdev_get_queue(struct block_device * bdev)863 static inline struct request_queue *bdev_get_queue(struct block_device *bdev)
864 {
865 return bdev->bd_disk->queue; /* this is never NULL */
866 }
867
868 /*
869 * blk_rq_pos() : the current sector
870 * blk_rq_bytes() : bytes left in the entire request
871 * blk_rq_cur_bytes() : bytes left in the current segment
872 * blk_rq_err_bytes() : bytes left till the next error boundary
873 * blk_rq_sectors() : sectors left in the entire request
874 * blk_rq_cur_sectors() : sectors left in the current segment
875 */
blk_rq_pos(const struct request * rq)876 static inline sector_t blk_rq_pos(const struct request *rq)
877 {
878 return rq->__sector;
879 }
880
blk_rq_bytes(const struct request * rq)881 static inline unsigned int blk_rq_bytes(const struct request *rq)
882 {
883 return rq->__data_len;
884 }
885
blk_rq_cur_bytes(const struct request * rq)886 static inline int blk_rq_cur_bytes(const struct request *rq)
887 {
888 return rq->bio ? bio_cur_bytes(rq->bio) : 0;
889 }
890
891 extern unsigned int blk_rq_err_bytes(const struct request *rq);
892
blk_rq_sectors(const struct request * rq)893 static inline unsigned int blk_rq_sectors(const struct request *rq)
894 {
895 return blk_rq_bytes(rq) >> 9;
896 }
897
blk_rq_cur_sectors(const struct request * rq)898 static inline unsigned int blk_rq_cur_sectors(const struct request *rq)
899 {
900 return blk_rq_cur_bytes(rq) >> 9;
901 }
902
blk_queue_get_max_sectors(struct request_queue * q,unsigned int cmd_flags)903 static inline unsigned int blk_queue_get_max_sectors(struct request_queue *q,
904 unsigned int cmd_flags)
905 {
906 if (unlikely(cmd_flags & REQ_DISCARD))
907 return min(q->limits.max_discard_sectors, UINT_MAX >> 9);
908
909 if (unlikely(cmd_flags & REQ_WRITE_SAME))
910 return q->limits.max_write_same_sectors;
911
912 return q->limits.max_sectors;
913 }
914
915 /*
916 * Return maximum size of a request at given offset. Only valid for
917 * file system requests.
918 */
blk_max_size_offset(struct request_queue * q,sector_t offset)919 static inline unsigned int blk_max_size_offset(struct request_queue *q,
920 sector_t offset)
921 {
922 if (!q->limits.chunk_sectors)
923 return q->limits.max_sectors;
924
925 return q->limits.chunk_sectors -
926 (offset & (q->limits.chunk_sectors - 1));
927 }
928
blk_rq_get_max_sectors(struct request * rq)929 static inline unsigned int blk_rq_get_max_sectors(struct request *rq)
930 {
931 struct request_queue *q = rq->q;
932
933 if (unlikely(rq->cmd_type == REQ_TYPE_BLOCK_PC))
934 return q->limits.max_hw_sectors;
935
936 if (!q->limits.chunk_sectors)
937 return blk_queue_get_max_sectors(q, rq->cmd_flags);
938
939 return min(blk_max_size_offset(q, blk_rq_pos(rq)),
940 blk_queue_get_max_sectors(q, rq->cmd_flags));
941 }
942
blk_rq_count_bios(struct request * rq)943 static inline unsigned int blk_rq_count_bios(struct request *rq)
944 {
945 unsigned int nr_bios = 0;
946 struct bio *bio;
947
948 __rq_for_each_bio(bio, rq)
949 nr_bios++;
950
951 return nr_bios;
952 }
953
954 /*
955 * Request issue related functions.
956 */
957 extern struct request *blk_peek_request(struct request_queue *q);
958 extern void blk_start_request(struct request *rq);
959 extern struct request *blk_fetch_request(struct request_queue *q);
960
961 /*
962 * Request completion related functions.
963 *
964 * blk_update_request() completes given number of bytes and updates
965 * the request without completing it.
966 *
967 * blk_end_request() and friends. __blk_end_request() must be called
968 * with the request queue spinlock acquired.
969 *
970 * Several drivers define their own end_request and call
971 * blk_end_request() for parts of the original function.
972 * This prevents code duplication in drivers.
973 */
974 extern bool blk_update_request(struct request *rq, int error,
975 unsigned int nr_bytes);
976 extern void blk_finish_request(struct request *rq, int error);
977 extern bool blk_end_request(struct request *rq, int error,
978 unsigned int nr_bytes);
979 extern void blk_end_request_all(struct request *rq, int error);
980 extern bool blk_end_request_cur(struct request *rq, int error);
981 extern bool blk_end_request_err(struct request *rq, int error);
982 extern bool __blk_end_request(struct request *rq, int error,
983 unsigned int nr_bytes);
984 extern void __blk_end_request_all(struct request *rq, int error);
985 extern bool __blk_end_request_cur(struct request *rq, int error);
986 extern bool __blk_end_request_err(struct request *rq, int error);
987
988 extern void blk_complete_request(struct request *);
989 extern void __blk_complete_request(struct request *);
990 extern void blk_abort_request(struct request *);
991 extern void blk_unprep_request(struct request *);
992
993 /*
994 * Access functions for manipulating queue properties
995 */
996 extern struct request_queue *blk_init_queue_node(request_fn_proc *rfn,
997 spinlock_t *lock, int node_id);
998 extern struct request_queue *blk_init_queue(request_fn_proc *, spinlock_t *);
999 extern struct request_queue *blk_init_allocated_queue(struct request_queue *,
1000 request_fn_proc *, spinlock_t *);
1001 extern void blk_cleanup_queue(struct request_queue *);
1002 extern void blk_queue_make_request(struct request_queue *, make_request_fn *);
1003 extern void blk_queue_bounce_limit(struct request_queue *, u64);
1004 extern void blk_limits_max_hw_sectors(struct queue_limits *, unsigned int);
1005 extern void blk_queue_max_hw_sectors(struct request_queue *, unsigned int);
1006 extern void blk_queue_chunk_sectors(struct request_queue *, unsigned int);
1007 extern void blk_queue_max_segments(struct request_queue *, unsigned short);
1008 extern void blk_queue_max_segment_size(struct request_queue *, unsigned int);
1009 extern void blk_queue_max_discard_sectors(struct request_queue *q,
1010 unsigned int max_discard_sectors);
1011 extern void blk_queue_max_write_same_sectors(struct request_queue *q,
1012 unsigned int max_write_same_sectors);
1013 extern void blk_queue_logical_block_size(struct request_queue *, unsigned short);
1014 extern void blk_queue_physical_block_size(struct request_queue *, unsigned int);
1015 extern void blk_queue_alignment_offset(struct request_queue *q,
1016 unsigned int alignment);
1017 extern void blk_limits_io_min(struct queue_limits *limits, unsigned int min);
1018 extern void blk_queue_io_min(struct request_queue *q, unsigned int min);
1019 extern void blk_limits_io_opt(struct queue_limits *limits, unsigned int opt);
1020 extern void blk_queue_io_opt(struct request_queue *q, unsigned int opt);
1021 extern void blk_set_default_limits(struct queue_limits *lim);
1022 extern void blk_set_stacking_limits(struct queue_limits *lim);
1023 extern int blk_stack_limits(struct queue_limits *t, struct queue_limits *b,
1024 sector_t offset);
1025 extern int bdev_stack_limits(struct queue_limits *t, struct block_device *bdev,
1026 sector_t offset);
1027 extern void disk_stack_limits(struct gendisk *disk, struct block_device *bdev,
1028 sector_t offset);
1029 extern void blk_queue_stack_limits(struct request_queue *t, struct request_queue *b);
1030 extern void blk_queue_dma_pad(struct request_queue *, unsigned int);
1031 extern void blk_queue_update_dma_pad(struct request_queue *, unsigned int);
1032 extern int blk_queue_dma_drain(struct request_queue *q,
1033 dma_drain_needed_fn *dma_drain_needed,
1034 void *buf, unsigned int size);
1035 extern void blk_queue_lld_busy(struct request_queue *q, lld_busy_fn *fn);
1036 extern void blk_queue_segment_boundary(struct request_queue *, unsigned long);
1037 extern void blk_queue_prep_rq(struct request_queue *, prep_rq_fn *pfn);
1038 extern void blk_queue_unprep_rq(struct request_queue *, unprep_rq_fn *ufn);
1039 extern void blk_queue_merge_bvec(struct request_queue *, merge_bvec_fn *);
1040 extern void blk_queue_dma_alignment(struct request_queue *, int);
1041 extern void blk_queue_update_dma_alignment(struct request_queue *, int);
1042 extern void blk_queue_softirq_done(struct request_queue *, softirq_done_fn *);
1043 extern void blk_queue_rq_timed_out(struct request_queue *, rq_timed_out_fn *);
1044 extern void blk_queue_rq_timeout(struct request_queue *, unsigned int);
1045 extern void blk_queue_flush(struct request_queue *q, unsigned int flush);
1046 extern void blk_queue_flush_queueable(struct request_queue *q, bool queueable);
1047 extern struct backing_dev_info *blk_get_backing_dev_info(struct block_device *bdev);
1048
1049 extern int blk_rq_map_sg(struct request_queue *, struct request *, struct scatterlist *);
1050 extern int blk_bio_map_sg(struct request_queue *q, struct bio *bio,
1051 struct scatterlist *sglist);
1052 extern void blk_dump_rq_flags(struct request *, char *);
1053 extern long nr_blockdev_pages(void);
1054
1055 bool __must_check blk_get_queue(struct request_queue *);
1056 struct request_queue *blk_alloc_queue(gfp_t);
1057 struct request_queue *blk_alloc_queue_node(gfp_t, int);
1058 extern void blk_put_queue(struct request_queue *);
1059
1060 /*
1061 * block layer runtime pm functions
1062 */
1063 #ifdef CONFIG_PM_RUNTIME
1064 extern void blk_pm_runtime_init(struct request_queue *q, struct device *dev);
1065 extern int blk_pre_runtime_suspend(struct request_queue *q);
1066 extern void blk_post_runtime_suspend(struct request_queue *q, int err);
1067 extern void blk_pre_runtime_resume(struct request_queue *q);
1068 extern void blk_post_runtime_resume(struct request_queue *q, int err);
1069 #else
blk_pm_runtime_init(struct request_queue * q,struct device * dev)1070 static inline void blk_pm_runtime_init(struct request_queue *q,
1071 struct device *dev) {}
blk_pre_runtime_suspend(struct request_queue * q)1072 static inline int blk_pre_runtime_suspend(struct request_queue *q)
1073 {
1074 return -ENOSYS;
1075 }
blk_post_runtime_suspend(struct request_queue * q,int err)1076 static inline void blk_post_runtime_suspend(struct request_queue *q, int err) {}
blk_pre_runtime_resume(struct request_queue * q)1077 static inline void blk_pre_runtime_resume(struct request_queue *q) {}
blk_post_runtime_resume(struct request_queue * q,int err)1078 static inline void blk_post_runtime_resume(struct request_queue *q, int err) {}
1079 #endif
1080
1081 /*
1082 * blk_plug permits building a queue of related requests by holding the I/O
1083 * fragments for a short period. This allows merging of sequential requests
1084 * into single larger request. As the requests are moved from a per-task list to
1085 * the device's request_queue in a batch, this results in improved scalability
1086 * as the lock contention for request_queue lock is reduced.
1087 *
1088 * It is ok not to disable preemption when adding the request to the plug list
1089 * or when attempting a merge, because blk_schedule_flush_list() will only flush
1090 * the plug list when the task sleeps by itself. For details, please see
1091 * schedule() where blk_schedule_flush_plug() is called.
1092 */
1093 struct blk_plug {
1094 struct list_head list; /* requests */
1095 struct list_head mq_list; /* blk-mq requests */
1096 struct list_head cb_list; /* md requires an unplug callback */
1097 };
1098 #define BLK_MAX_REQUEST_COUNT 16
1099
1100 struct blk_plug_cb;
1101 typedef void (*blk_plug_cb_fn)(struct blk_plug_cb *, bool);
1102 struct blk_plug_cb {
1103 struct list_head list;
1104 blk_plug_cb_fn callback;
1105 void *data;
1106 };
1107 extern struct blk_plug_cb *blk_check_plugged(blk_plug_cb_fn unplug,
1108 void *data, int size);
1109 extern void blk_start_plug(struct blk_plug *);
1110 extern void blk_finish_plug(struct blk_plug *);
1111 extern void blk_flush_plug_list(struct blk_plug *, bool);
1112
blk_flush_plug(struct task_struct * tsk)1113 static inline void blk_flush_plug(struct task_struct *tsk)
1114 {
1115 struct blk_plug *plug = tsk->plug;
1116
1117 if (plug)
1118 blk_flush_plug_list(plug, false);
1119 }
1120
blk_schedule_flush_plug(struct task_struct * tsk)1121 static inline void blk_schedule_flush_plug(struct task_struct *tsk)
1122 {
1123 struct blk_plug *plug = tsk->plug;
1124
1125 if (plug)
1126 blk_flush_plug_list(plug, true);
1127 }
1128
blk_needs_flush_plug(struct task_struct * tsk)1129 static inline bool blk_needs_flush_plug(struct task_struct *tsk)
1130 {
1131 struct blk_plug *plug = tsk->plug;
1132
1133 return plug &&
1134 (!list_empty(&plug->list) ||
1135 !list_empty(&plug->mq_list) ||
1136 !list_empty(&plug->cb_list));
1137 }
1138
1139 /*
1140 * tag stuff
1141 */
1142 #define blk_rq_tagged(rq) ((rq)->cmd_flags & REQ_QUEUED)
1143 extern int blk_queue_start_tag(struct request_queue *, struct request *);
1144 extern struct request *blk_queue_find_tag(struct request_queue *, int);
1145 extern void blk_queue_end_tag(struct request_queue *, struct request *);
1146 extern int blk_queue_init_tags(struct request_queue *, int, struct blk_queue_tag *);
1147 extern void blk_queue_free_tags(struct request_queue *);
1148 extern int blk_queue_resize_tags(struct request_queue *, int);
1149 extern void blk_queue_invalidate_tags(struct request_queue *);
1150 extern struct blk_queue_tag *blk_init_tags(int);
1151 extern void blk_free_tags(struct blk_queue_tag *);
1152
blk_map_queue_find_tag(struct blk_queue_tag * bqt,int tag)1153 static inline struct request *blk_map_queue_find_tag(struct blk_queue_tag *bqt,
1154 int tag)
1155 {
1156 if (unlikely(bqt == NULL || tag >= bqt->real_max_depth))
1157 return NULL;
1158 return bqt->tag_index[tag];
1159 }
1160
1161 #define BLKDEV_DISCARD_SECURE 0x01 /* secure discard */
1162
1163 extern int blkdev_issue_flush(struct block_device *, gfp_t, sector_t *);
1164 extern int blkdev_issue_discard(struct block_device *bdev, sector_t sector,
1165 sector_t nr_sects, gfp_t gfp_mask, unsigned long flags);
1166 extern int blkdev_issue_write_same(struct block_device *bdev, sector_t sector,
1167 sector_t nr_sects, gfp_t gfp_mask, struct page *page);
1168 extern int blkdev_issue_zeroout(struct block_device *bdev, sector_t sector,
1169 sector_t nr_sects, gfp_t gfp_mask);
sb_issue_discard(struct super_block * sb,sector_t block,sector_t nr_blocks,gfp_t gfp_mask,unsigned long flags)1170 static inline int sb_issue_discard(struct super_block *sb, sector_t block,
1171 sector_t nr_blocks, gfp_t gfp_mask, unsigned long flags)
1172 {
1173 return blkdev_issue_discard(sb->s_bdev, block << (sb->s_blocksize_bits - 9),
1174 nr_blocks << (sb->s_blocksize_bits - 9),
1175 gfp_mask, flags);
1176 }
sb_issue_zeroout(struct super_block * sb,sector_t block,sector_t nr_blocks,gfp_t gfp_mask)1177 static inline int sb_issue_zeroout(struct super_block *sb, sector_t block,
1178 sector_t nr_blocks, gfp_t gfp_mask)
1179 {
1180 return blkdev_issue_zeroout(sb->s_bdev,
1181 block << (sb->s_blocksize_bits - 9),
1182 nr_blocks << (sb->s_blocksize_bits - 9),
1183 gfp_mask);
1184 }
1185
1186 extern int blk_verify_command(unsigned char *cmd, fmode_t has_write_perm);
1187
1188 enum blk_default_limits {
1189 BLK_MAX_SEGMENTS = 128,
1190 BLK_SAFE_MAX_SECTORS = 255,
1191 BLK_DEF_MAX_SECTORS = 1024,
1192 BLK_MAX_SEGMENT_SIZE = 65536,
1193 BLK_SEG_BOUNDARY_MASK = 0xFFFFFFFFUL,
1194 };
1195
1196 #define blkdev_entry_to_request(entry) list_entry((entry), struct request, queuelist)
1197
queue_bounce_pfn(struct request_queue * q)1198 static inline unsigned long queue_bounce_pfn(struct request_queue *q)
1199 {
1200 return q->limits.bounce_pfn;
1201 }
1202
queue_segment_boundary(struct request_queue * q)1203 static inline unsigned long queue_segment_boundary(struct request_queue *q)
1204 {
1205 return q->limits.seg_boundary_mask;
1206 }
1207
queue_max_sectors(struct request_queue * q)1208 static inline unsigned int queue_max_sectors(struct request_queue *q)
1209 {
1210 return q->limits.max_sectors;
1211 }
1212
queue_max_hw_sectors(struct request_queue * q)1213 static inline unsigned int queue_max_hw_sectors(struct request_queue *q)
1214 {
1215 return q->limits.max_hw_sectors;
1216 }
1217
queue_max_segments(struct request_queue * q)1218 static inline unsigned short queue_max_segments(struct request_queue *q)
1219 {
1220 return q->limits.max_segments;
1221 }
1222
queue_max_segment_size(struct request_queue * q)1223 static inline unsigned int queue_max_segment_size(struct request_queue *q)
1224 {
1225 return q->limits.max_segment_size;
1226 }
1227
queue_logical_block_size(struct request_queue * q)1228 static inline unsigned short queue_logical_block_size(struct request_queue *q)
1229 {
1230 int retval = 512;
1231
1232 if (q && q->limits.logical_block_size)
1233 retval = q->limits.logical_block_size;
1234
1235 return retval;
1236 }
1237
bdev_logical_block_size(struct block_device * bdev)1238 static inline unsigned short bdev_logical_block_size(struct block_device *bdev)
1239 {
1240 return queue_logical_block_size(bdev_get_queue(bdev));
1241 }
1242
queue_physical_block_size(struct request_queue * q)1243 static inline unsigned int queue_physical_block_size(struct request_queue *q)
1244 {
1245 return q->limits.physical_block_size;
1246 }
1247
bdev_physical_block_size(struct block_device * bdev)1248 static inline unsigned int bdev_physical_block_size(struct block_device *bdev)
1249 {
1250 return queue_physical_block_size(bdev_get_queue(bdev));
1251 }
1252
queue_io_min(struct request_queue * q)1253 static inline unsigned int queue_io_min(struct request_queue *q)
1254 {
1255 return q->limits.io_min;
1256 }
1257
bdev_io_min(struct block_device * bdev)1258 static inline int bdev_io_min(struct block_device *bdev)
1259 {
1260 return queue_io_min(bdev_get_queue(bdev));
1261 }
1262
queue_io_opt(struct request_queue * q)1263 static inline unsigned int queue_io_opt(struct request_queue *q)
1264 {
1265 return q->limits.io_opt;
1266 }
1267
bdev_io_opt(struct block_device * bdev)1268 static inline int bdev_io_opt(struct block_device *bdev)
1269 {
1270 return queue_io_opt(bdev_get_queue(bdev));
1271 }
1272
queue_alignment_offset(struct request_queue * q)1273 static inline int queue_alignment_offset(struct request_queue *q)
1274 {
1275 if (q->limits.misaligned)
1276 return -1;
1277
1278 return q->limits.alignment_offset;
1279 }
1280
queue_limit_alignment_offset(struct queue_limits * lim,sector_t sector)1281 static inline int queue_limit_alignment_offset(struct queue_limits *lim, sector_t sector)
1282 {
1283 unsigned int granularity = max(lim->physical_block_size, lim->io_min);
1284 unsigned int alignment = sector_div(sector, granularity >> 9) << 9;
1285
1286 return (granularity + lim->alignment_offset - alignment) % granularity;
1287 }
1288
bdev_alignment_offset(struct block_device * bdev)1289 static inline int bdev_alignment_offset(struct block_device *bdev)
1290 {
1291 struct request_queue *q = bdev_get_queue(bdev);
1292
1293 if (q->limits.misaligned)
1294 return -1;
1295
1296 if (bdev != bdev->bd_contains)
1297 return bdev->bd_part->alignment_offset;
1298
1299 return q->limits.alignment_offset;
1300 }
1301
queue_discard_alignment(struct request_queue * q)1302 static inline int queue_discard_alignment(struct request_queue *q)
1303 {
1304 if (q->limits.discard_misaligned)
1305 return -1;
1306
1307 return q->limits.discard_alignment;
1308 }
1309
queue_limit_discard_alignment(struct queue_limits * lim,sector_t sector)1310 static inline int queue_limit_discard_alignment(struct queue_limits *lim, sector_t sector)
1311 {
1312 unsigned int alignment, granularity, offset;
1313
1314 if (!lim->max_discard_sectors)
1315 return 0;
1316
1317 /* Why are these in bytes, not sectors? */
1318 alignment = lim->discard_alignment >> 9;
1319 granularity = lim->discard_granularity >> 9;
1320 if (!granularity)
1321 return 0;
1322
1323 /* Offset of the partition start in 'granularity' sectors */
1324 offset = sector_div(sector, granularity);
1325
1326 /* And why do we do this modulus *again* in blkdev_issue_discard()? */
1327 offset = (granularity + alignment - offset) % granularity;
1328
1329 /* Turn it back into bytes, gaah */
1330 return offset << 9;
1331 }
1332
bdev_discard_alignment(struct block_device * bdev)1333 static inline int bdev_discard_alignment(struct block_device *bdev)
1334 {
1335 struct request_queue *q = bdev_get_queue(bdev);
1336
1337 if (bdev != bdev->bd_contains)
1338 return bdev->bd_part->discard_alignment;
1339
1340 return q->limits.discard_alignment;
1341 }
1342
queue_discard_zeroes_data(struct request_queue * q)1343 static inline unsigned int queue_discard_zeroes_data(struct request_queue *q)
1344 {
1345 if (q->limits.max_discard_sectors && q->limits.discard_zeroes_data == 1)
1346 return 1;
1347
1348 return 0;
1349 }
1350
bdev_discard_zeroes_data(struct block_device * bdev)1351 static inline unsigned int bdev_discard_zeroes_data(struct block_device *bdev)
1352 {
1353 return queue_discard_zeroes_data(bdev_get_queue(bdev));
1354 }
1355
bdev_write_same(struct block_device * bdev)1356 static inline unsigned int bdev_write_same(struct block_device *bdev)
1357 {
1358 struct request_queue *q = bdev_get_queue(bdev);
1359
1360 if (q)
1361 return q->limits.max_write_same_sectors;
1362
1363 return 0;
1364 }
1365
queue_dma_alignment(struct request_queue * q)1366 static inline int queue_dma_alignment(struct request_queue *q)
1367 {
1368 return q ? q->dma_alignment : 511;
1369 }
1370
blk_rq_aligned(struct request_queue * q,unsigned long addr,unsigned int len)1371 static inline int blk_rq_aligned(struct request_queue *q, unsigned long addr,
1372 unsigned int len)
1373 {
1374 unsigned int alignment = queue_dma_alignment(q) | q->dma_pad_mask;
1375 return !(addr & alignment) && !(len & alignment);
1376 }
1377
1378 /* assumes size > 256 */
blksize_bits(unsigned int size)1379 static inline unsigned int blksize_bits(unsigned int size)
1380 {
1381 unsigned int bits = 8;
1382 do {
1383 bits++;
1384 size >>= 1;
1385 } while (size > 256);
1386 return bits;
1387 }
1388
block_size(struct block_device * bdev)1389 static inline unsigned int block_size(struct block_device *bdev)
1390 {
1391 return bdev->bd_block_size;
1392 }
1393
queue_flush_queueable(struct request_queue * q)1394 static inline bool queue_flush_queueable(struct request_queue *q)
1395 {
1396 return !q->flush_not_queueable;
1397 }
1398
1399 typedef struct {struct page *v;} Sector;
1400
1401 unsigned char *read_dev_sector(struct block_device *, sector_t, Sector *);
1402
put_dev_sector(Sector p)1403 static inline void put_dev_sector(Sector p)
1404 {
1405 page_cache_release(p.v);
1406 }
1407
1408 struct work_struct;
1409 int kblockd_schedule_work(struct work_struct *work);
1410 int kblockd_schedule_delayed_work(struct delayed_work *dwork, unsigned long delay);
1411 int kblockd_schedule_delayed_work_on(int cpu, struct delayed_work *dwork, unsigned long delay);
1412
1413 #ifdef CONFIG_BLK_CGROUP
1414 /*
1415 * This should not be using sched_clock(). A real patch is in progress
1416 * to fix this up, until that is in place we need to disable preemption
1417 * around sched_clock() in this function and set_io_start_time_ns().
1418 */
set_start_time_ns(struct request * req)1419 static inline void set_start_time_ns(struct request *req)
1420 {
1421 preempt_disable();
1422 req->start_time_ns = sched_clock();
1423 preempt_enable();
1424 }
1425
set_io_start_time_ns(struct request * req)1426 static inline void set_io_start_time_ns(struct request *req)
1427 {
1428 preempt_disable();
1429 req->io_start_time_ns = sched_clock();
1430 preempt_enable();
1431 }
1432
rq_start_time_ns(struct request * req)1433 static inline uint64_t rq_start_time_ns(struct request *req)
1434 {
1435 return req->start_time_ns;
1436 }
1437
rq_io_start_time_ns(struct request * req)1438 static inline uint64_t rq_io_start_time_ns(struct request *req)
1439 {
1440 return req->io_start_time_ns;
1441 }
1442 #else
set_start_time_ns(struct request * req)1443 static inline void set_start_time_ns(struct request *req) {}
set_io_start_time_ns(struct request * req)1444 static inline void set_io_start_time_ns(struct request *req) {}
rq_start_time_ns(struct request * req)1445 static inline uint64_t rq_start_time_ns(struct request *req)
1446 {
1447 return 0;
1448 }
rq_io_start_time_ns(struct request * req)1449 static inline uint64_t rq_io_start_time_ns(struct request *req)
1450 {
1451 return 0;
1452 }
1453 #endif
1454
1455 #define MODULE_ALIAS_BLOCKDEV(major,minor) \
1456 MODULE_ALIAS("block-major-" __stringify(major) "-" __stringify(minor))
1457 #define MODULE_ALIAS_BLOCKDEV_MAJOR(major) \
1458 MODULE_ALIAS("block-major-" __stringify(major) "-*")
1459
1460 #if defined(CONFIG_BLK_DEV_INTEGRITY)
1461
1462 enum blk_integrity_flags {
1463 BLK_INTEGRITY_VERIFY = 1 << 0,
1464 BLK_INTEGRITY_GENERATE = 1 << 1,
1465 BLK_INTEGRITY_DEVICE_CAPABLE = 1 << 2,
1466 BLK_INTEGRITY_IP_CHECKSUM = 1 << 3,
1467 };
1468
1469 struct blk_integrity_iter {
1470 void *prot_buf;
1471 void *data_buf;
1472 sector_t seed;
1473 unsigned int data_size;
1474 unsigned short interval;
1475 const char *disk_name;
1476 };
1477
1478 typedef int (integrity_processing_fn) (struct blk_integrity_iter *);
1479
1480 struct blk_integrity {
1481 integrity_processing_fn *generate_fn;
1482 integrity_processing_fn *verify_fn;
1483
1484 unsigned short flags;
1485 unsigned short tuple_size;
1486 unsigned short interval;
1487 unsigned short tag_size;
1488
1489 const char *name;
1490
1491 struct kobject kobj;
1492 };
1493
1494 extern bool blk_integrity_is_initialized(struct gendisk *);
1495 extern int blk_integrity_register(struct gendisk *, struct blk_integrity *);
1496 extern void blk_integrity_unregister(struct gendisk *);
1497 extern int blk_integrity_compare(struct gendisk *, struct gendisk *);
1498 extern int blk_rq_map_integrity_sg(struct request_queue *, struct bio *,
1499 struct scatterlist *);
1500 extern int blk_rq_count_integrity_sg(struct request_queue *, struct bio *);
1501 extern bool blk_integrity_merge_rq(struct request_queue *, struct request *,
1502 struct request *);
1503 extern bool blk_integrity_merge_bio(struct request_queue *, struct request *,
1504 struct bio *);
1505
1506 static inline
bdev_get_integrity(struct block_device * bdev)1507 struct blk_integrity *bdev_get_integrity(struct block_device *bdev)
1508 {
1509 return bdev->bd_disk->integrity;
1510 }
1511
blk_get_integrity(struct gendisk * disk)1512 static inline struct blk_integrity *blk_get_integrity(struct gendisk *disk)
1513 {
1514 return disk->integrity;
1515 }
1516
blk_integrity_rq(struct request * rq)1517 static inline bool blk_integrity_rq(struct request *rq)
1518 {
1519 return rq->cmd_flags & REQ_INTEGRITY;
1520 }
1521
blk_queue_max_integrity_segments(struct request_queue * q,unsigned int segs)1522 static inline void blk_queue_max_integrity_segments(struct request_queue *q,
1523 unsigned int segs)
1524 {
1525 q->limits.max_integrity_segments = segs;
1526 }
1527
1528 static inline unsigned short
queue_max_integrity_segments(struct request_queue * q)1529 queue_max_integrity_segments(struct request_queue *q)
1530 {
1531 return q->limits.max_integrity_segments;
1532 }
1533
1534 #else /* CONFIG_BLK_DEV_INTEGRITY */
1535
1536 struct bio;
1537 struct block_device;
1538 struct gendisk;
1539 struct blk_integrity;
1540
blk_integrity_rq(struct request * rq)1541 static inline int blk_integrity_rq(struct request *rq)
1542 {
1543 return 0;
1544 }
blk_rq_count_integrity_sg(struct request_queue * q,struct bio * b)1545 static inline int blk_rq_count_integrity_sg(struct request_queue *q,
1546 struct bio *b)
1547 {
1548 return 0;
1549 }
blk_rq_map_integrity_sg(struct request_queue * q,struct bio * b,struct scatterlist * s)1550 static inline int blk_rq_map_integrity_sg(struct request_queue *q,
1551 struct bio *b,
1552 struct scatterlist *s)
1553 {
1554 return 0;
1555 }
bdev_get_integrity(struct block_device * b)1556 static inline struct blk_integrity *bdev_get_integrity(struct block_device *b)
1557 {
1558 return NULL;
1559 }
blk_get_integrity(struct gendisk * disk)1560 static inline struct blk_integrity *blk_get_integrity(struct gendisk *disk)
1561 {
1562 return NULL;
1563 }
blk_integrity_compare(struct gendisk * a,struct gendisk * b)1564 static inline int blk_integrity_compare(struct gendisk *a, struct gendisk *b)
1565 {
1566 return 0;
1567 }
blk_integrity_register(struct gendisk * d,struct blk_integrity * b)1568 static inline int blk_integrity_register(struct gendisk *d,
1569 struct blk_integrity *b)
1570 {
1571 return 0;
1572 }
blk_integrity_unregister(struct gendisk * d)1573 static inline void blk_integrity_unregister(struct gendisk *d)
1574 {
1575 }
blk_queue_max_integrity_segments(struct request_queue * q,unsigned int segs)1576 static inline void blk_queue_max_integrity_segments(struct request_queue *q,
1577 unsigned int segs)
1578 {
1579 }
queue_max_integrity_segments(struct request_queue * q)1580 static inline unsigned short queue_max_integrity_segments(struct request_queue *q)
1581 {
1582 return 0;
1583 }
blk_integrity_merge_rq(struct request_queue * rq,struct request * r1,struct request * r2)1584 static inline bool blk_integrity_merge_rq(struct request_queue *rq,
1585 struct request *r1,
1586 struct request *r2)
1587 {
1588 return true;
1589 }
blk_integrity_merge_bio(struct request_queue * rq,struct request * r,struct bio * b)1590 static inline bool blk_integrity_merge_bio(struct request_queue *rq,
1591 struct request *r,
1592 struct bio *b)
1593 {
1594 return true;
1595 }
blk_integrity_is_initialized(struct gendisk * g)1596 static inline bool blk_integrity_is_initialized(struct gendisk *g)
1597 {
1598 return 0;
1599 }
1600
1601 #endif /* CONFIG_BLK_DEV_INTEGRITY */
1602
1603 struct block_device_operations {
1604 int (*open) (struct block_device *, fmode_t);
1605 void (*release) (struct gendisk *, fmode_t);
1606 int (*rw_page)(struct block_device *, sector_t, struct page *, int rw);
1607 int (*ioctl) (struct block_device *, fmode_t, unsigned, unsigned long);
1608 int (*compat_ioctl) (struct block_device *, fmode_t, unsigned, unsigned long);
1609 int (*direct_access) (struct block_device *, sector_t,
1610 void **, unsigned long *);
1611 unsigned int (*check_events) (struct gendisk *disk,
1612 unsigned int clearing);
1613 /* ->media_changed() is DEPRECATED, use ->check_events() instead */
1614 int (*media_changed) (struct gendisk *);
1615 void (*unlock_native_capacity) (struct gendisk *);
1616 int (*revalidate_disk) (struct gendisk *);
1617 int (*getgeo)(struct block_device *, struct hd_geometry *);
1618 /* this callback is with swap_lock and sometimes page table lock held */
1619 void (*swap_slot_free_notify) (struct block_device *, unsigned long);
1620 struct module *owner;
1621 };
1622
1623 extern int __blkdev_driver_ioctl(struct block_device *, fmode_t, unsigned int,
1624 unsigned long);
1625 extern int bdev_read_page(struct block_device *, sector_t, struct page *);
1626 extern int bdev_write_page(struct block_device *, sector_t, struct page *,
1627 struct writeback_control *);
1628
1629 /*
1630 * X-axis for IO latency histogram support.
1631 */
1632 static const u_int64_t latency_x_axis_us[] = {
1633 100,
1634 200,
1635 300,
1636 400,
1637 500,
1638 600,
1639 700,
1640 800,
1641 900,
1642 1000,
1643 1200,
1644 1400,
1645 1600,
1646 1800,
1647 2000,
1648 2500,
1649 3000,
1650 4000,
1651 5000,
1652 6000,
1653 7000,
1654 9000,
1655 10000
1656 };
1657
1658 #define BLK_IO_LAT_HIST_DISABLE 0
1659 #define BLK_IO_LAT_HIST_ENABLE 1
1660 #define BLK_IO_LAT_HIST_ZERO 2
1661
1662 struct io_latency_state {
1663 u_int64_t latency_y_axis[ARRAY_SIZE(latency_x_axis_us) + 1];
1664 u_int64_t latency_elems;
1665 u_int64_t latency_sum;
1666 };
1667
1668 static inline void
blk_update_latency_hist(struct io_latency_state * s,u_int64_t delta_us)1669 blk_update_latency_hist(struct io_latency_state *s, u_int64_t delta_us)
1670 {
1671 int i;
1672
1673 for (i = 0; i < ARRAY_SIZE(latency_x_axis_us); i++)
1674 if (delta_us < (u_int64_t)latency_x_axis_us[i])
1675 break;
1676 s->latency_y_axis[i]++;
1677 s->latency_elems++;
1678 s->latency_sum += delta_us;
1679 }
1680
1681 ssize_t blk_latency_hist_show(char* name, struct io_latency_state *s,
1682 char *buf, int buf_size);
1683
1684 #else /* CONFIG_BLOCK */
1685
1686 struct block_device;
1687
1688 /*
1689 * stubs for when the block layer is configured out
1690 */
1691 #define buffer_heads_over_limit 0
1692
nr_blockdev_pages(void)1693 static inline long nr_blockdev_pages(void)
1694 {
1695 return 0;
1696 }
1697
1698 struct blk_plug {
1699 };
1700
blk_start_plug(struct blk_plug * plug)1701 static inline void blk_start_plug(struct blk_plug *plug)
1702 {
1703 }
1704
blk_finish_plug(struct blk_plug * plug)1705 static inline void blk_finish_plug(struct blk_plug *plug)
1706 {
1707 }
1708
blk_flush_plug(struct task_struct * task)1709 static inline void blk_flush_plug(struct task_struct *task)
1710 {
1711 }
1712
blk_schedule_flush_plug(struct task_struct * task)1713 static inline void blk_schedule_flush_plug(struct task_struct *task)
1714 {
1715 }
1716
1717
blk_needs_flush_plug(struct task_struct * tsk)1718 static inline bool blk_needs_flush_plug(struct task_struct *tsk)
1719 {
1720 return false;
1721 }
1722
blkdev_issue_flush(struct block_device * bdev,gfp_t gfp_mask,sector_t * error_sector)1723 static inline int blkdev_issue_flush(struct block_device *bdev, gfp_t gfp_mask,
1724 sector_t *error_sector)
1725 {
1726 return 0;
1727 }
1728
1729 #endif /* CONFIG_BLOCK */
1730
1731 #endif
1732