1/*
2 * Block data types and constants.  Directly include this file only to
3 * break include dependency loop.
4 */
5#ifndef __LINUX_BLK_TYPES_H
6#define __LINUX_BLK_TYPES_H
7
8#include <linux/types.h>
9
10struct bio_set;
11struct bio;
12struct bio_integrity_payload;
13struct page;
14struct block_device;
15struct io_context;
16struct cgroup_subsys_state;
17typedef void (bio_end_io_t) (struct bio *, int);
18typedef void (bio_destructor_t) (struct bio *);
19
20/*
21 * was unsigned short, but we might as well be ready for > 64kB I/O pages
22 */
23struct bio_vec {
24	struct page	*bv_page;
25	unsigned int	bv_len;
26	unsigned int	bv_offset;
27};
28
29#ifdef CONFIG_BLOCK
30
31struct bvec_iter {
32	sector_t		bi_sector;	/* device address in 512 byte
33						   sectors */
34	unsigned int		bi_size;	/* residual I/O count */
35
36	unsigned int		bi_idx;		/* current index into bvl_vec */
37
38	unsigned int            bi_bvec_done;	/* number of bytes completed in
39						   current bvec */
40};
41
42/*
43 * main unit of I/O for the block layer and lower layers (ie drivers and
44 * stacking drivers)
45 */
46struct bio {
47	struct bio		*bi_next;	/* request queue link */
48	struct block_device	*bi_bdev;
49	unsigned long		bi_flags;	/* status, command, etc */
50	unsigned long		bi_rw;		/* bottom bits READ/WRITE,
51						 * top bits priority
52						 */
53
54	struct bvec_iter	bi_iter;
55
56	/* Number of segments in this BIO after
57	 * physical address coalescing is performed.
58	 */
59	unsigned int		bi_phys_segments;
60
61	/*
62	 * To keep track of the max segment size, we account for the
63	 * sizes of the first and last mergeable segments in this bio.
64	 */
65	unsigned int		bi_seg_front_size;
66	unsigned int		bi_seg_back_size;
67
68	atomic_t		bi_remaining;
69
70	bio_end_io_t		*bi_end_io;
71
72	void			*bi_private;
73#ifdef CONFIG_BLK_CGROUP
74	/*
75	 * Optional ioc and css associated with this bio.  Put on bio
76	 * release.  Read comment on top of bio_associate_current().
77	 */
78	struct io_context	*bi_ioc;
79	struct cgroup_subsys_state *bi_css;
80#endif
81	union {
82#if defined(CONFIG_BLK_DEV_INTEGRITY)
83		struct bio_integrity_payload *bi_integrity; /* data integrity */
84#endif
85	};
86
87	unsigned short		bi_vcnt;	/* how many bio_vec's */
88
89	/*
90	 * Everything starting with bi_max_vecs will be preserved by bio_reset()
91	 */
92
93	unsigned short		bi_max_vecs;	/* max bvl_vecs we can hold */
94
95	atomic_t		bi_cnt;		/* pin count */
96
97	struct bio_vec		*bi_io_vec;	/* the actual vec list */
98
99	struct bio_set		*bi_pool;
100
101	/*
102	 * We can inline a number of vecs at the end of the bio, to avoid
103	 * double allocations for a small number of bio_vecs. This member
104	 * MUST obviously be kept at the very end of the bio.
105	 */
106	struct bio_vec		bi_inline_vecs[0];
107};
108
109#define BIO_RESET_BYTES		offsetof(struct bio, bi_max_vecs)
110
111/*
112 * bio flags
113 */
114#define BIO_UPTODATE	0	/* ok after I/O completion */
115#define BIO_RW_BLOCK	1	/* RW_AHEAD set, and read/write would block */
116#define BIO_EOF		2	/* out-out-bounds error */
117#define BIO_SEG_VALID	3	/* bi_phys_segments valid */
118#define BIO_CLONED	4	/* doesn't own data */
119#define BIO_BOUNCED	5	/* bio is a bounce bio */
120#define BIO_USER_MAPPED 6	/* contains user pages */
121#define BIO_EOPNOTSUPP	7	/* not supported */
122#define BIO_NULL_MAPPED 8	/* contains invalid user pages */
123#define BIO_QUIET	9	/* Make BIO Quiet */
124#define BIO_SNAP_STABLE	10	/* bio data must be snapshotted during write */
125
126/*
127 * Flags starting here get preserved by bio_reset() - this includes
128 * BIO_POOL_IDX()
129 */
130#define BIO_RESET_BITS	13
131#define BIO_OWNS_VEC	13	/* bio_free() should free bvec */
132
133#define bio_flagged(bio, flag)	((bio)->bi_flags & (1 << (flag)))
134
135/*
136 * top 4 bits of bio flags indicate the pool this bio came from
137 */
138#define BIO_POOL_BITS		(4)
139#define BIO_POOL_NONE		((1UL << BIO_POOL_BITS) - 1)
140#define BIO_POOL_OFFSET		(BITS_PER_LONG - BIO_POOL_BITS)
141#define BIO_POOL_MASK		(1UL << BIO_POOL_OFFSET)
142#define BIO_POOL_IDX(bio)	((bio)->bi_flags >> BIO_POOL_OFFSET)
143
144#endif /* CONFIG_BLOCK */
145
146/*
147 * Request flags.  For use in the cmd_flags field of struct request, and in
148 * bi_rw of struct bio.  Note that some flags are only valid in either one.
149 */
150enum rq_flag_bits {
151	/* common flags */
152	__REQ_WRITE,		/* not set, read. set, write */
153	__REQ_FAILFAST_DEV,	/* no driver retries of device errors */
154	__REQ_FAILFAST_TRANSPORT, /* no driver retries of transport errors */
155	__REQ_FAILFAST_DRIVER,	/* no driver retries of driver errors */
156
157	__REQ_SYNC,		/* request is sync (sync write or read) */
158	__REQ_META,		/* metadata io request */
159	__REQ_PRIO,		/* boost priority in cfq */
160	__REQ_DISCARD,		/* request to discard sectors */
161	__REQ_SECURE,		/* secure discard (used with __REQ_DISCARD) */
162	__REQ_WRITE_SAME,	/* write same block many times */
163
164	__REQ_NOIDLE,		/* don't anticipate more IO after this one */
165	__REQ_INTEGRITY,	/* I/O includes block integrity payload */
166	__REQ_FUA,		/* forced unit access */
167	__REQ_FLUSH,		/* request for cache flush */
168
169	/* bio only flags */
170	__REQ_RAHEAD,		/* read ahead, can fail anytime */
171	__REQ_THROTTLED,	/* This bio has already been subjected to
172				 * throttling rules. Don't do it again. */
173
174	/* request only flags */
175	__REQ_SORTED,		/* elevator knows about this request */
176	__REQ_SOFTBARRIER,	/* may not be passed by ioscheduler */
177	__REQ_NOMERGE,		/* don't touch this for merging */
178	__REQ_STARTED,		/* drive already may have started this one */
179	__REQ_DONTPREP,		/* don't call prep for this one */
180	__REQ_QUEUED,		/* uses queueing */
181	__REQ_ELVPRIV,		/* elevator private data attached */
182	__REQ_FAILED,		/* set if the request failed */
183	__REQ_QUIET,		/* don't worry about errors */
184	__REQ_PREEMPT,		/* set for "ide_preempt" requests and also
185				   for requests for which the SCSI "quiesce"
186				   state must be ignored. */
187	__REQ_ALLOCED,		/* request came from our alloc pool */
188	__REQ_COPY_USER,	/* contains copies of user pages */
189	__REQ_FLUSH_SEQ,	/* request for flush sequence */
190	__REQ_IO_STAT,		/* account I/O stat */
191	__REQ_MIXED_MERGE,	/* merge of different types, fail separately */
192	__REQ_PM,		/* runtime pm request */
193	__REQ_HASHED,		/* on IO scheduler merge hash */
194	__REQ_MQ_INFLIGHT,	/* track inflight for MQ */
195	__REQ_NO_TIMEOUT,	/* requests may never expire */
196	__REQ_NR_BITS,		/* stops here */
197};
198
199#define REQ_WRITE		(1ULL << __REQ_WRITE)
200#define REQ_FAILFAST_DEV	(1ULL << __REQ_FAILFAST_DEV)
201#define REQ_FAILFAST_TRANSPORT	(1ULL << __REQ_FAILFAST_TRANSPORT)
202#define REQ_FAILFAST_DRIVER	(1ULL << __REQ_FAILFAST_DRIVER)
203#define REQ_SYNC		(1ULL << __REQ_SYNC)
204#define REQ_META		(1ULL << __REQ_META)
205#define REQ_PRIO		(1ULL << __REQ_PRIO)
206#define REQ_DISCARD		(1ULL << __REQ_DISCARD)
207#define REQ_WRITE_SAME		(1ULL << __REQ_WRITE_SAME)
208#define REQ_NOIDLE		(1ULL << __REQ_NOIDLE)
209#define REQ_INTEGRITY		(1ULL << __REQ_INTEGRITY)
210
211#define REQ_FAILFAST_MASK \
212	(REQ_FAILFAST_DEV | REQ_FAILFAST_TRANSPORT | REQ_FAILFAST_DRIVER)
213#define REQ_COMMON_MASK \
214	(REQ_WRITE | REQ_FAILFAST_MASK | REQ_SYNC | REQ_META | REQ_PRIO | \
215	 REQ_DISCARD | REQ_WRITE_SAME | REQ_NOIDLE | REQ_FLUSH | REQ_FUA | \
216	 REQ_SECURE | REQ_INTEGRITY)
217#define REQ_CLONE_MASK		REQ_COMMON_MASK
218
219#define BIO_NO_ADVANCE_ITER_MASK	(REQ_DISCARD|REQ_WRITE_SAME)
220
221/* This mask is used for both bio and request merge checking */
222#define REQ_NOMERGE_FLAGS \
223	(REQ_NOMERGE | REQ_STARTED | REQ_SOFTBARRIER | REQ_FLUSH | REQ_FUA | REQ_FLUSH_SEQ)
224
225#define REQ_RAHEAD		(1ULL << __REQ_RAHEAD)
226#define REQ_THROTTLED		(1ULL << __REQ_THROTTLED)
227
228#define REQ_SORTED		(1ULL << __REQ_SORTED)
229#define REQ_SOFTBARRIER		(1ULL << __REQ_SOFTBARRIER)
230#define REQ_FUA			(1ULL << __REQ_FUA)
231#define REQ_NOMERGE		(1ULL << __REQ_NOMERGE)
232#define REQ_STARTED		(1ULL << __REQ_STARTED)
233#define REQ_DONTPREP		(1ULL << __REQ_DONTPREP)
234#define REQ_QUEUED		(1ULL << __REQ_QUEUED)
235#define REQ_ELVPRIV		(1ULL << __REQ_ELVPRIV)
236#define REQ_FAILED		(1ULL << __REQ_FAILED)
237#define REQ_QUIET		(1ULL << __REQ_QUIET)
238#define REQ_PREEMPT		(1ULL << __REQ_PREEMPT)
239#define REQ_ALLOCED		(1ULL << __REQ_ALLOCED)
240#define REQ_COPY_USER		(1ULL << __REQ_COPY_USER)
241#define REQ_FLUSH		(1ULL << __REQ_FLUSH)
242#define REQ_FLUSH_SEQ		(1ULL << __REQ_FLUSH_SEQ)
243#define REQ_IO_STAT		(1ULL << __REQ_IO_STAT)
244#define REQ_MIXED_MERGE		(1ULL << __REQ_MIXED_MERGE)
245#define REQ_SECURE		(1ULL << __REQ_SECURE)
246#define REQ_PM			(1ULL << __REQ_PM)
247#define REQ_HASHED		(1ULL << __REQ_HASHED)
248#define REQ_MQ_INFLIGHT		(1ULL << __REQ_MQ_INFLIGHT)
249#define REQ_NO_TIMEOUT		(1ULL << __REQ_NO_TIMEOUT)
250
251#endif /* __LINUX_BLK_TYPES_H */
252