1
2
3
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
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;
33
34 unsigned int bi_size;
35
36 unsigned int bi_idx;
37
38 unsigned int bi_bvec_done;
39
40};
41
42
43
44
45
46struct bio {
47 struct bio *bi_next;
48 struct block_device *bi_bdev;
49 unsigned long bi_flags;
50 unsigned long bi_rw;
51
52
53
54 struct bvec_iter bi_iter;
55
56
57
58
59 unsigned int bi_phys_segments;
60
61
62
63
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
76
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;
84#endif
85 };
86
87 unsigned short bi_vcnt;
88
89
90
91
92
93 unsigned short bi_max_vecs;
94
95 atomic_t bi_cnt;
96
97 struct bio_vec *bi_io_vec;
98
99 struct bio_set *bi_pool;
100
101
102
103
104
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
113
114#define BIO_UPTODATE 0
115#define BIO_RW_BLOCK 1
116#define BIO_EOF 2
117#define BIO_SEG_VALID 3
118#define BIO_CLONED 4
119#define BIO_BOUNCED 5
120#define BIO_USER_MAPPED 6
121#define BIO_EOPNOTSUPP 7
122#define BIO_NULL_MAPPED 8
123#define BIO_QUIET 9
124#define BIO_SNAP_STABLE 10
125
126
127
128
129
130#define BIO_RESET_BITS 13
131#define BIO_OWNS_VEC 13
132
133#define bio_flagged(bio, flag) ((bio)->bi_flags & (1 << (flag)))
134
135
136
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
145
146
147
148
149
150enum rq_flag_bits {
151
152 __REQ_WRITE,
153 __REQ_FAILFAST_DEV,
154 __REQ_FAILFAST_TRANSPORT,
155 __REQ_FAILFAST_DRIVER,
156
157 __REQ_SYNC,
158 __REQ_META,
159 __REQ_PRIO,
160 __REQ_DISCARD,
161 __REQ_SECURE,
162 __REQ_WRITE_SAME,
163
164 __REQ_NOIDLE,
165 __REQ_INTEGRITY,
166 __REQ_FUA,
167 __REQ_FLUSH,
168
169
170 __REQ_RAHEAD,
171 __REQ_THROTTLED,
172
173
174
175 __REQ_SORTED,
176 __REQ_SOFTBARRIER,
177 __REQ_NOMERGE,
178 __REQ_STARTED,
179 __REQ_DONTPREP,
180 __REQ_QUEUED,
181 __REQ_ELVPRIV,
182 __REQ_FAILED,
183 __REQ_QUIET,
184 __REQ_PREEMPT,
185 __REQ_ALLOCED,
186 __REQ_COPY_USER,
187 __REQ_FLUSH_SEQ,
188 __REQ_IO_STAT,
189 __REQ_MIXED_MERGE,
190 __REQ_PM,
191 __REQ_HASHED,
192 __REQ_MQ_INFLIGHT,
193 __REQ_NR_BITS,
194};
195
196#define REQ_WRITE (1ULL << __REQ_WRITE)
197#define REQ_FAILFAST_DEV (1ULL << __REQ_FAILFAST_DEV)
198#define REQ_FAILFAST_TRANSPORT (1ULL << __REQ_FAILFAST_TRANSPORT)
199#define REQ_FAILFAST_DRIVER (1ULL << __REQ_FAILFAST_DRIVER)
200#define REQ_SYNC (1ULL << __REQ_SYNC)
201#define REQ_META (1ULL << __REQ_META)
202#define REQ_PRIO (1ULL << __REQ_PRIO)
203#define REQ_DISCARD (1ULL << __REQ_DISCARD)
204#define REQ_WRITE_SAME (1ULL << __REQ_WRITE_SAME)
205#define REQ_NOIDLE (1ULL << __REQ_NOIDLE)
206#define REQ_INTEGRITY (1ULL << __REQ_INTEGRITY)
207
208#define REQ_FAILFAST_MASK \
209 (REQ_FAILFAST_DEV | REQ_FAILFAST_TRANSPORT | REQ_FAILFAST_DRIVER)
210#define REQ_COMMON_MASK \
211 (REQ_WRITE | REQ_FAILFAST_MASK | REQ_SYNC | REQ_META | REQ_PRIO | \
212 REQ_DISCARD | REQ_WRITE_SAME | REQ_NOIDLE | REQ_FLUSH | REQ_FUA | \
213 REQ_SECURE | REQ_INTEGRITY)
214#define REQ_CLONE_MASK REQ_COMMON_MASK
215
216#define BIO_NO_ADVANCE_ITER_MASK (REQ_DISCARD|REQ_WRITE_SAME)
217
218
219#define REQ_NOMERGE_FLAGS \
220 (REQ_NOMERGE | REQ_STARTED | REQ_SOFTBARRIER | REQ_FLUSH | REQ_FUA)
221
222#define REQ_RAHEAD (1ULL << __REQ_RAHEAD)
223#define REQ_THROTTLED (1ULL << __REQ_THROTTLED)
224
225#define REQ_SORTED (1ULL << __REQ_SORTED)
226#define REQ_SOFTBARRIER (1ULL << __REQ_SOFTBARRIER)
227#define REQ_FUA (1ULL << __REQ_FUA)
228#define REQ_NOMERGE (1ULL << __REQ_NOMERGE)
229#define REQ_STARTED (1ULL << __REQ_STARTED)
230#define REQ_DONTPREP (1ULL << __REQ_DONTPREP)
231#define REQ_QUEUED (1ULL << __REQ_QUEUED)
232#define REQ_ELVPRIV (1ULL << __REQ_ELVPRIV)
233#define REQ_FAILED (1ULL << __REQ_FAILED)
234#define REQ_QUIET (1ULL << __REQ_QUIET)
235#define REQ_PREEMPT (1ULL << __REQ_PREEMPT)
236#define REQ_ALLOCED (1ULL << __REQ_ALLOCED)
237#define REQ_COPY_USER (1ULL << __REQ_COPY_USER)
238#define REQ_FLUSH (1ULL << __REQ_FLUSH)
239#define REQ_FLUSH_SEQ (1ULL << __REQ_FLUSH_SEQ)
240#define REQ_IO_STAT (1ULL << __REQ_IO_STAT)
241#define REQ_MIXED_MERGE (1ULL << __REQ_MIXED_MERGE)
242#define REQ_SECURE (1ULL << __REQ_SECURE)
243#define REQ_PM (1ULL << __REQ_PM)
244#define REQ_HASHED (1ULL << __REQ_HASHED)
245#define REQ_MQ_INFLIGHT (1ULL << __REQ_MQ_INFLIGHT)
246
247#endif
248