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_SEG_VALID 1
116#define BIO_CLONED 2
117#define BIO_BOUNCED 3
118#define BIO_USER_MAPPED 4
119#define BIO_NULL_MAPPED 5
120#define BIO_QUIET 6
121#define BIO_SNAP_STABLE 7
122#define BIO_CHAIN 8
123#define BIO_REFFED 9
124
125
126
127
128
129#define BIO_RESET_BITS 13
130#define BIO_OWNS_VEC 13
131
132#define bio_flagged(bio, flag) ((bio)->bi_flags & (1 << (flag)))
133
134
135
136
137#define BIO_POOL_BITS (4)
138#define BIO_POOL_NONE ((1UL << BIO_POOL_BITS) - 1)
139#define BIO_POOL_OFFSET (BITS_PER_LONG - BIO_POOL_BITS)
140#define BIO_POOL_MASK (1UL << BIO_POOL_OFFSET)
141#define BIO_POOL_IDX(bio) ((bio)->bi_flags >> BIO_POOL_OFFSET)
142
143#endif
144
145
146
147
148
149enum rq_flag_bits {
150
151 __REQ_WRITE,
152 __REQ_FAILFAST_DEV,
153 __REQ_FAILFAST_TRANSPORT,
154 __REQ_FAILFAST_DRIVER,
155
156 __REQ_SYNC,
157 __REQ_META,
158 __REQ_PRIO,
159 __REQ_DISCARD,
160 __REQ_SECURE,
161 __REQ_WRITE_SAME,
162
163 __REQ_NOIDLE,
164 __REQ_INTEGRITY,
165 __REQ_FUA,
166 __REQ_FLUSH,
167
168
169 __REQ_RAHEAD,
170 __REQ_THROTTLED,
171
172
173
174 __REQ_SORTED,
175 __REQ_SOFTBARRIER,
176 __REQ_NOMERGE,
177 __REQ_STARTED,
178 __REQ_DONTPREP,
179 __REQ_QUEUED,
180 __REQ_ELVPRIV,
181 __REQ_FAILED,
182 __REQ_QUIET,
183 __REQ_PREEMPT,
184
185
186 __REQ_ALLOCED,
187 __REQ_COPY_USER,
188 __REQ_FLUSH_SEQ,
189 __REQ_IO_STAT,
190 __REQ_MIXED_MERGE,
191 __REQ_PM,
192 __REQ_HASHED,
193 __REQ_MQ_INFLIGHT,
194 __REQ_NO_TIMEOUT,
195 __REQ_NR_BITS,
196};
197
198#define REQ_WRITE (1ULL << __REQ_WRITE)
199#define REQ_FAILFAST_DEV (1ULL << __REQ_FAILFAST_DEV)
200#define REQ_FAILFAST_TRANSPORT (1ULL << __REQ_FAILFAST_TRANSPORT)
201#define REQ_FAILFAST_DRIVER (1ULL << __REQ_FAILFAST_DRIVER)
202#define REQ_SYNC (1ULL << __REQ_SYNC)
203#define REQ_META (1ULL << __REQ_META)
204#define REQ_PRIO (1ULL << __REQ_PRIO)
205#define REQ_DISCARD (1ULL << __REQ_DISCARD)
206#define REQ_WRITE_SAME (1ULL << __REQ_WRITE_SAME)
207#define REQ_NOIDLE (1ULL << __REQ_NOIDLE)
208#define REQ_INTEGRITY (1ULL << __REQ_INTEGRITY)
209
210#define REQ_FAILFAST_MASK \
211 (REQ_FAILFAST_DEV | REQ_FAILFAST_TRANSPORT | REQ_FAILFAST_DRIVER)
212#define REQ_COMMON_MASK \
213 (REQ_WRITE | REQ_FAILFAST_MASK | REQ_SYNC | REQ_META | REQ_PRIO | \
214 REQ_DISCARD | REQ_WRITE_SAME | REQ_NOIDLE | REQ_FLUSH | REQ_FUA | \
215 REQ_SECURE | REQ_INTEGRITY)
216#define REQ_CLONE_MASK REQ_COMMON_MASK
217
218#define BIO_NO_ADVANCE_ITER_MASK (REQ_DISCARD|REQ_WRITE_SAME)
219
220
221#define REQ_NOMERGE_FLAGS \
222 (REQ_NOMERGE | REQ_STARTED | REQ_SOFTBARRIER | REQ_FLUSH | REQ_FUA | REQ_FLUSH_SEQ)
223
224#define REQ_RAHEAD (1ULL << __REQ_RAHEAD)
225#define REQ_THROTTLED (1ULL << __REQ_THROTTLED)
226
227#define REQ_SORTED (1ULL << __REQ_SORTED)
228#define REQ_SOFTBARRIER (1ULL << __REQ_SOFTBARRIER)
229#define REQ_FUA (1ULL << __REQ_FUA)
230#define REQ_NOMERGE (1ULL << __REQ_NOMERGE)
231#define REQ_STARTED (1ULL << __REQ_STARTED)
232#define REQ_DONTPREP (1ULL << __REQ_DONTPREP)
233#define REQ_QUEUED (1ULL << __REQ_QUEUED)
234#define REQ_ELVPRIV (1ULL << __REQ_ELVPRIV)
235#define REQ_FAILED (1ULL << __REQ_FAILED)
236#define REQ_QUIET (1ULL << __REQ_QUIET)
237#define REQ_PREEMPT (1ULL << __REQ_PREEMPT)
238#define REQ_ALLOCED (1ULL << __REQ_ALLOCED)
239#define REQ_COPY_USER (1ULL << __REQ_COPY_USER)
240#define REQ_FLUSH (1ULL << __REQ_FLUSH)
241#define REQ_FLUSH_SEQ (1ULL << __REQ_FLUSH_SEQ)
242#define REQ_IO_STAT (1ULL << __REQ_IO_STAT)
243#define REQ_MIXED_MERGE (1ULL << __REQ_MIXED_MERGE)
244#define REQ_SECURE (1ULL << __REQ_SECURE)
245#define REQ_PM (1ULL << __REQ_PM)
246#define REQ_HASHED (1ULL << __REQ_HASHED)
247#define REQ_MQ_INFLIGHT (1ULL << __REQ_MQ_INFLIGHT)
248#define REQ_NO_TIMEOUT (1ULL << __REQ_NO_TIMEOUT)
249
250#endif
251