1
2
3
4
5#ifndef __LINUX_BLK_TYPES_H
6#define __LINUX_BLK_TYPES_H
7
8#ifdef CONFIG_BLOCK
9
10#include <linux/types.h>
11
12struct bio_set;
13struct bio;
14struct bio_integrity_payload;
15struct page;
16struct block_device;
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
30
31
32
33struct bio {
34 sector_t bi_sector;
35
36 struct bio *bi_next;
37 struct block_device *bi_bdev;
38 unsigned long bi_flags;
39 unsigned long bi_rw;
40
41
42
43 unsigned short bi_vcnt;
44 unsigned short bi_idx;
45
46
47
48
49 unsigned int bi_phys_segments;
50
51 unsigned int bi_size;
52
53
54
55
56
57 unsigned int bi_seg_front_size;
58 unsigned int bi_seg_back_size;
59
60 unsigned int bi_max_vecs;
61
62 unsigned int bi_comp_cpu;
63
64 atomic_t bi_cnt;
65
66 struct bio_vec *bi_io_vec;
67
68 bio_end_io_t *bi_end_io;
69
70 void *bi_private;
71#if defined(CONFIG_BLK_DEV_INTEGRITY)
72 struct bio_integrity_payload *bi_integrity;
73#endif
74
75 bio_destructor_t *bi_destructor;
76
77
78
79
80
81
82 struct bio_vec bi_inline_vecs[0];
83};
84
85
86
87
88#define BIO_UPTODATE 0
89#define BIO_RW_BLOCK 1
90#define BIO_EOF 2
91#define BIO_SEG_VALID 3
92#define BIO_CLONED 4
93#define BIO_BOUNCED 5
94#define BIO_USER_MAPPED 6
95#define BIO_EOPNOTSUPP 7
96#define BIO_CPU_AFFINE 8
97#define BIO_NULL_MAPPED 9
98#define BIO_FS_INTEGRITY 10
99#define BIO_QUIET 11
100#define BIO_MAPPED_INTEGRITY 12
101#define bio_flagged(bio, flag) ((bio)->bi_flags & (1 << (flag)))
102
103
104
105
106#define BIO_POOL_BITS (4)
107#define BIO_POOL_NONE ((1UL << BIO_POOL_BITS) - 1)
108#define BIO_POOL_OFFSET (BITS_PER_LONG - BIO_POOL_BITS)
109#define BIO_POOL_MASK (1UL << BIO_POOL_OFFSET)
110#define BIO_POOL_IDX(bio) ((bio)->bi_flags >> BIO_POOL_OFFSET)
111
112#endif
113
114
115
116
117
118enum rq_flag_bits {
119
120 __REQ_WRITE,
121 __REQ_FAILFAST_DEV,
122 __REQ_FAILFAST_TRANSPORT,
123 __REQ_FAILFAST_DRIVER,
124
125 __REQ_SYNC,
126 __REQ_META,
127 __REQ_PRIO,
128 __REQ_DISCARD,
129 __REQ_SECURE,
130
131 __REQ_NOIDLE,
132 __REQ_FUA,
133 __REQ_FLUSH,
134
135
136 __REQ_RAHEAD,
137 __REQ_THROTTLED,
138
139
140
141 __REQ_SORTED,
142 __REQ_SOFTBARRIER,
143 __REQ_NOMERGE,
144 __REQ_STARTED,
145 __REQ_DONTPREP,
146 __REQ_QUEUED,
147 __REQ_ELVPRIV,
148 __REQ_FAILED,
149 __REQ_QUIET,
150 __REQ_PREEMPT,
151 __REQ_ALLOCED,
152 __REQ_COPY_USER,
153 __REQ_FLUSH_SEQ,
154 __REQ_IO_STAT,
155 __REQ_MIXED_MERGE,
156 __REQ_NR_BITS,
157};
158
159#define REQ_WRITE (1 << __REQ_WRITE)
160#define REQ_FAILFAST_DEV (1 << __REQ_FAILFAST_DEV)
161#define REQ_FAILFAST_TRANSPORT (1 << __REQ_FAILFAST_TRANSPORT)
162#define REQ_FAILFAST_DRIVER (1 << __REQ_FAILFAST_DRIVER)
163#define REQ_SYNC (1 << __REQ_SYNC)
164#define REQ_META (1 << __REQ_META)
165#define REQ_PRIO (1 << __REQ_PRIO)
166#define REQ_DISCARD (1 << __REQ_DISCARD)
167#define REQ_NOIDLE (1 << __REQ_NOIDLE)
168
169#define REQ_FAILFAST_MASK \
170 (REQ_FAILFAST_DEV | REQ_FAILFAST_TRANSPORT | REQ_FAILFAST_DRIVER)
171#define REQ_COMMON_MASK \
172 (REQ_WRITE | REQ_FAILFAST_MASK | REQ_SYNC | REQ_META | REQ_PRIO | \
173 REQ_DISCARD | REQ_NOIDLE | REQ_FLUSH | REQ_FUA | REQ_SECURE)
174#define REQ_CLONE_MASK REQ_COMMON_MASK
175
176#define REQ_RAHEAD (1 << __REQ_RAHEAD)
177#define REQ_THROTTLED (1 << __REQ_THROTTLED)
178
179#define REQ_SORTED (1 << __REQ_SORTED)
180#define REQ_SOFTBARRIER (1 << __REQ_SOFTBARRIER)
181#define REQ_FUA (1 << __REQ_FUA)
182#define REQ_NOMERGE (1 << __REQ_NOMERGE)
183#define REQ_STARTED (1 << __REQ_STARTED)
184#define REQ_DONTPREP (1 << __REQ_DONTPREP)
185#define REQ_QUEUED (1 << __REQ_QUEUED)
186#define REQ_ELVPRIV (1 << __REQ_ELVPRIV)
187#define REQ_FAILED (1 << __REQ_FAILED)
188#define REQ_QUIET (1 << __REQ_QUIET)
189#define REQ_PREEMPT (1 << __REQ_PREEMPT)
190#define REQ_ALLOCED (1 << __REQ_ALLOCED)
191#define REQ_COPY_USER (1 << __REQ_COPY_USER)
192#define REQ_FLUSH (1 << __REQ_FLUSH)
193#define REQ_FLUSH_SEQ (1 << __REQ_FLUSH_SEQ)
194#define REQ_IO_STAT (1 << __REQ_IO_STAT)
195#define REQ_MIXED_MERGE (1 << __REQ_MIXED_MERGE)
196#define REQ_SECURE (1 << __REQ_SECURE)
197
198#endif
199