blk-merge.c 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926
  1. // SPDX-License-Identifier: GPL-2.0
  2. /*
  3. * Functions related to segment and merge handling
  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 <trace/events/block.h>
  11. #include "blk.h"
  12. /*
  13. * Check if the two bvecs from two bios can be merged to one segment. If yes,
  14. * no need to check gap between the two bios since the 1st bio and the 1st bvec
  15. * in the 2nd bio can be handled in one segment.
  16. */
  17. static inline bool bios_segs_mergeable(struct request_queue *q,
  18. struct bio *prev, struct bio_vec *prev_last_bv,
  19. struct bio_vec *next_first_bv)
  20. {
  21. if (!biovec_phys_mergeable(q, prev_last_bv, next_first_bv))
  22. return false;
  23. if (prev->bi_seg_back_size + next_first_bv->bv_len >
  24. queue_max_segment_size(q))
  25. return false;
  26. return true;
  27. }
  28. static inline bool bio_will_gap(struct request_queue *q,
  29. struct request *prev_rq, struct bio *prev, struct bio *next)
  30. {
  31. struct bio_vec pb, nb;
  32. if (!bio_has_data(prev) || !queue_virt_boundary(q))
  33. return false;
  34. /*
  35. * Don't merge if the 1st bio starts with non-zero offset, otherwise it
  36. * is quite difficult to respect the sg gap limit. We work hard to
  37. * merge a huge number of small single bios in case of mkfs.
  38. */
  39. if (prev_rq)
  40. bio_get_first_bvec(prev_rq->bio, &pb);
  41. else
  42. bio_get_first_bvec(prev, &pb);
  43. if (pb.bv_offset & queue_virt_boundary(q))
  44. return true;
  45. /*
  46. * We don't need to worry about the situation that the merged segment
  47. * ends in unaligned virt boundary:
  48. *
  49. * - if 'pb' ends aligned, the merged segment ends aligned
  50. * - if 'pb' ends unaligned, the next bio must include
  51. * one single bvec of 'nb', otherwise the 'nb' can't
  52. * merge with 'pb'
  53. */
  54. bio_get_last_bvec(prev, &pb);
  55. bio_get_first_bvec(next, &nb);
  56. if (bios_segs_mergeable(q, prev, &pb, &nb))
  57. return false;
  58. return __bvec_gap_to_prev(q, &pb, nb.bv_offset);
  59. }
  60. static inline bool req_gap_back_merge(struct request *req, struct bio *bio)
  61. {
  62. return bio_will_gap(req->q, req, req->biotail, bio);
  63. }
  64. static inline bool req_gap_front_merge(struct request *req, struct bio *bio)
  65. {
  66. return bio_will_gap(req->q, NULL, bio, req->bio);
  67. }
  68. static struct bio *blk_bio_discard_split(struct request_queue *q,
  69. struct bio *bio,
  70. struct bio_set *bs,
  71. unsigned *nsegs)
  72. {
  73. unsigned int max_discard_sectors, granularity;
  74. int alignment;
  75. sector_t tmp;
  76. unsigned split_sectors;
  77. *nsegs = 1;
  78. /* Zero-sector (unknown) and one-sector granularities are the same. */
  79. granularity = max(q->limits.discard_granularity >> 9, 1U);
  80. max_discard_sectors = min(q->limits.max_discard_sectors,
  81. bio_allowed_max_sectors(q));
  82. max_discard_sectors -= max_discard_sectors % granularity;
  83. if (unlikely(!max_discard_sectors)) {
  84. /* XXX: warn */
  85. return NULL;
  86. }
  87. if (bio_sectors(bio) <= max_discard_sectors)
  88. return NULL;
  89. split_sectors = max_discard_sectors;
  90. /*
  91. * If the next starting sector would be misaligned, stop the discard at
  92. * the previous aligned sector.
  93. */
  94. alignment = (q->limits.discard_alignment >> 9) % granularity;
  95. tmp = bio->bi_iter.bi_sector + split_sectors - alignment;
  96. tmp = sector_div(tmp, granularity);
  97. if (split_sectors > tmp)
  98. split_sectors -= tmp;
  99. return bio_split(bio, split_sectors, GFP_NOIO, bs);
  100. }
  101. static struct bio *blk_bio_write_zeroes_split(struct request_queue *q,
  102. struct bio *bio, struct bio_set *bs, unsigned *nsegs)
  103. {
  104. *nsegs = 1;
  105. if (!q->limits.max_write_zeroes_sectors)
  106. return NULL;
  107. if (bio_sectors(bio) <= q->limits.max_write_zeroes_sectors)
  108. return NULL;
  109. return bio_split(bio, q->limits.max_write_zeroes_sectors, GFP_NOIO, bs);
  110. }
  111. static struct bio *blk_bio_write_same_split(struct request_queue *q,
  112. struct bio *bio,
  113. struct bio_set *bs,
  114. unsigned *nsegs)
  115. {
  116. *nsegs = 1;
  117. if (!q->limits.max_write_same_sectors)
  118. return NULL;
  119. if (bio_sectors(bio) <= q->limits.max_write_same_sectors)
  120. return NULL;
  121. return bio_split(bio, q->limits.max_write_same_sectors, GFP_NOIO, bs);
  122. }
  123. static inline unsigned get_max_io_size(struct request_queue *q,
  124. struct bio *bio)
  125. {
  126. unsigned sectors = blk_max_size_offset(q, bio->bi_iter.bi_sector);
  127. unsigned mask = queue_logical_block_size(q) - 1;
  128. /* aligned to logical block size */
  129. sectors &= ~(mask >> 9);
  130. return sectors;
  131. }
  132. static struct bio *blk_bio_segment_split(struct request_queue *q,
  133. struct bio *bio,
  134. struct bio_set *bs,
  135. unsigned *segs)
  136. {
  137. struct bio_vec bv, bvprv, *bvprvp = NULL;
  138. struct bvec_iter iter;
  139. unsigned seg_size = 0, nsegs = 0, sectors = 0;
  140. unsigned front_seg_size = bio->bi_seg_front_size;
  141. bool do_split = true;
  142. struct bio *new = NULL;
  143. const unsigned max_sectors = get_max_io_size(q, bio);
  144. bio_for_each_segment(bv, bio, iter) {
  145. /*
  146. * If the queue doesn't support SG gaps and adding this
  147. * offset would create a gap, disallow it.
  148. */
  149. if (bvprvp && bvec_gap_to_prev(q, bvprvp, bv.bv_offset))
  150. goto split;
  151. if (sectors + (bv.bv_len >> 9) > max_sectors) {
  152. /*
  153. * Consider this a new segment if we're splitting in
  154. * the middle of this vector.
  155. */
  156. if (nsegs < queue_max_segments(q) &&
  157. sectors < max_sectors) {
  158. nsegs++;
  159. sectors = max_sectors;
  160. }
  161. goto split;
  162. }
  163. if (bvprvp && blk_queue_cluster(q)) {
  164. if (seg_size + bv.bv_len > queue_max_segment_size(q))
  165. goto new_segment;
  166. if (!biovec_phys_mergeable(q, bvprvp, &bv))
  167. goto new_segment;
  168. seg_size += bv.bv_len;
  169. bvprv = bv;
  170. bvprvp = &bvprv;
  171. sectors += bv.bv_len >> 9;
  172. continue;
  173. }
  174. new_segment:
  175. if (nsegs == queue_max_segments(q))
  176. goto split;
  177. if (nsegs == 1 && seg_size > front_seg_size)
  178. front_seg_size = seg_size;
  179. nsegs++;
  180. bvprv = bv;
  181. bvprvp = &bvprv;
  182. seg_size = bv.bv_len;
  183. sectors += bv.bv_len >> 9;
  184. }
  185. do_split = false;
  186. split:
  187. *segs = nsegs;
  188. if (do_split) {
  189. new = bio_split(bio, sectors, GFP_NOIO, bs);
  190. if (new)
  191. bio = new;
  192. }
  193. if (nsegs == 1 && seg_size > front_seg_size)
  194. front_seg_size = seg_size;
  195. bio->bi_seg_front_size = front_seg_size;
  196. if (seg_size > bio->bi_seg_back_size)
  197. bio->bi_seg_back_size = seg_size;
  198. return do_split ? new : NULL;
  199. }
  200. void blk_queue_split(struct request_queue *q, struct bio **bio)
  201. {
  202. struct bio *split, *res;
  203. unsigned nsegs;
  204. switch (bio_op(*bio)) {
  205. case REQ_OP_DISCARD:
  206. case REQ_OP_SECURE_ERASE:
  207. split = blk_bio_discard_split(q, *bio, &q->bio_split, &nsegs);
  208. break;
  209. case REQ_OP_WRITE_ZEROES:
  210. split = blk_bio_write_zeroes_split(q, *bio, &q->bio_split, &nsegs);
  211. break;
  212. case REQ_OP_WRITE_SAME:
  213. split = blk_bio_write_same_split(q, *bio, &q->bio_split, &nsegs);
  214. break;
  215. default:
  216. split = blk_bio_segment_split(q, *bio, &q->bio_split, &nsegs);
  217. break;
  218. }
  219. /* physical segments can be figured out during splitting */
  220. res = split ? split : *bio;
  221. res->bi_phys_segments = nsegs;
  222. bio_set_flag(res, BIO_SEG_VALID);
  223. if (split) {
  224. /* there isn't chance to merge the splitted bio */
  225. split->bi_opf |= REQ_NOMERGE;
  226. /*
  227. * Since we're recursing into make_request here, ensure
  228. * that we mark this bio as already having entered the queue.
  229. * If not, and the queue is going away, we can get stuck
  230. * forever on waiting for the queue reference to drop. But
  231. * that will never happen, as we're already holding a
  232. * reference to it.
  233. */
  234. bio_set_flag(*bio, BIO_QUEUE_ENTERED);
  235. bio_chain(split, *bio);
  236. trace_block_split(q, split, (*bio)->bi_iter.bi_sector);
  237. generic_make_request(*bio);
  238. *bio = split;
  239. }
  240. }
  241. EXPORT_SYMBOL(blk_queue_split);
  242. static unsigned int __blk_recalc_rq_segments(struct request_queue *q,
  243. struct bio *bio,
  244. bool no_sg_merge)
  245. {
  246. struct bio_vec bv, bvprv = { NULL };
  247. int cluster, prev = 0;
  248. unsigned int seg_size, nr_phys_segs;
  249. struct bio *fbio, *bbio;
  250. struct bvec_iter iter;
  251. if (!bio)
  252. return 0;
  253. switch (bio_op(bio)) {
  254. case REQ_OP_DISCARD:
  255. case REQ_OP_SECURE_ERASE:
  256. case REQ_OP_WRITE_ZEROES:
  257. return 0;
  258. case REQ_OP_WRITE_SAME:
  259. return 1;
  260. }
  261. fbio = bio;
  262. cluster = blk_queue_cluster(q);
  263. seg_size = 0;
  264. nr_phys_segs = 0;
  265. for_each_bio(bio) {
  266. bio_for_each_segment(bv, bio, iter) {
  267. /*
  268. * If SG merging is disabled, each bio vector is
  269. * a segment
  270. */
  271. if (no_sg_merge)
  272. goto new_segment;
  273. if (prev && cluster) {
  274. if (seg_size + bv.bv_len
  275. > queue_max_segment_size(q))
  276. goto new_segment;
  277. if (!biovec_phys_mergeable(q, &bvprv, &bv))
  278. goto new_segment;
  279. seg_size += bv.bv_len;
  280. bvprv = bv;
  281. continue;
  282. }
  283. new_segment:
  284. if (nr_phys_segs == 1 && seg_size >
  285. fbio->bi_seg_front_size)
  286. fbio->bi_seg_front_size = seg_size;
  287. nr_phys_segs++;
  288. bvprv = bv;
  289. prev = 1;
  290. seg_size = bv.bv_len;
  291. }
  292. bbio = bio;
  293. }
  294. if (nr_phys_segs == 1 && seg_size > fbio->bi_seg_front_size)
  295. fbio->bi_seg_front_size = seg_size;
  296. if (seg_size > bbio->bi_seg_back_size)
  297. bbio->bi_seg_back_size = seg_size;
  298. return nr_phys_segs;
  299. }
  300. void blk_recalc_rq_segments(struct request *rq)
  301. {
  302. bool no_sg_merge = !!test_bit(QUEUE_FLAG_NO_SG_MERGE,
  303. &rq->q->queue_flags);
  304. rq->nr_phys_segments = __blk_recalc_rq_segments(rq->q, rq->bio,
  305. no_sg_merge);
  306. }
  307. void blk_recount_segments(struct request_queue *q, struct bio *bio)
  308. {
  309. unsigned short seg_cnt;
  310. /* estimate segment number by bi_vcnt for non-cloned bio */
  311. if (bio_flagged(bio, BIO_CLONED))
  312. seg_cnt = bio_segments(bio);
  313. else
  314. seg_cnt = bio->bi_vcnt;
  315. if (test_bit(QUEUE_FLAG_NO_SG_MERGE, &q->queue_flags) &&
  316. (seg_cnt < queue_max_segments(q)))
  317. bio->bi_phys_segments = seg_cnt;
  318. else {
  319. struct bio *nxt = bio->bi_next;
  320. bio->bi_next = NULL;
  321. bio->bi_phys_segments = __blk_recalc_rq_segments(q, bio, false);
  322. bio->bi_next = nxt;
  323. }
  324. bio_set_flag(bio, BIO_SEG_VALID);
  325. }
  326. EXPORT_SYMBOL(blk_recount_segments);
  327. static int blk_phys_contig_segment(struct request_queue *q, struct bio *bio,
  328. struct bio *nxt)
  329. {
  330. struct bio_vec end_bv = { NULL }, nxt_bv;
  331. if (!blk_queue_cluster(q))
  332. return 0;
  333. if (bio->bi_seg_back_size + nxt->bi_seg_front_size >
  334. queue_max_segment_size(q))
  335. return 0;
  336. if (!bio_has_data(bio))
  337. return 1;
  338. bio_get_last_bvec(bio, &end_bv);
  339. bio_get_first_bvec(nxt, &nxt_bv);
  340. return biovec_phys_mergeable(q, &end_bv, &nxt_bv);
  341. }
  342. static inline void
  343. __blk_segment_map_sg(struct request_queue *q, struct bio_vec *bvec,
  344. struct scatterlist *sglist, struct bio_vec *bvprv,
  345. struct scatterlist **sg, int *nsegs, int *cluster)
  346. {
  347. int nbytes = bvec->bv_len;
  348. if (*sg && *cluster) {
  349. if ((*sg)->length + nbytes > queue_max_segment_size(q))
  350. goto new_segment;
  351. if (!biovec_phys_mergeable(q, bvprv, bvec))
  352. goto new_segment;
  353. (*sg)->length += nbytes;
  354. } else {
  355. new_segment:
  356. if (!*sg)
  357. *sg = sglist;
  358. else {
  359. /*
  360. * If the driver previously mapped a shorter
  361. * list, we could see a termination bit
  362. * prematurely unless it fully inits the sg
  363. * table on each mapping. We KNOW that there
  364. * must be more entries here or the driver
  365. * would be buggy, so force clear the
  366. * termination bit to avoid doing a full
  367. * sg_init_table() in drivers for each command.
  368. */
  369. sg_unmark_end(*sg);
  370. *sg = sg_next(*sg);
  371. }
  372. sg_set_page(*sg, bvec->bv_page, nbytes, bvec->bv_offset);
  373. (*nsegs)++;
  374. }
  375. *bvprv = *bvec;
  376. }
  377. static inline int __blk_bvec_map_sg(struct request_queue *q, struct bio_vec bv,
  378. struct scatterlist *sglist, struct scatterlist **sg)
  379. {
  380. *sg = sglist;
  381. sg_set_page(*sg, bv.bv_page, bv.bv_len, bv.bv_offset);
  382. return 1;
  383. }
  384. static int __blk_bios_map_sg(struct request_queue *q, struct bio *bio,
  385. struct scatterlist *sglist,
  386. struct scatterlist **sg)
  387. {
  388. struct bio_vec bvec, bvprv = { NULL };
  389. struct bvec_iter iter;
  390. int cluster = blk_queue_cluster(q), nsegs = 0;
  391. for_each_bio(bio)
  392. bio_for_each_segment(bvec, bio, iter)
  393. __blk_segment_map_sg(q, &bvec, sglist, &bvprv, sg,
  394. &nsegs, &cluster);
  395. return nsegs;
  396. }
  397. /*
  398. * map a request to scatterlist, return number of sg entries setup. Caller
  399. * must make sure sg can hold rq->nr_phys_segments entries
  400. */
  401. int blk_rq_map_sg(struct request_queue *q, struct request *rq,
  402. struct scatterlist *sglist)
  403. {
  404. struct scatterlist *sg = NULL;
  405. int nsegs = 0;
  406. if (rq->rq_flags & RQF_SPECIAL_PAYLOAD)
  407. nsegs = __blk_bvec_map_sg(q, rq->special_vec, sglist, &sg);
  408. else if (rq->bio && bio_op(rq->bio) == REQ_OP_WRITE_SAME)
  409. nsegs = __blk_bvec_map_sg(q, bio_iovec(rq->bio), sglist, &sg);
  410. else if (rq->bio)
  411. nsegs = __blk_bios_map_sg(q, rq->bio, sglist, &sg);
  412. if (unlikely(rq->rq_flags & RQF_COPY_USER) &&
  413. (blk_rq_bytes(rq) & q->dma_pad_mask)) {
  414. unsigned int pad_len =
  415. (q->dma_pad_mask & ~blk_rq_bytes(rq)) + 1;
  416. sg->length += pad_len;
  417. rq->extra_len += pad_len;
  418. }
  419. if (q->dma_drain_size && q->dma_drain_needed(rq)) {
  420. if (op_is_write(req_op(rq)))
  421. memset(q->dma_drain_buffer, 0, q->dma_drain_size);
  422. sg_unmark_end(sg);
  423. sg = sg_next(sg);
  424. sg_set_page(sg, virt_to_page(q->dma_drain_buffer),
  425. q->dma_drain_size,
  426. ((unsigned long)q->dma_drain_buffer) &
  427. (PAGE_SIZE - 1));
  428. nsegs++;
  429. rq->extra_len += q->dma_drain_size;
  430. }
  431. if (sg)
  432. sg_mark_end(sg);
  433. /*
  434. * Something must have been wrong if the figured number of
  435. * segment is bigger than number of req's physical segments
  436. */
  437. WARN_ON(nsegs > blk_rq_nr_phys_segments(rq));
  438. return nsegs;
  439. }
  440. EXPORT_SYMBOL(blk_rq_map_sg);
  441. static inline int ll_new_hw_segment(struct request_queue *q,
  442. struct request *req,
  443. struct bio *bio)
  444. {
  445. int nr_phys_segs = bio_phys_segments(q, bio);
  446. if (req->nr_phys_segments + nr_phys_segs > queue_max_segments(q))
  447. goto no_merge;
  448. if (blk_integrity_merge_bio(q, req, bio) == false)
  449. goto no_merge;
  450. /*
  451. * This will form the start of a new hw segment. Bump both
  452. * counters.
  453. */
  454. req->nr_phys_segments += nr_phys_segs;
  455. return 1;
  456. no_merge:
  457. req_set_nomerge(q, req);
  458. return 0;
  459. }
  460. int ll_back_merge_fn(struct request_queue *q, struct request *req,
  461. struct bio *bio)
  462. {
  463. if (req_gap_back_merge(req, bio))
  464. return 0;
  465. if (blk_integrity_rq(req) &&
  466. integrity_req_gap_back_merge(req, bio))
  467. return 0;
  468. if (blk_rq_sectors(req) + bio_sectors(bio) >
  469. blk_rq_get_max_sectors(req, blk_rq_pos(req))) {
  470. req_set_nomerge(q, req);
  471. return 0;
  472. }
  473. if (!bio_flagged(req->biotail, BIO_SEG_VALID))
  474. blk_recount_segments(q, req->biotail);
  475. if (!bio_flagged(bio, BIO_SEG_VALID))
  476. blk_recount_segments(q, bio);
  477. return ll_new_hw_segment(q, req, bio);
  478. }
  479. int ll_front_merge_fn(struct request_queue *q, struct request *req,
  480. struct bio *bio)
  481. {
  482. if (req_gap_front_merge(req, bio))
  483. return 0;
  484. if (blk_integrity_rq(req) &&
  485. integrity_req_gap_front_merge(req, bio))
  486. return 0;
  487. if (blk_rq_sectors(req) + bio_sectors(bio) >
  488. blk_rq_get_max_sectors(req, bio->bi_iter.bi_sector)) {
  489. req_set_nomerge(q, req);
  490. return 0;
  491. }
  492. if (!bio_flagged(bio, BIO_SEG_VALID))
  493. blk_recount_segments(q, bio);
  494. if (!bio_flagged(req->bio, BIO_SEG_VALID))
  495. blk_recount_segments(q, req->bio);
  496. return ll_new_hw_segment(q, req, bio);
  497. }
  498. /*
  499. * blk-mq uses req->special to carry normal driver per-request payload, it
  500. * does not indicate a prepared command that we cannot merge with.
  501. */
  502. static bool req_no_special_merge(struct request *req)
  503. {
  504. struct request_queue *q = req->q;
  505. return !q->mq_ops && req->special;
  506. }
  507. static bool req_attempt_discard_merge(struct request_queue *q, struct request *req,
  508. struct request *next)
  509. {
  510. unsigned short segments = blk_rq_nr_discard_segments(req);
  511. if (segments >= queue_max_discard_segments(q))
  512. goto no_merge;
  513. if (blk_rq_sectors(req) + bio_sectors(next->bio) >
  514. blk_rq_get_max_sectors(req, blk_rq_pos(req)))
  515. goto no_merge;
  516. req->nr_phys_segments = segments + blk_rq_nr_discard_segments(next);
  517. return true;
  518. no_merge:
  519. req_set_nomerge(q, req);
  520. return false;
  521. }
  522. static int ll_merge_requests_fn(struct request_queue *q, struct request *req,
  523. struct request *next)
  524. {
  525. int total_phys_segments;
  526. unsigned int seg_size =
  527. req->biotail->bi_seg_back_size + next->bio->bi_seg_front_size;
  528. /*
  529. * First check if the either of the requests are re-queued
  530. * requests. Can't merge them if they are.
  531. */
  532. if (req_no_special_merge(req) || req_no_special_merge(next))
  533. return 0;
  534. if (req_gap_back_merge(req, next->bio))
  535. return 0;
  536. /*
  537. * Will it become too large?
  538. */
  539. if ((blk_rq_sectors(req) + blk_rq_sectors(next)) >
  540. blk_rq_get_max_sectors(req, blk_rq_pos(req)))
  541. return 0;
  542. total_phys_segments = req->nr_phys_segments + next->nr_phys_segments;
  543. if (blk_phys_contig_segment(q, req->biotail, next->bio)) {
  544. if (req->nr_phys_segments == 1)
  545. req->bio->bi_seg_front_size = seg_size;
  546. if (next->nr_phys_segments == 1)
  547. next->biotail->bi_seg_back_size = seg_size;
  548. total_phys_segments--;
  549. }
  550. if (total_phys_segments > queue_max_segments(q))
  551. return 0;
  552. if (blk_integrity_merge_rq(q, req, next) == false)
  553. return 0;
  554. /* Merge is OK... */
  555. req->nr_phys_segments = total_phys_segments;
  556. return 1;
  557. }
  558. /**
  559. * blk_rq_set_mixed_merge - mark a request as mixed merge
  560. * @rq: request to mark as mixed merge
  561. *
  562. * Description:
  563. * @rq is about to be mixed merged. Make sure the attributes
  564. * which can be mixed are set in each bio and mark @rq as mixed
  565. * merged.
  566. */
  567. void blk_rq_set_mixed_merge(struct request *rq)
  568. {
  569. unsigned int ff = rq->cmd_flags & REQ_FAILFAST_MASK;
  570. struct bio *bio;
  571. if (rq->rq_flags & RQF_MIXED_MERGE)
  572. return;
  573. /*
  574. * @rq will no longer represent mixable attributes for all the
  575. * contained bios. It will just track those of the first one.
  576. * Distributes the attributs to each bio.
  577. */
  578. for (bio = rq->bio; bio; bio = bio->bi_next) {
  579. WARN_ON_ONCE((bio->bi_opf & REQ_FAILFAST_MASK) &&
  580. (bio->bi_opf & REQ_FAILFAST_MASK) != ff);
  581. bio->bi_opf |= ff;
  582. }
  583. rq->rq_flags |= RQF_MIXED_MERGE;
  584. }
  585. static void blk_account_io_merge(struct request *req)
  586. {
  587. if (blk_do_io_stat(req)) {
  588. struct hd_struct *part;
  589. int cpu;
  590. cpu = part_stat_lock();
  591. part = req->part;
  592. part_round_stats(req->q, cpu, part);
  593. part_dec_in_flight(req->q, part, rq_data_dir(req));
  594. hd_struct_put(part);
  595. part_stat_unlock();
  596. }
  597. }
  598. /*
  599. * Two cases of handling DISCARD merge:
  600. * If max_discard_segments > 1, the driver takes every bio
  601. * as a range and send them to controller together. The ranges
  602. * needn't to be contiguous.
  603. * Otherwise, the bios/requests will be handled as same as
  604. * others which should be contiguous.
  605. */
  606. static inline bool blk_discard_mergable(struct request *req)
  607. {
  608. if (req_op(req) == REQ_OP_DISCARD &&
  609. queue_max_discard_segments(req->q) > 1)
  610. return true;
  611. return false;
  612. }
  613. enum elv_merge blk_try_req_merge(struct request *req, struct request *next)
  614. {
  615. if (blk_discard_mergable(req))
  616. return ELEVATOR_DISCARD_MERGE;
  617. else if (blk_rq_pos(req) + blk_rq_sectors(req) == blk_rq_pos(next))
  618. return ELEVATOR_BACK_MERGE;
  619. return ELEVATOR_NO_MERGE;
  620. }
  621. /*
  622. * For non-mq, this has to be called with the request spinlock acquired.
  623. * For mq with scheduling, the appropriate queue wide lock should be held.
  624. */
  625. static struct request *attempt_merge(struct request_queue *q,
  626. struct request *req, struct request *next)
  627. {
  628. if (!q->mq_ops)
  629. lockdep_assert_held(q->queue_lock);
  630. if (!rq_mergeable(req) || !rq_mergeable(next))
  631. return NULL;
  632. if (req_op(req) != req_op(next))
  633. return NULL;
  634. if (rq_data_dir(req) != rq_data_dir(next)
  635. || req->rq_disk != next->rq_disk
  636. || req_no_special_merge(next))
  637. return NULL;
  638. if (req_op(req) == REQ_OP_WRITE_SAME &&
  639. !blk_write_same_mergeable(req->bio, next->bio))
  640. return NULL;
  641. /*
  642. * Don't allow merge of different write hints, or for a hint with
  643. * non-hint IO.
  644. */
  645. if (req->write_hint != next->write_hint)
  646. return NULL;
  647. /*
  648. * If we are allowed to merge, then append bio list
  649. * from next to rq and release next. merge_requests_fn
  650. * will have updated segment counts, update sector
  651. * counts here. Handle DISCARDs separately, as they
  652. * have separate settings.
  653. */
  654. switch (blk_try_req_merge(req, next)) {
  655. case ELEVATOR_DISCARD_MERGE:
  656. if (!req_attempt_discard_merge(q, req, next))
  657. return NULL;
  658. break;
  659. case ELEVATOR_BACK_MERGE:
  660. if (!ll_merge_requests_fn(q, req, next))
  661. return NULL;
  662. break;
  663. default:
  664. return NULL;
  665. }
  666. /*
  667. * If failfast settings disagree or any of the two is already
  668. * a mixed merge, mark both as mixed before proceeding. This
  669. * makes sure that all involved bios have mixable attributes
  670. * set properly.
  671. */
  672. if (((req->rq_flags | next->rq_flags) & RQF_MIXED_MERGE) ||
  673. (req->cmd_flags & REQ_FAILFAST_MASK) !=
  674. (next->cmd_flags & REQ_FAILFAST_MASK)) {
  675. blk_rq_set_mixed_merge(req);
  676. blk_rq_set_mixed_merge(next);
  677. }
  678. /*
  679. * At this point we have either done a back merge or front merge. We
  680. * need the smaller start_time_ns of the merged requests to be the
  681. * current request for accounting purposes.
  682. */
  683. if (next->start_time_ns < req->start_time_ns)
  684. req->start_time_ns = next->start_time_ns;
  685. req->biotail->bi_next = next->bio;
  686. req->biotail = next->biotail;
  687. req->__data_len += blk_rq_bytes(next);
  688. if (!blk_discard_mergable(req))
  689. elv_merge_requests(q, req, next);
  690. /*
  691. * 'next' is going away, so update stats accordingly
  692. */
  693. blk_account_io_merge(next);
  694. req->ioprio = ioprio_best(req->ioprio, next->ioprio);
  695. if (blk_rq_cpu_valid(next))
  696. req->cpu = next->cpu;
  697. /*
  698. * ownership of bio passed from next to req, return 'next' for
  699. * the caller to free
  700. */
  701. next->bio = NULL;
  702. return next;
  703. }
  704. struct request *attempt_back_merge(struct request_queue *q, struct request *rq)
  705. {
  706. struct request *next = elv_latter_request(q, rq);
  707. if (next)
  708. return attempt_merge(q, rq, next);
  709. return NULL;
  710. }
  711. struct request *attempt_front_merge(struct request_queue *q, struct request *rq)
  712. {
  713. struct request *prev = elv_former_request(q, rq);
  714. if (prev)
  715. return attempt_merge(q, prev, rq);
  716. return NULL;
  717. }
  718. int blk_attempt_req_merge(struct request_queue *q, struct request *rq,
  719. struct request *next)
  720. {
  721. struct elevator_queue *e = q->elevator;
  722. struct request *free;
  723. if (!e->uses_mq && e->type->ops.sq.elevator_allow_rq_merge_fn)
  724. if (!e->type->ops.sq.elevator_allow_rq_merge_fn(q, rq, next))
  725. return 0;
  726. free = attempt_merge(q, rq, next);
  727. if (free) {
  728. __blk_put_request(q, free);
  729. return 1;
  730. }
  731. return 0;
  732. }
  733. bool blk_rq_merge_ok(struct request *rq, struct bio *bio)
  734. {
  735. if (!rq_mergeable(rq) || !bio_mergeable(bio))
  736. return false;
  737. if (req_op(rq) != bio_op(bio))
  738. return false;
  739. /* different data direction or already started, don't merge */
  740. if (bio_data_dir(bio) != rq_data_dir(rq))
  741. return false;
  742. /* must be same device and not a special request */
  743. if (rq->rq_disk != bio->bi_disk || req_no_special_merge(rq))
  744. return false;
  745. /* only merge integrity protected bio into ditto rq */
  746. if (blk_integrity_merge_bio(rq->q, rq, bio) == false)
  747. return false;
  748. /* must be using the same buffer */
  749. if (req_op(rq) == REQ_OP_WRITE_SAME &&
  750. !blk_write_same_mergeable(rq->bio, bio))
  751. return false;
  752. /*
  753. * Don't allow merge of different write hints, or for a hint with
  754. * non-hint IO.
  755. */
  756. if (rq->write_hint != bio->bi_write_hint)
  757. return false;
  758. return true;
  759. }
  760. enum elv_merge blk_try_merge(struct request *rq, struct bio *bio)
  761. {
  762. if (blk_discard_mergable(rq))
  763. return ELEVATOR_DISCARD_MERGE;
  764. else if (blk_rq_pos(rq) + blk_rq_sectors(rq) == bio->bi_iter.bi_sector)
  765. return ELEVATOR_BACK_MERGE;
  766. else if (blk_rq_pos(rq) - bio_sectors(bio) == bio->bi_iter.bi_sector)
  767. return ELEVATOR_FRONT_MERGE;
  768. return ELEVATOR_NO_MERGE;
  769. }