• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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