blk_types.h
001:
002:
003:
004:
005: #ifndef __LINUX_BLK_TYPES_H
006: #define __LINUX_BLK_TYPES_H
007:
008: #ifdef CONFIG_BLOCK
009:
010: #include <linux/types.h>
011:
012: struct bio_set;
013: struct bio;
014: struct bio_integrity_payload;
015: struct page;
016: struct block_device;
017: typedef void (bio_end_io_t) (struct bio *, int);
018: typedef void (bio_destructor_t) (struct bio *);
019:
020:
021:
022:
023: struct bio_vec {
024: struct page *bv_page;
025: unsigned int bv_len;
026: unsigned int bv_offset;
027: };
028:
029:
030:
031:
032:
033: struct bio {
034: sector_t bi_sector;
035:
036: struct bio *bi_next;
037: struct block_device *bi_bdev;
038: unsigned long bi_flags;
039: unsigned long bi_rw;
040:
041:
042:
043: unsigned short bi_vcnt;
044: unsigned short bi_idx;
045:
046:
047:
048:
049: unsigned int bi_phys_segments;
050:
051: unsigned int bi_size;
052:
053:
054:
055:
056:
057: unsigned int bi_seg_front_size;
058: unsigned int bi_seg_back_size;
059:
060: unsigned int bi_max_vecs;
061:
062: atomic_t bi_cnt;
063:
064: struct bio_vec *bi_io_vec;
065:
066: bio_end_io_t *bi_end_io;
067:
068: void *bi_private;
069: #if defined(CONFIG_BLK_DEV_INTEGRITY)
070: struct bio_integrity_payload *bi_integrity;
071: #endif
072:
073: bio_destructor_t *bi_destructor;
074:
075:
076:
077:
078:
079:
080: struct bio_vec bi_inline_vecs[0];
081: };
082:
083:
084:
085:
086: #define BIO_UPTODATE 0
087: #define BIO_RW_BLOCK 1
088: #define BIO_EOF 2
089: #define BIO_SEG_VALID 3
090: #define BIO_CLONED 4
091: #define BIO_BOUNCED 5
092: #define BIO_USER_MAPPED 6
093: #define BIO_EOPNOTSUPP 7
094: #define BIO_NULL_MAPPED 8
095: #define BIO_FS_INTEGRITY 9
096: #define BIO_QUIET 10
097: #define BIO_MAPPED_INTEGRITY 11
098: #define bio_flagged(bio, flag) ((bio)->bi_flags & (1 << (flag)))
099:
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:
115: enum 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:
© Andrew Scott 2006 -
2025,
All Rights Reserved