blk-lib.c 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407
  1. // SPDX-License-Identifier: GPL-2.0
  2. /*
  3. * Functions related to generic helpers functions
  4. */
  5. #include <linux/kernel.h>
  6. #include <linux/module.h>
  7. #include <linux/bio.h>
  8. #include <linux/blkdev.h>
  9. #include <linux/scatterlist.h>
  10. #include "blk.h"
  11. struct bio *blk_next_bio(struct bio *bio, unsigned int nr_pages, gfp_t gfp)
  12. {
  13. struct bio *new = bio_alloc(gfp, nr_pages);
  14. if (bio) {
  15. bio_chain(bio, new);
  16. submit_bio(bio);
  17. }
  18. return new;
  19. }
  20. int __blkdev_issue_discard(struct block_device *bdev, sector_t sector,
  21. sector_t nr_sects, gfp_t gfp_mask, int flags,
  22. struct bio **biop)
  23. {
  24. struct request_queue *q = bdev_get_queue(bdev);
  25. struct bio *bio = *biop;
  26. unsigned int op;
  27. sector_t bs_mask;
  28. if (!q)
  29. return -ENXIO;
  30. if (bdev_read_only(bdev))
  31. return -EPERM;
  32. if (flags & BLKDEV_DISCARD_SECURE) {
  33. if (!blk_queue_secure_erase(q))
  34. return -EOPNOTSUPP;
  35. op = REQ_OP_SECURE_ERASE;
  36. } else {
  37. if (!blk_queue_discard(q))
  38. return -EOPNOTSUPP;
  39. op = REQ_OP_DISCARD;
  40. }
  41. bs_mask = (bdev_logical_block_size(bdev) >> 9) - 1;
  42. if ((sector | nr_sects) & bs_mask)
  43. return -EINVAL;
  44. if (!nr_sects)
  45. return -EINVAL;
  46. while (nr_sects) {
  47. sector_t req_sects = min_t(sector_t, nr_sects,
  48. bio_allowed_max_sectors(q));
  49. WARN_ON_ONCE((req_sects << 9) > UINT_MAX);
  50. bio = blk_next_bio(bio, 0, gfp_mask);
  51. bio->bi_iter.bi_sector = sector;
  52. bio_set_dev(bio, bdev);
  53. bio_set_op_attrs(bio, op, 0);
  54. bio->bi_iter.bi_size = req_sects << 9;
  55. sector += req_sects;
  56. nr_sects -= req_sects;
  57. /*
  58. * We can loop for a long time in here, if someone does
  59. * full device discards (like mkfs). Be nice and allow
  60. * us to schedule out to avoid softlocking if preempt
  61. * is disabled.
  62. */
  63. cond_resched();
  64. }
  65. *biop = bio;
  66. return 0;
  67. }
  68. EXPORT_SYMBOL(__blkdev_issue_discard);
  69. /**
  70. * blkdev_issue_discard - queue a discard
  71. * @bdev: blockdev to issue discard for
  72. * @sector: start sector
  73. * @nr_sects: number of sectors to discard
  74. * @gfp_mask: memory allocation flags (for bio_alloc)
  75. * @flags: BLKDEV_DISCARD_* flags to control behaviour
  76. *
  77. * Description:
  78. * Issue a discard request for the sectors in question.
  79. */
  80. int blkdev_issue_discard(struct block_device *bdev, sector_t sector,
  81. sector_t nr_sects, gfp_t gfp_mask, unsigned long flags)
  82. {
  83. struct bio *bio = NULL;
  84. struct blk_plug plug;
  85. int ret;
  86. blk_start_plug(&plug);
  87. ret = __blkdev_issue_discard(bdev, sector, nr_sects, gfp_mask, flags,
  88. &bio);
  89. if (!ret && bio) {
  90. ret = submit_bio_wait(bio);
  91. if (ret == -EOPNOTSUPP)
  92. ret = 0;
  93. bio_put(bio);
  94. }
  95. blk_finish_plug(&plug);
  96. return ret;
  97. }
  98. EXPORT_SYMBOL(blkdev_issue_discard);
  99. /**
  100. * __blkdev_issue_write_same - generate number of bios with same page
  101. * @bdev: target blockdev
  102. * @sector: start sector
  103. * @nr_sects: number of sectors to write
  104. * @gfp_mask: memory allocation flags (for bio_alloc)
  105. * @page: page containing data to write
  106. * @biop: pointer to anchor bio
  107. *
  108. * Description:
  109. * Generate and issue number of bios(REQ_OP_WRITE_SAME) with same page.
  110. */
  111. static int __blkdev_issue_write_same(struct block_device *bdev, sector_t sector,
  112. sector_t nr_sects, gfp_t gfp_mask, struct page *page,
  113. struct bio **biop)
  114. {
  115. struct request_queue *q = bdev_get_queue(bdev);
  116. unsigned int max_write_same_sectors;
  117. struct bio *bio = *biop;
  118. sector_t bs_mask;
  119. if (!q)
  120. return -ENXIO;
  121. if (bdev_read_only(bdev))
  122. return -EPERM;
  123. bs_mask = (bdev_logical_block_size(bdev) >> 9) - 1;
  124. if ((sector | nr_sects) & bs_mask)
  125. return -EINVAL;
  126. if (!bdev_write_same(bdev))
  127. return -EOPNOTSUPP;
  128. /* Ensure that max_write_same_sectors doesn't overflow bi_size */
  129. max_write_same_sectors = bio_allowed_max_sectors(q);
  130. while (nr_sects) {
  131. bio = blk_next_bio(bio, 1, gfp_mask);
  132. bio->bi_iter.bi_sector = sector;
  133. bio_set_dev(bio, bdev);
  134. bio->bi_vcnt = 1;
  135. bio->bi_io_vec->bv_page = page;
  136. bio->bi_io_vec->bv_offset = 0;
  137. bio->bi_io_vec->bv_len = bdev_logical_block_size(bdev);
  138. bio_set_op_attrs(bio, REQ_OP_WRITE_SAME, 0);
  139. if (nr_sects > max_write_same_sectors) {
  140. bio->bi_iter.bi_size = max_write_same_sectors << 9;
  141. nr_sects -= max_write_same_sectors;
  142. sector += max_write_same_sectors;
  143. } else {
  144. bio->bi_iter.bi_size = nr_sects << 9;
  145. nr_sects = 0;
  146. }
  147. cond_resched();
  148. }
  149. *biop = bio;
  150. return 0;
  151. }
  152. /**
  153. * blkdev_issue_write_same - queue a write same operation
  154. * @bdev: target blockdev
  155. * @sector: start sector
  156. * @nr_sects: number of sectors to write
  157. * @gfp_mask: memory allocation flags (for bio_alloc)
  158. * @page: page containing data
  159. *
  160. * Description:
  161. * Issue a write same request for the sectors in question.
  162. */
  163. int blkdev_issue_write_same(struct block_device *bdev, sector_t sector,
  164. sector_t nr_sects, gfp_t gfp_mask,
  165. struct page *page)
  166. {
  167. struct bio *bio = NULL;
  168. struct blk_plug plug;
  169. int ret;
  170. blk_start_plug(&plug);
  171. ret = __blkdev_issue_write_same(bdev, sector, nr_sects, gfp_mask, page,
  172. &bio);
  173. if (ret == 0 && bio) {
  174. ret = submit_bio_wait(bio);
  175. bio_put(bio);
  176. }
  177. blk_finish_plug(&plug);
  178. return ret;
  179. }
  180. EXPORT_SYMBOL(blkdev_issue_write_same);
  181. static int __blkdev_issue_write_zeroes(struct block_device *bdev,
  182. sector_t sector, sector_t nr_sects, gfp_t gfp_mask,
  183. struct bio **biop, unsigned flags)
  184. {
  185. struct bio *bio = *biop;
  186. unsigned int max_write_zeroes_sectors;
  187. struct request_queue *q = bdev_get_queue(bdev);
  188. if (!q)
  189. return -ENXIO;
  190. if (bdev_read_only(bdev))
  191. return -EPERM;
  192. /* Ensure that max_write_zeroes_sectors doesn't overflow bi_size */
  193. max_write_zeroes_sectors = bdev_write_zeroes_sectors(bdev);
  194. if (max_write_zeroes_sectors == 0)
  195. return -EOPNOTSUPP;
  196. while (nr_sects) {
  197. bio = blk_next_bio(bio, 0, gfp_mask);
  198. bio->bi_iter.bi_sector = sector;
  199. bio_set_dev(bio, bdev);
  200. bio->bi_opf = REQ_OP_WRITE_ZEROES;
  201. if (flags & BLKDEV_ZERO_NOUNMAP)
  202. bio->bi_opf |= REQ_NOUNMAP;
  203. if (nr_sects > max_write_zeroes_sectors) {
  204. bio->bi_iter.bi_size = max_write_zeroes_sectors << 9;
  205. nr_sects -= max_write_zeroes_sectors;
  206. sector += max_write_zeroes_sectors;
  207. } else {
  208. bio->bi_iter.bi_size = nr_sects << 9;
  209. nr_sects = 0;
  210. }
  211. cond_resched();
  212. }
  213. *biop = bio;
  214. return 0;
  215. }
  216. /*
  217. * Convert a number of 512B sectors to a number of pages.
  218. * The result is limited to a number of pages that can fit into a BIO.
  219. * Also make sure that the result is always at least 1 (page) for the cases
  220. * where nr_sects is lower than the number of sectors in a page.
  221. */
  222. static unsigned int __blkdev_sectors_to_bio_pages(sector_t nr_sects)
  223. {
  224. sector_t pages = DIV_ROUND_UP_SECTOR_T(nr_sects, PAGE_SIZE / 512);
  225. return min(pages, (sector_t)BIO_MAX_PAGES);
  226. }
  227. static int __blkdev_issue_zero_pages(struct block_device *bdev,
  228. sector_t sector, sector_t nr_sects, gfp_t gfp_mask,
  229. struct bio **biop)
  230. {
  231. struct request_queue *q = bdev_get_queue(bdev);
  232. struct bio *bio = *biop;
  233. int bi_size = 0;
  234. unsigned int sz;
  235. if (!q)
  236. return -ENXIO;
  237. if (bdev_read_only(bdev))
  238. return -EPERM;
  239. while (nr_sects != 0) {
  240. bio = blk_next_bio(bio, __blkdev_sectors_to_bio_pages(nr_sects),
  241. gfp_mask);
  242. bio->bi_iter.bi_sector = sector;
  243. bio_set_dev(bio, bdev);
  244. bio_set_op_attrs(bio, REQ_OP_WRITE, 0);
  245. while (nr_sects != 0) {
  246. sz = min((sector_t) PAGE_SIZE, nr_sects << 9);
  247. bi_size = bio_add_page(bio, ZERO_PAGE(0), sz, 0);
  248. nr_sects -= bi_size >> 9;
  249. sector += bi_size >> 9;
  250. if (bi_size < sz)
  251. break;
  252. }
  253. cond_resched();
  254. }
  255. *biop = bio;
  256. return 0;
  257. }
  258. /**
  259. * __blkdev_issue_zeroout - generate number of zero filed write bios
  260. * @bdev: blockdev to issue
  261. * @sector: start sector
  262. * @nr_sects: number of sectors to write
  263. * @gfp_mask: memory allocation flags (for bio_alloc)
  264. * @biop: pointer to anchor bio
  265. * @flags: controls detailed behavior
  266. *
  267. * Description:
  268. * Zero-fill a block range, either using hardware offload or by explicitly
  269. * writing zeroes to the device.
  270. *
  271. * If a device is using logical block provisioning, the underlying space will
  272. * not be released if %flags contains BLKDEV_ZERO_NOUNMAP.
  273. *
  274. * If %flags contains BLKDEV_ZERO_NOFALLBACK, the function will return
  275. * -EOPNOTSUPP if no explicit hardware offload for zeroing is provided.
  276. */
  277. int __blkdev_issue_zeroout(struct block_device *bdev, sector_t sector,
  278. sector_t nr_sects, gfp_t gfp_mask, struct bio **biop,
  279. unsigned flags)
  280. {
  281. int ret;
  282. sector_t bs_mask;
  283. bs_mask = (bdev_logical_block_size(bdev) >> 9) - 1;
  284. if ((sector | nr_sects) & bs_mask)
  285. return -EINVAL;
  286. ret = __blkdev_issue_write_zeroes(bdev, sector, nr_sects, gfp_mask,
  287. biop, flags);
  288. if (ret != -EOPNOTSUPP || (flags & BLKDEV_ZERO_NOFALLBACK))
  289. return ret;
  290. return __blkdev_issue_zero_pages(bdev, sector, nr_sects, gfp_mask,
  291. biop);
  292. }
  293. EXPORT_SYMBOL(__blkdev_issue_zeroout);
  294. /**
  295. * blkdev_issue_zeroout - zero-fill a block range
  296. * @bdev: blockdev to write
  297. * @sector: start sector
  298. * @nr_sects: number of sectors to write
  299. * @gfp_mask: memory allocation flags (for bio_alloc)
  300. * @flags: controls detailed behavior
  301. *
  302. * Description:
  303. * Zero-fill a block range, either using hardware offload or by explicitly
  304. * writing zeroes to the device. See __blkdev_issue_zeroout() for the
  305. * valid values for %flags.
  306. */
  307. int blkdev_issue_zeroout(struct block_device *bdev, sector_t sector,
  308. sector_t nr_sects, gfp_t gfp_mask, unsigned flags)
  309. {
  310. int ret = 0;
  311. sector_t bs_mask;
  312. struct bio *bio;
  313. struct blk_plug plug;
  314. bool try_write_zeroes = !!bdev_write_zeroes_sectors(bdev);
  315. bs_mask = (bdev_logical_block_size(bdev) >> 9) - 1;
  316. if ((sector | nr_sects) & bs_mask)
  317. return -EINVAL;
  318. retry:
  319. bio = NULL;
  320. blk_start_plug(&plug);
  321. if (try_write_zeroes) {
  322. ret = __blkdev_issue_write_zeroes(bdev, sector, nr_sects,
  323. gfp_mask, &bio, flags);
  324. } else if (!(flags & BLKDEV_ZERO_NOFALLBACK)) {
  325. ret = __blkdev_issue_zero_pages(bdev, sector, nr_sects,
  326. gfp_mask, &bio);
  327. } else {
  328. /* No zeroing offload support */
  329. ret = -EOPNOTSUPP;
  330. }
  331. if (ret == 0 && bio) {
  332. ret = submit_bio_wait(bio);
  333. bio_put(bio);
  334. }
  335. blk_finish_plug(&plug);
  336. if (ret && try_write_zeroes) {
  337. if (!(flags & BLKDEV_ZERO_NOFALLBACK)) {
  338. try_write_zeroes = false;
  339. goto retry;
  340. }
  341. if (!bdev_write_zeroes_sectors(bdev)) {
  342. /*
  343. * Zeroing offload support was indicated, but the
  344. * device reported ILLEGAL REQUEST (for some devices
  345. * there is no non-destructive way to verify whether
  346. * WRITE ZEROES is actually supported).
  347. */
  348. ret = -EOPNOTSUPP;
  349. }
  350. }
  351. return ret;
  352. }
  353. EXPORT_SYMBOL(blkdev_issue_zeroout);