blk_types.h 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. /*
  3. * Block data types and constants. Directly include this file only to
  4. * break include dependency loop.
  5. */
  6. #ifndef __LINUX_BLK_TYPES_H
  7. #define __LINUX_BLK_TYPES_H
  8. #include <linux/types.h>
  9. #include <linux/bvec.h>
  10. #include <linux/ktime.h>
  11. struct bio_set;
  12. struct bio;
  13. struct bio_integrity_payload;
  14. struct page;
  15. struct block_device;
  16. struct io_context;
  17. struct cgroup_subsys_state;
  18. typedef void (bio_end_io_t) (struct bio *);
  19. /*
  20. * Block error status values. See block/blk-core:blk_errors for the details.
  21. * Alpha cannot write a byte atomically, so we need to use 32-bit value.
  22. */
  23. #if defined(CONFIG_ALPHA) && !defined(__alpha_bwx__)
  24. typedef u32 __bitwise blk_status_t;
  25. #else
  26. typedef u8 __bitwise blk_status_t;
  27. #endif
  28. #define BLK_STS_OK 0
  29. #define BLK_STS_NOTSUPP ((__force blk_status_t)1)
  30. #define BLK_STS_TIMEOUT ((__force blk_status_t)2)
  31. #define BLK_STS_NOSPC ((__force blk_status_t)3)
  32. #define BLK_STS_TRANSPORT ((__force blk_status_t)4)
  33. #define BLK_STS_TARGET ((__force blk_status_t)5)
  34. #define BLK_STS_NEXUS ((__force blk_status_t)6)
  35. #define BLK_STS_MEDIUM ((__force blk_status_t)7)
  36. #define BLK_STS_PROTECTION ((__force blk_status_t)8)
  37. #define BLK_STS_RESOURCE ((__force blk_status_t)9)
  38. #define BLK_STS_IOERR ((__force blk_status_t)10)
  39. /* hack for device mapper, don't use elsewhere: */
  40. #define BLK_STS_DM_REQUEUE ((__force blk_status_t)11)
  41. #define BLK_STS_AGAIN ((__force blk_status_t)12)
  42. /*
  43. * BLK_STS_DEV_RESOURCE is returned from the driver to the block layer if
  44. * device related resources are unavailable, but the driver can guarantee
  45. * that the queue will be rerun in the future once resources become
  46. * available again. This is typically the case for device specific
  47. * resources that are consumed for IO. If the driver fails allocating these
  48. * resources, we know that inflight (or pending) IO will free these
  49. * resource upon completion.
  50. *
  51. * This is different from BLK_STS_RESOURCE in that it explicitly references
  52. * a device specific resource. For resources of wider scope, allocation
  53. * failure can happen without having pending IO. This means that we can't
  54. * rely on request completions freeing these resources, as IO may not be in
  55. * flight. Examples of that are kernel memory allocations, DMA mappings, or
  56. * any other system wide resources.
  57. */
  58. #define BLK_STS_DEV_RESOURCE ((__force blk_status_t)13)
  59. /**
  60. * blk_path_error - returns true if error may be path related
  61. * @error: status the request was completed with
  62. *
  63. * Description:
  64. * This classifies block error status into non-retryable errors and ones
  65. * that may be successful if retried on a failover path.
  66. *
  67. * Return:
  68. * %false - retrying failover path will not help
  69. * %true - may succeed if retried
  70. */
  71. static inline bool blk_path_error(blk_status_t error)
  72. {
  73. switch (error) {
  74. case BLK_STS_NOTSUPP:
  75. case BLK_STS_NOSPC:
  76. case BLK_STS_TARGET:
  77. case BLK_STS_NEXUS:
  78. case BLK_STS_MEDIUM:
  79. case BLK_STS_PROTECTION:
  80. return false;
  81. }
  82. /* Anything else could be a path failure, so should be retried */
  83. return true;
  84. }
  85. /*
  86. * From most significant bit:
  87. * 1 bit: reserved for other usage, see below
  88. * 12 bits: original size of bio
  89. * 51 bits: issue time of bio
  90. */
  91. #define BIO_ISSUE_RES_BITS 1
  92. #define BIO_ISSUE_SIZE_BITS 12
  93. #define BIO_ISSUE_RES_SHIFT (64 - BIO_ISSUE_RES_BITS)
  94. #define BIO_ISSUE_SIZE_SHIFT (BIO_ISSUE_RES_SHIFT - BIO_ISSUE_SIZE_BITS)
  95. #define BIO_ISSUE_TIME_MASK ((1ULL << BIO_ISSUE_SIZE_SHIFT) - 1)
  96. #define BIO_ISSUE_SIZE_MASK \
  97. (((1ULL << BIO_ISSUE_SIZE_BITS) - 1) << BIO_ISSUE_SIZE_SHIFT)
  98. #define BIO_ISSUE_RES_MASK (~((1ULL << BIO_ISSUE_RES_SHIFT) - 1))
  99. /* Reserved bit for blk-throtl */
  100. #define BIO_ISSUE_THROTL_SKIP_LATENCY (1ULL << 63)
  101. struct bio_issue {
  102. u64 value;
  103. };
  104. static inline u64 __bio_issue_time(u64 time)
  105. {
  106. return time & BIO_ISSUE_TIME_MASK;
  107. }
  108. static inline u64 bio_issue_time(struct bio_issue *issue)
  109. {
  110. return __bio_issue_time(issue->value);
  111. }
  112. static inline sector_t bio_issue_size(struct bio_issue *issue)
  113. {
  114. return ((issue->value & BIO_ISSUE_SIZE_MASK) >> BIO_ISSUE_SIZE_SHIFT);
  115. }
  116. static inline void bio_issue_init(struct bio_issue *issue,
  117. sector_t size)
  118. {
  119. size &= (1ULL << BIO_ISSUE_SIZE_BITS) - 1;
  120. issue->value = ((issue->value & BIO_ISSUE_RES_MASK) |
  121. (ktime_get_ns() & BIO_ISSUE_TIME_MASK) |
  122. ((u64)size << BIO_ISSUE_SIZE_SHIFT));
  123. }
  124. /*
  125. * main unit of I/O for the block layer and lower layers (ie drivers and
  126. * stacking drivers)
  127. */
  128. struct bio {
  129. struct bio *bi_next; /* request queue link */
  130. struct gendisk *bi_disk;
  131. unsigned int bi_opf; /* bottom bits req flags,
  132. * top bits REQ_OP. Use
  133. * accessors.
  134. */
  135. unsigned short bi_flags; /* status, etc and bvec pool number */
  136. unsigned short bi_ioprio;
  137. unsigned short bi_write_hint;
  138. blk_status_t bi_status;
  139. u8 bi_partno;
  140. /* Number of segments in this BIO after
  141. * physical address coalescing is performed.
  142. */
  143. unsigned int bi_phys_segments;
  144. /*
  145. * To keep track of the max segment size, we account for the
  146. * sizes of the first and last mergeable segments in this bio.
  147. */
  148. unsigned int bi_seg_front_size;
  149. unsigned int bi_seg_back_size;
  150. struct bvec_iter bi_iter;
  151. atomic_t __bi_remaining;
  152. bio_end_io_t *bi_end_io;
  153. void *bi_private;
  154. #ifdef CONFIG_BLK_CGROUP
  155. /*
  156. * Optional ioc and css associated with this bio. Put on bio
  157. * release. Read comment on top of bio_associate_current().
  158. */
  159. struct io_context *bi_ioc;
  160. struct cgroup_subsys_state *bi_css;
  161. struct blkcg_gq *bi_blkg;
  162. struct bio_issue bi_issue;
  163. #endif
  164. union {
  165. #if defined(CONFIG_BLK_DEV_INTEGRITY)
  166. struct bio_integrity_payload *bi_integrity; /* data integrity */
  167. #endif
  168. };
  169. unsigned short bi_vcnt; /* how many bio_vec's */
  170. /*
  171. * Everything starting with bi_max_vecs will be preserved by bio_reset()
  172. */
  173. unsigned short bi_max_vecs; /* max bvl_vecs we can hold */
  174. atomic_t __bi_cnt; /* pin count */
  175. struct bio_vec *bi_io_vec; /* the actual vec list */
  176. struct bio_set *bi_pool;
  177. /*
  178. * We can inline a number of vecs at the end of the bio, to avoid
  179. * double allocations for a small number of bio_vecs. This member
  180. * MUST obviously be kept at the very end of the bio.
  181. */
  182. struct bio_vec bi_inline_vecs[0];
  183. };
  184. #define BIO_RESET_BYTES offsetof(struct bio, bi_max_vecs)
  185. /*
  186. * bio flags
  187. */
  188. #define BIO_SEG_VALID 1 /* bi_phys_segments valid */
  189. #define BIO_CLONED 2 /* doesn't own data */
  190. #define BIO_BOUNCED 3 /* bio is a bounce bio */
  191. #define BIO_USER_MAPPED 4 /* contains user pages */
  192. #define BIO_NULL_MAPPED 5 /* contains invalid user pages */
  193. #define BIO_QUIET 6 /* Make BIO Quiet */
  194. #define BIO_CHAIN 7 /* chained bio, ->bi_remaining in effect */
  195. #define BIO_REFFED 8 /* bio has elevated ->bi_cnt */
  196. #define BIO_THROTTLED 9 /* This bio has already been subjected to
  197. * throttling rules. Don't do it again. */
  198. #define BIO_TRACE_COMPLETION 10 /* bio_endio() should trace the final completion
  199. * of this bio. */
  200. #define BIO_QUEUE_ENTERED 11 /* can use blk_queue_enter_live() */
  201. /* See BVEC_POOL_OFFSET below before adding new flags */
  202. /*
  203. * We support 6 different bvec pools, the last one is magic in that it
  204. * is backed by a mempool.
  205. */
  206. #define BVEC_POOL_NR 6
  207. #define BVEC_POOL_MAX (BVEC_POOL_NR - 1)
  208. /*
  209. * Top 3 bits of bio flags indicate the pool the bvecs came from. We add
  210. * 1 to the actual index so that 0 indicates that there are no bvecs to be
  211. * freed.
  212. */
  213. #define BVEC_POOL_BITS (3)
  214. #define BVEC_POOL_OFFSET (16 - BVEC_POOL_BITS)
  215. #define BVEC_POOL_IDX(bio) ((bio)->bi_flags >> BVEC_POOL_OFFSET)
  216. #if (1<< BVEC_POOL_BITS) < (BVEC_POOL_NR+1)
  217. # error "BVEC_POOL_BITS is too small"
  218. #endif
  219. /*
  220. * Flags starting here get preserved by bio_reset() - this includes
  221. * only BVEC_POOL_IDX()
  222. */
  223. #define BIO_RESET_BITS BVEC_POOL_OFFSET
  224. typedef __u32 __bitwise blk_mq_req_flags_t;
  225. /*
  226. * Operations and flags common to the bio and request structures.
  227. * We use 8 bits for encoding the operation, and the remaining 24 for flags.
  228. *
  229. * The least significant bit of the operation number indicates the data
  230. * transfer direction:
  231. *
  232. * - if the least significant bit is set transfers are TO the device
  233. * - if the least significant bit is not set transfers are FROM the device
  234. *
  235. * If a operation does not transfer data the least significant bit has no
  236. * meaning.
  237. */
  238. #define REQ_OP_BITS 8
  239. #define REQ_OP_MASK ((1 << REQ_OP_BITS) - 1)
  240. #define REQ_FLAG_BITS 24
  241. enum req_opf {
  242. /* read sectors from the device */
  243. REQ_OP_READ = 0,
  244. /* write sectors to the device */
  245. REQ_OP_WRITE = 1,
  246. /* flush the volatile write cache */
  247. REQ_OP_FLUSH = 2,
  248. /* discard sectors */
  249. REQ_OP_DISCARD = 3,
  250. /* get zone information */
  251. REQ_OP_ZONE_REPORT = 4,
  252. /* securely erase sectors */
  253. REQ_OP_SECURE_ERASE = 5,
  254. /* seset a zone write pointer */
  255. REQ_OP_ZONE_RESET = 6,
  256. /* write the same sector many times */
  257. REQ_OP_WRITE_SAME = 7,
  258. /* write the zero filled sector many times */
  259. REQ_OP_WRITE_ZEROES = 9,
  260. /* SCSI passthrough using struct scsi_request */
  261. REQ_OP_SCSI_IN = 32,
  262. REQ_OP_SCSI_OUT = 33,
  263. /* Driver private requests */
  264. REQ_OP_DRV_IN = 34,
  265. REQ_OP_DRV_OUT = 35,
  266. REQ_OP_LAST,
  267. };
  268. enum req_flag_bits {
  269. __REQ_FAILFAST_DEV = /* no driver retries of device errors */
  270. REQ_OP_BITS,
  271. __REQ_FAILFAST_TRANSPORT, /* no driver retries of transport errors */
  272. __REQ_FAILFAST_DRIVER, /* no driver retries of driver errors */
  273. __REQ_SYNC, /* request is sync (sync write or read) */
  274. __REQ_META, /* metadata io request */
  275. __REQ_PRIO, /* boost priority in cfq */
  276. __REQ_NOMERGE, /* don't touch this for merging */
  277. __REQ_IDLE, /* anticipate more IO after this one */
  278. __REQ_INTEGRITY, /* I/O includes block integrity payload */
  279. __REQ_FUA, /* forced unit access */
  280. __REQ_PREFLUSH, /* request for cache flush */
  281. __REQ_RAHEAD, /* read ahead, can fail anytime */
  282. __REQ_BACKGROUND, /* background IO */
  283. __REQ_NOWAIT, /* Don't wait if request will block */
  284. /* command specific flags for REQ_OP_WRITE_ZEROES: */
  285. __REQ_NOUNMAP, /* do not free blocks when zeroing */
  286. /* for driver use */
  287. __REQ_DRV,
  288. __REQ_SWAP, /* swapping request. */
  289. __REQ_NR_BITS, /* stops here */
  290. };
  291. #define REQ_FAILFAST_DEV (1ULL << __REQ_FAILFAST_DEV)
  292. #define REQ_FAILFAST_TRANSPORT (1ULL << __REQ_FAILFAST_TRANSPORT)
  293. #define REQ_FAILFAST_DRIVER (1ULL << __REQ_FAILFAST_DRIVER)
  294. #define REQ_SYNC (1ULL << __REQ_SYNC)
  295. #define REQ_META (1ULL << __REQ_META)
  296. #define REQ_PRIO (1ULL << __REQ_PRIO)
  297. #define REQ_NOMERGE (1ULL << __REQ_NOMERGE)
  298. #define REQ_IDLE (1ULL << __REQ_IDLE)
  299. #define REQ_INTEGRITY (1ULL << __REQ_INTEGRITY)
  300. #define REQ_FUA (1ULL << __REQ_FUA)
  301. #define REQ_PREFLUSH (1ULL << __REQ_PREFLUSH)
  302. #define REQ_RAHEAD (1ULL << __REQ_RAHEAD)
  303. #define REQ_BACKGROUND (1ULL << __REQ_BACKGROUND)
  304. #define REQ_NOWAIT (1ULL << __REQ_NOWAIT)
  305. #define REQ_NOUNMAP (1ULL << __REQ_NOUNMAP)
  306. #define REQ_DRV (1ULL << __REQ_DRV)
  307. #define REQ_SWAP (1ULL << __REQ_SWAP)
  308. #define REQ_FAILFAST_MASK \
  309. (REQ_FAILFAST_DEV | REQ_FAILFAST_TRANSPORT | REQ_FAILFAST_DRIVER)
  310. #define REQ_NOMERGE_FLAGS \
  311. (REQ_NOMERGE | REQ_PREFLUSH | REQ_FUA)
  312. enum stat_group {
  313. STAT_READ,
  314. STAT_WRITE,
  315. STAT_DISCARD,
  316. NR_STAT_GROUPS
  317. };
  318. #define bio_op(bio) \
  319. ((bio)->bi_opf & REQ_OP_MASK)
  320. #define req_op(req) \
  321. ((req)->cmd_flags & REQ_OP_MASK)
  322. /* obsolete, don't use in new code */
  323. static inline void bio_set_op_attrs(struct bio *bio, unsigned op,
  324. unsigned op_flags)
  325. {
  326. bio->bi_opf = op | op_flags;
  327. }
  328. static inline bool op_is_write(unsigned int op)
  329. {
  330. return (op & 1);
  331. }
  332. /*
  333. * Check if the bio or request is one that needs special treatment in the
  334. * flush state machine.
  335. */
  336. static inline bool op_is_flush(unsigned int op)
  337. {
  338. return op & (REQ_FUA | REQ_PREFLUSH);
  339. }
  340. /*
  341. * Reads are always treated as synchronous, as are requests with the FUA or
  342. * PREFLUSH flag. Other operations may be marked as synchronous using the
  343. * REQ_SYNC flag.
  344. */
  345. static inline bool op_is_sync(unsigned int op)
  346. {
  347. return (op & REQ_OP_MASK) == REQ_OP_READ ||
  348. (op & (REQ_SYNC | REQ_FUA | REQ_PREFLUSH));
  349. }
  350. static inline bool op_is_discard(unsigned int op)
  351. {
  352. return (op & REQ_OP_MASK) == REQ_OP_DISCARD;
  353. }
  354. static inline int op_stat_group(unsigned int op)
  355. {
  356. if (op_is_discard(op))
  357. return STAT_DISCARD;
  358. return op_is_write(op);
  359. }
  360. typedef unsigned int blk_qc_t;
  361. #define BLK_QC_T_NONE -1U
  362. #define BLK_QC_T_SHIFT 16
  363. #define BLK_QC_T_INTERNAL (1U << 31)
  364. static inline bool blk_qc_t_valid(blk_qc_t cookie)
  365. {
  366. return cookie != BLK_QC_T_NONE;
  367. }
  368. static inline blk_qc_t blk_tag_to_qc_t(unsigned int tag, unsigned int queue_num,
  369. bool internal)
  370. {
  371. blk_qc_t ret = tag | (queue_num << BLK_QC_T_SHIFT);
  372. if (internal)
  373. ret |= BLK_QC_T_INTERNAL;
  374. return ret;
  375. }
  376. static inline unsigned int blk_qc_t_to_queue_num(blk_qc_t cookie)
  377. {
  378. return (cookie & ~BLK_QC_T_INTERNAL) >> BLK_QC_T_SHIFT;
  379. }
  380. static inline unsigned int blk_qc_t_to_tag(blk_qc_t cookie)
  381. {
  382. return cookie & ((1u << BLK_QC_T_SHIFT) - 1);
  383. }
  384. static inline bool blk_qc_t_is_internal(blk_qc_t cookie)
  385. {
  386. return (cookie & BLK_QC_T_INTERNAL) != 0;
  387. }
  388. struct blk_rq_stat {
  389. u64 mean;
  390. u64 min;
  391. u64 max;
  392. u32 nr_samples;
  393. u64 batch;
  394. };
  395. #endif /* __LINUX_BLK_TYPES_H */