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 atomic_t bi_cnt;
63
64 struct bio_vec *bi_io_vec;
65
66 bio_end_io_t *bi_end_io;
67
68 void *bi_private;
69#if defined(CONFIG_BLK_DEV_INTEGRITY)
70 struct bio_integrity_payload *bi_integrity;
71#endif
72
73 bio_destructor_t *bi_destructor;
74
75
76
77
78
79
80 struct bio_vec bi_inline_vecs[0];
81};
82
83
84
85
86#define BIO_UPTODATE 0
87#define BIO_RW_BLOCK 1
88#define BIO_EOF 2
89#define BIO_SEG_VALID 3
90#define BIO_CLONED 4
91#define BIO_BOUNCED 5
92#define BIO_USER_MAPPED 6
93#define BIO_EOPNOTSUPP 7
94#define BIO_NULL_MAPPED 8
95#define BIO_FS_INTEGRITY 9
96#define BIO_QUIET 10
97#define BIO_MAPPED_INTEGRITY 11
98#define bio_flagged(bio, flag) ((bio)->bi_flags & (1 << (flag)))
99
100
101
102
103#define BIO_POOL_BITS (4)
104#define BIO_POOL_NONE ((1UL << BIO_POOL_BITS) - 1)
105#define BIO_POOL_OFFSET (BITS_PER_LONG - BIO_POOL_BITS)
106#define BIO_POOL_MASK (1UL << BIO_POOL_OFFSET)
107#define BIO_POOL_IDX(bio) ((bio)->bi_flags >> BIO_POOL_OFFSET)
108
109#endif
110
111
112
113
114
115enum rq_flag_bits {
116
117 __REQ_WRITE,
118 __REQ_FAILFAST_DEV,
119 __REQ_FAILFAST_TRANSPORT,
120 __REQ_FAILFAST_DRIVER,
121
122 __REQ_SYNC,
123 __REQ_META,
124 __REQ_PRIO,
125 __REQ_DISCARD,
126 __REQ_SECURE,
127
128 __REQ_NOIDLE,
129 __REQ_FUA,
130 __REQ_FLUSH,
131
132
133 __REQ_RAHEAD,
134 __REQ_THROTTLED,
135
136
137
138 __REQ_SORTED,
139 __REQ_SOFTBARRIER,
140 __REQ_NOMERGE,
141 __REQ_STARTED,
142 __REQ_DONTPREP,
143 __REQ_QUEUED,
144 __REQ_ELVPRIV,
145 __REQ_FAILED,
146 __REQ_QUIET,
147 __REQ_PREEMPT,
148 __REQ_ALLOCED,
149 __REQ_COPY_USER,
150 __REQ_FLUSH_SEQ,
151 __REQ_IO_STAT,
152 __REQ_MIXED_MERGE,
153 __REQ_NR_BITS,
154};
155
156#define REQ_WRITE (1 << __REQ_WRITE)
157#define REQ_FAILFAST_DEV (1 << __REQ_FAILFAST_DEV)
158#define REQ_FAILFAST_TRANSPORT (1 << __REQ_FAILFAST_TRANSPORT)
159#define REQ_FAILFAST_DRIVER (1 << __REQ_FAILFAST_DRIVER)
160#define REQ_SYNC (1 << __REQ_SYNC)
161#define REQ_META (1 << __REQ_META)
162#define REQ_PRIO (1 << __REQ_PRIO)
163#define REQ_DISCARD (1 << __REQ_DISCARD)
164#define REQ_NOIDLE (1 << __REQ_NOIDLE)
165
166#define REQ_FAILFAST_MASK \
167 (REQ_FAILFAST_DEV | REQ_FAILFAST_TRANSPORT | REQ_FAILFAST_DRIVER)
168#define REQ_COMMON_MASK \
169 (REQ_WRITE | REQ_FAILFAST_MASK | REQ_SYNC | REQ_META | REQ_PRIO | \
170 REQ_DISCARD | REQ_NOIDLE | REQ_FLUSH | REQ_FUA | REQ_SECURE)
171#define REQ_CLONE_MASK REQ_COMMON_MASK
172
173#define REQ_RAHEAD (1 << __REQ_RAHEAD)
174#define REQ_THROTTLED (1 << __REQ_THROTTLED)
175
176#define REQ_SORTED (1 << __REQ_SORTED)
177#define REQ_SOFTBARRIER (1 << __REQ_SOFTBARRIER)
178#define REQ_FUA (1 << __REQ_FUA)
179#define REQ_NOMERGE (1 << __REQ_NOMERGE)
180#define REQ_STARTED (1 << __REQ_STARTED)
181#define REQ_DONTPREP (1 << __REQ_DONTPREP)
182#define REQ_QUEUED (1 << __REQ_QUEUED)
183#define REQ_ELVPRIV (1 << __REQ_ELVPRIV)
184#define REQ_FAILED (1 << __REQ_FAILED)
185#define REQ_QUIET (1 << __REQ_QUIET)
186#define REQ_PREEMPT (1 << __REQ_PREEMPT)
187#define REQ_ALLOCED (1 << __REQ_ALLOCED)
188#define REQ_COPY_USER (1 << __REQ_COPY_USER)
189#define REQ_FLUSH (1 << __REQ_FLUSH)
190#define REQ_FLUSH_SEQ (1 << __REQ_FLUSH_SEQ)
191#define REQ_IO_STAT (1 << __REQ_IO_STAT)
192#define REQ_MIXED_MERGE (1 << __REQ_MIXED_MERGE)
193#define REQ_SECURE (1 << __REQ_SECURE)
194
195#endif
196