]> asedeno.scripts.mit.edu Git - linux.git/blob - block/blk-merge.c
block: remove the segment size check in bio_will_gap
[linux.git] / block / blk-merge.c
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
11 #include <trace/events/block.h>
12
13 #include "blk.h"
14
15 static inline bool bio_will_gap(struct request_queue *q,
16                 struct request *prev_rq, struct bio *prev, struct bio *next)
17 {
18         struct bio_vec pb, nb;
19
20         if (!bio_has_data(prev) || !queue_virt_boundary(q))
21                 return false;
22
23         /*
24          * Don't merge if the 1st bio starts with non-zero offset, otherwise it
25          * is quite difficult to respect the sg gap limit.  We work hard to
26          * merge a huge number of small single bios in case of mkfs.
27          */
28         if (prev_rq)
29                 bio_get_first_bvec(prev_rq->bio, &pb);
30         else
31                 bio_get_first_bvec(prev, &pb);
32         if (pb.bv_offset & queue_virt_boundary(q))
33                 return true;
34
35         /*
36          * We don't need to worry about the situation that the merged segment
37          * ends in unaligned virt boundary:
38          *
39          * - if 'pb' ends aligned, the merged segment ends aligned
40          * - if 'pb' ends unaligned, the next bio must include
41          *   one single bvec of 'nb', otherwise the 'nb' can't
42          *   merge with 'pb'
43          */
44         bio_get_last_bvec(prev, &pb);
45         bio_get_first_bvec(next, &nb);
46         if (biovec_phys_mergeable(q, &pb, &nb))
47                 return false;
48         return __bvec_gap_to_prev(q, &pb, nb.bv_offset);
49 }
50
51 static inline bool req_gap_back_merge(struct request *req, struct bio *bio)
52 {
53         return bio_will_gap(req->q, req, req->biotail, bio);
54 }
55
56 static inline bool req_gap_front_merge(struct request *req, struct bio *bio)
57 {
58         return bio_will_gap(req->q, NULL, bio, req->bio);
59 }
60
61 static struct bio *blk_bio_discard_split(struct request_queue *q,
62                                          struct bio *bio,
63                                          struct bio_set *bs,
64                                          unsigned *nsegs)
65 {
66         unsigned int max_discard_sectors, granularity;
67         int alignment;
68         sector_t tmp;
69         unsigned split_sectors;
70
71         *nsegs = 1;
72
73         /* Zero-sector (unknown) and one-sector granularities are the same.  */
74         granularity = max(q->limits.discard_granularity >> 9, 1U);
75
76         max_discard_sectors = min(q->limits.max_discard_sectors,
77                         bio_allowed_max_sectors(q));
78         max_discard_sectors -= max_discard_sectors % granularity;
79
80         if (unlikely(!max_discard_sectors)) {
81                 /* XXX: warn */
82                 return NULL;
83         }
84
85         if (bio_sectors(bio) <= max_discard_sectors)
86                 return NULL;
87
88         split_sectors = max_discard_sectors;
89
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
96         tmp = bio->bi_iter.bi_sector + split_sectors - alignment;
97         tmp = sector_div(tmp, granularity);
98
99         if (split_sectors > tmp)
100                 split_sectors -= tmp;
101
102         return bio_split(bio, split_sectors, GFP_NOIO, bs);
103 }
104
105 static struct bio *blk_bio_write_zeroes_split(struct request_queue *q,
106                 struct bio *bio, struct bio_set *bs, unsigned *nsegs)
107 {
108         *nsegs = 1;
109
110         if (!q->limits.max_write_zeroes_sectors)
111                 return NULL;
112
113         if (bio_sectors(bio) <= q->limits.max_write_zeroes_sectors)
114                 return NULL;
115
116         return bio_split(bio, q->limits.max_write_zeroes_sectors, GFP_NOIO, bs);
117 }
118
119 static struct bio *blk_bio_write_same_split(struct request_queue *q,
120                                             struct bio *bio,
121                                             struct bio_set *bs,
122                                             unsigned *nsegs)
123 {
124         *nsegs = 1;
125
126         if (!q->limits.max_write_same_sectors)
127                 return NULL;
128
129         if (bio_sectors(bio) <= q->limits.max_write_same_sectors)
130                 return NULL;
131
132         return bio_split(bio, q->limits.max_write_same_sectors, GFP_NOIO, bs);
133 }
134
135 static inline unsigned get_max_io_size(struct request_queue *q,
136                                        struct bio *bio)
137 {
138         unsigned sectors = blk_max_size_offset(q, bio->bi_iter.bi_sector);
139         unsigned mask = queue_logical_block_size(q) - 1;
140
141         /* aligned to logical block size */
142         sectors &= ~(mask >> 9);
143
144         return sectors;
145 }
146
147 static unsigned get_max_segment_size(struct request_queue *q,
148                                      unsigned offset)
149 {
150         unsigned long mask = queue_segment_boundary(q);
151
152         /* default segment boundary mask means no boundary limit */
153         if (mask == BLK_SEG_BOUNDARY_MASK)
154                 return queue_max_segment_size(q);
155
156         return min_t(unsigned long, mask - (mask & offset) + 1,
157                      queue_max_segment_size(q));
158 }
159
160 /*
161  * Split the bvec @bv into segments, and update all kinds of
162  * variables.
163  */
164 static bool bvec_split_segs(struct request_queue *q, struct bio_vec *bv,
165                 unsigned *nsegs, unsigned *last_seg_size,
166                 unsigned *front_seg_size, unsigned *sectors, unsigned max_segs)
167 {
168         unsigned len = bv->bv_len;
169         unsigned total_len = 0;
170         unsigned new_nsegs = 0, seg_size = 0;
171
172         /*
173          * Multi-page bvec may be too big to hold in one segment, so the
174          * current bvec has to be splitted as multiple segments.
175          */
176         while (len && new_nsegs + *nsegs < max_segs) {
177                 seg_size = get_max_segment_size(q, bv->bv_offset + total_len);
178                 seg_size = min(seg_size, len);
179
180                 new_nsegs++;
181                 total_len += seg_size;
182                 len -= seg_size;
183
184                 if ((bv->bv_offset + total_len) & queue_virt_boundary(q))
185                         break;
186         }
187
188         if (!new_nsegs)
189                 return !!len;
190
191         /* update front segment size */
192         if (!*nsegs) {
193                 unsigned first_seg_size;
194
195                 if (new_nsegs == 1)
196                         first_seg_size = get_max_segment_size(q, bv->bv_offset);
197                 else
198                         first_seg_size = queue_max_segment_size(q);
199
200                 if (*front_seg_size < first_seg_size)
201                         *front_seg_size = first_seg_size;
202         }
203
204         /* update other varibles */
205         *last_seg_size = seg_size;
206         *nsegs += new_nsegs;
207         if (sectors)
208                 *sectors += total_len >> 9;
209
210         /* split in the middle of the bvec if len != 0 */
211         return !!len;
212 }
213
214 static struct bio *blk_bio_segment_split(struct request_queue *q,
215                                          struct bio *bio,
216                                          struct bio_set *bs,
217                                          unsigned *segs)
218 {
219         struct bio_vec bv, bvprv, *bvprvp = NULL;
220         struct bvec_iter iter;
221         unsigned seg_size = 0, nsegs = 0, sectors = 0;
222         unsigned front_seg_size = bio->bi_seg_front_size;
223         bool do_split = true;
224         struct bio *new = NULL;
225         const unsigned max_sectors = get_max_io_size(q, bio);
226         const unsigned max_segs = queue_max_segments(q);
227
228         bio_for_each_bvec(bv, bio, iter) {
229                 /*
230                  * If the queue doesn't support SG gaps and adding this
231                  * offset would create a gap, disallow it.
232                  */
233                 if (bvprvp && bvec_gap_to_prev(q, bvprvp, bv.bv_offset))
234                         goto split;
235
236                 if (sectors + (bv.bv_len >> 9) > max_sectors) {
237                         /*
238                          * Consider this a new segment if we're splitting in
239                          * the middle of this vector.
240                          */
241                         if (nsegs < max_segs &&
242                             sectors < max_sectors) {
243                                 /* split in the middle of bvec */
244                                 bv.bv_len = (max_sectors - sectors) << 9;
245                                 bvec_split_segs(q, &bv, &nsegs,
246                                                 &seg_size,
247                                                 &front_seg_size,
248                                                 &sectors, max_segs);
249                         }
250                         goto split;
251                 }
252
253                 if (nsegs == max_segs)
254                         goto split;
255
256                 bvprv = bv;
257                 bvprvp = &bvprv;
258
259                 if (bv.bv_offset + bv.bv_len <= PAGE_SIZE) {
260                         nsegs++;
261                         seg_size = bv.bv_len;
262                         sectors += bv.bv_len >> 9;
263                         if (nsegs == 1 && seg_size > front_seg_size)
264                                 front_seg_size = seg_size;
265                 } else if (bvec_split_segs(q, &bv, &nsegs, &seg_size,
266                                     &front_seg_size, &sectors, max_segs)) {
267                         goto split;
268                 }
269         }
270
271         do_split = false;
272 split:
273         *segs = nsegs;
274
275         if (do_split) {
276                 new = bio_split(bio, sectors, GFP_NOIO, bs);
277                 if (new)
278                         bio = new;
279         }
280
281         bio->bi_seg_front_size = front_seg_size;
282         if (seg_size > bio->bi_seg_back_size)
283                 bio->bi_seg_back_size = seg_size;
284
285         return do_split ? new : NULL;
286 }
287
288 void blk_queue_split(struct request_queue *q, struct bio **bio)
289 {
290         struct bio *split, *res;
291         unsigned nsegs;
292
293         switch (bio_op(*bio)) {
294         case REQ_OP_DISCARD:
295         case REQ_OP_SECURE_ERASE:
296                 split = blk_bio_discard_split(q, *bio, &q->bio_split, &nsegs);
297                 break;
298         case REQ_OP_WRITE_ZEROES:
299                 split = blk_bio_write_zeroes_split(q, *bio, &q->bio_split, &nsegs);
300                 break;
301         case REQ_OP_WRITE_SAME:
302                 split = blk_bio_write_same_split(q, *bio, &q->bio_split, &nsegs);
303                 break;
304         default:
305                 split = blk_bio_segment_split(q, *bio, &q->bio_split, &nsegs);
306                 break;
307         }
308
309         /* physical segments can be figured out during splitting */
310         res = split ? split : *bio;
311         res->bi_phys_segments = nsegs;
312         bio_set_flag(res, BIO_SEG_VALID);
313
314         if (split) {
315                 /* there isn't chance to merge the splitted bio */
316                 split->bi_opf |= REQ_NOMERGE;
317
318                 /*
319                  * Since we're recursing into make_request here, ensure
320                  * that we mark this bio as already having entered the queue.
321                  * If not, and the queue is going away, we can get stuck
322                  * forever on waiting for the queue reference to drop. But
323                  * that will never happen, as we're already holding a
324                  * reference to it.
325                  */
326                 bio_set_flag(*bio, BIO_QUEUE_ENTERED);
327
328                 bio_chain(split, *bio);
329                 trace_block_split(q, split, (*bio)->bi_iter.bi_sector);
330                 generic_make_request(*bio);
331                 *bio = split;
332         }
333 }
334 EXPORT_SYMBOL(blk_queue_split);
335
336 static unsigned int __blk_recalc_rq_segments(struct request_queue *q,
337                                              struct bio *bio)
338 {
339         struct bio_vec uninitialized_var(bv), bvprv = { NULL };
340         unsigned int seg_size, nr_phys_segs;
341         unsigned front_seg_size;
342         struct bio *fbio, *bbio;
343         struct bvec_iter iter;
344
345         if (!bio)
346                 return 0;
347
348         front_seg_size = bio->bi_seg_front_size;
349
350         switch (bio_op(bio)) {
351         case REQ_OP_DISCARD:
352         case REQ_OP_SECURE_ERASE:
353         case REQ_OP_WRITE_ZEROES:
354                 return 0;
355         case REQ_OP_WRITE_SAME:
356                 return 1;
357         }
358
359         fbio = bio;
360         seg_size = 0;
361         nr_phys_segs = 0;
362         for_each_bio(bio) {
363                 bio_for_each_bvec(bv, bio, iter) {
364                         bvec_split_segs(q, &bv, &nr_phys_segs, &seg_size,
365                                         &front_seg_size, NULL, UINT_MAX);
366                 }
367                 bbio = bio;
368                 if (likely(bio->bi_iter.bi_size))
369                         bvprv = bv;
370         }
371
372         fbio->bi_seg_front_size = front_seg_size;
373         if (seg_size > bbio->bi_seg_back_size)
374                 bbio->bi_seg_back_size = seg_size;
375
376         return nr_phys_segs;
377 }
378
379 void blk_recalc_rq_segments(struct request *rq)
380 {
381         rq->nr_phys_segments = __blk_recalc_rq_segments(rq->q, rq->bio);
382 }
383
384 void blk_recount_segments(struct request_queue *q, struct bio *bio)
385 {
386         struct bio *nxt = bio->bi_next;
387
388         bio->bi_next = NULL;
389         bio->bi_phys_segments = __blk_recalc_rq_segments(q, bio);
390         bio->bi_next = nxt;
391
392         bio_set_flag(bio, BIO_SEG_VALID);
393 }
394
395 static int blk_phys_contig_segment(struct request_queue *q, struct bio *bio,
396                                    struct bio *nxt)
397 {
398         struct bio_vec end_bv = { NULL }, nxt_bv;
399
400         if (bio->bi_seg_back_size + nxt->bi_seg_front_size >
401             queue_max_segment_size(q))
402                 return 0;
403
404         if (!bio_has_data(bio))
405                 return 1;
406
407         bio_get_last_bvec(bio, &end_bv);
408         bio_get_first_bvec(nxt, &nxt_bv);
409
410         return biovec_phys_mergeable(q, &end_bv, &nxt_bv);
411 }
412
413 static inline struct scatterlist *blk_next_sg(struct scatterlist **sg,
414                 struct scatterlist *sglist)
415 {
416         if (!*sg)
417                 return sglist;
418
419         /*
420          * If the driver previously mapped a shorter list, we could see a
421          * termination bit prematurely unless it fully inits the sg table
422          * on each mapping. We KNOW that there must be more entries here
423          * or the driver would be buggy, so force clear the termination bit
424          * to avoid doing a full sg_init_table() in drivers for each command.
425          */
426         sg_unmark_end(*sg);
427         return sg_next(*sg);
428 }
429
430 static unsigned blk_bvec_map_sg(struct request_queue *q,
431                 struct bio_vec *bvec, struct scatterlist *sglist,
432                 struct scatterlist **sg)
433 {
434         unsigned nbytes = bvec->bv_len;
435         unsigned nsegs = 0, total = 0;
436
437         while (nbytes > 0) {
438                 unsigned offset = bvec->bv_offset + total;
439                 unsigned len = min(get_max_segment_size(q, offset), nbytes);
440                 struct page *page = bvec->bv_page;
441
442                 /*
443                  * Unfortunately a fair number of drivers barf on scatterlists
444                  * that have an offset larger than PAGE_SIZE, despite other
445                  * subsystems dealing with that invariant just fine.  For now
446                  * stick to the legacy format where we never present those from
447                  * the block layer, but the code below should be removed once
448                  * these offenders (mostly MMC/SD drivers) are fixed.
449                  */
450                 page += (offset >> PAGE_SHIFT);
451                 offset &= ~PAGE_MASK;
452
453                 *sg = blk_next_sg(sg, sglist);
454                 sg_set_page(*sg, page, len, offset);
455
456                 total += len;
457                 nbytes -= len;
458                 nsegs++;
459         }
460
461         return nsegs;
462 }
463
464 static inline int __blk_bvec_map_sg(struct bio_vec bv,
465                 struct scatterlist *sglist, struct scatterlist **sg)
466 {
467         *sg = blk_next_sg(sg, sglist);
468         sg_set_page(*sg, bv.bv_page, bv.bv_len, bv.bv_offset);
469         return 1;
470 }
471
472 /* only try to merge bvecs into one sg if they are from two bios */
473 static inline bool
474 __blk_segment_map_sg_merge(struct request_queue *q, struct bio_vec *bvec,
475                            struct bio_vec *bvprv, struct scatterlist **sg)
476 {
477
478         int nbytes = bvec->bv_len;
479
480         if (!*sg)
481                 return false;
482
483         if ((*sg)->length + nbytes > queue_max_segment_size(q))
484                 return false;
485
486         if (!biovec_phys_mergeable(q, bvprv, bvec))
487                 return false;
488
489         (*sg)->length += nbytes;
490
491         return true;
492 }
493
494 static int __blk_bios_map_sg(struct request_queue *q, struct bio *bio,
495                              struct scatterlist *sglist,
496                              struct scatterlist **sg)
497 {
498         struct bio_vec uninitialized_var(bvec), bvprv = { NULL };
499         struct bvec_iter iter;
500         int nsegs = 0;
501         bool new_bio = false;
502
503         for_each_bio(bio) {
504                 bio_for_each_bvec(bvec, bio, iter) {
505                         /*
506                          * Only try to merge bvecs from two bios given we
507                          * have done bio internal merge when adding pages
508                          * to bio
509                          */
510                         if (new_bio &&
511                             __blk_segment_map_sg_merge(q, &bvec, &bvprv, sg))
512                                 goto next_bvec;
513
514                         if (bvec.bv_offset + bvec.bv_len <= PAGE_SIZE)
515                                 nsegs += __blk_bvec_map_sg(bvec, sglist, sg);
516                         else
517                                 nsegs += blk_bvec_map_sg(q, &bvec, sglist, sg);
518  next_bvec:
519                         new_bio = false;
520                 }
521                 if (likely(bio->bi_iter.bi_size)) {
522                         bvprv = bvec;
523                         new_bio = true;
524                 }
525         }
526
527         return nsegs;
528 }
529
530 /*
531  * map a request to scatterlist, return number of sg entries setup. Caller
532  * must make sure sg can hold rq->nr_phys_segments entries
533  */
534 int blk_rq_map_sg(struct request_queue *q, struct request *rq,
535                   struct scatterlist *sglist)
536 {
537         struct scatterlist *sg = NULL;
538         int nsegs = 0;
539
540         if (rq->rq_flags & RQF_SPECIAL_PAYLOAD)
541                 nsegs = __blk_bvec_map_sg(rq->special_vec, sglist, &sg);
542         else if (rq->bio && bio_op(rq->bio) == REQ_OP_WRITE_SAME)
543                 nsegs = __blk_bvec_map_sg(bio_iovec(rq->bio), sglist, &sg);
544         else if (rq->bio)
545                 nsegs = __blk_bios_map_sg(q, rq->bio, sglist, &sg);
546
547         if (unlikely(rq->rq_flags & RQF_COPY_USER) &&
548             (blk_rq_bytes(rq) & q->dma_pad_mask)) {
549                 unsigned int pad_len =
550                         (q->dma_pad_mask & ~blk_rq_bytes(rq)) + 1;
551
552                 sg->length += pad_len;
553                 rq->extra_len += pad_len;
554         }
555
556         if (q->dma_drain_size && q->dma_drain_needed(rq)) {
557                 if (op_is_write(req_op(rq)))
558                         memset(q->dma_drain_buffer, 0, q->dma_drain_size);
559
560                 sg_unmark_end(sg);
561                 sg = sg_next(sg);
562                 sg_set_page(sg, virt_to_page(q->dma_drain_buffer),
563                             q->dma_drain_size,
564                             ((unsigned long)q->dma_drain_buffer) &
565                             (PAGE_SIZE - 1));
566                 nsegs++;
567                 rq->extra_len += q->dma_drain_size;
568         }
569
570         if (sg)
571                 sg_mark_end(sg);
572
573         /*
574          * Something must have been wrong if the figured number of
575          * segment is bigger than number of req's physical segments
576          */
577         WARN_ON(nsegs > blk_rq_nr_phys_segments(rq));
578
579         return nsegs;
580 }
581 EXPORT_SYMBOL(blk_rq_map_sg);
582
583 static inline int ll_new_hw_segment(struct request_queue *q,
584                                     struct request *req,
585                                     struct bio *bio)
586 {
587         int nr_phys_segs = bio_phys_segments(q, bio);
588
589         if (req->nr_phys_segments + nr_phys_segs > queue_max_segments(q))
590                 goto no_merge;
591
592         if (blk_integrity_merge_bio(q, req, bio) == false)
593                 goto no_merge;
594
595         /*
596          * This will form the start of a new hw segment.  Bump both
597          * counters.
598          */
599         req->nr_phys_segments += nr_phys_segs;
600         return 1;
601
602 no_merge:
603         req_set_nomerge(q, req);
604         return 0;
605 }
606
607 int ll_back_merge_fn(struct request_queue *q, struct request *req,
608                      struct bio *bio)
609 {
610         if (req_gap_back_merge(req, bio))
611                 return 0;
612         if (blk_integrity_rq(req) &&
613             integrity_req_gap_back_merge(req, bio))
614                 return 0;
615         if (blk_rq_sectors(req) + bio_sectors(bio) >
616             blk_rq_get_max_sectors(req, blk_rq_pos(req))) {
617                 req_set_nomerge(q, req);
618                 return 0;
619         }
620         if (!bio_flagged(req->biotail, BIO_SEG_VALID))
621                 blk_recount_segments(q, req->biotail);
622         if (!bio_flagged(bio, BIO_SEG_VALID))
623                 blk_recount_segments(q, bio);
624
625         return ll_new_hw_segment(q, req, bio);
626 }
627
628 int ll_front_merge_fn(struct request_queue *q, struct request *req,
629                       struct bio *bio)
630 {
631
632         if (req_gap_front_merge(req, bio))
633                 return 0;
634         if (blk_integrity_rq(req) &&
635             integrity_req_gap_front_merge(req, bio))
636                 return 0;
637         if (blk_rq_sectors(req) + bio_sectors(bio) >
638             blk_rq_get_max_sectors(req, bio->bi_iter.bi_sector)) {
639                 req_set_nomerge(q, req);
640                 return 0;
641         }
642         if (!bio_flagged(bio, BIO_SEG_VALID))
643                 blk_recount_segments(q, bio);
644         if (!bio_flagged(req->bio, BIO_SEG_VALID))
645                 blk_recount_segments(q, req->bio);
646
647         return ll_new_hw_segment(q, req, bio);
648 }
649
650 static bool req_attempt_discard_merge(struct request_queue *q, struct request *req,
651                 struct request *next)
652 {
653         unsigned short segments = blk_rq_nr_discard_segments(req);
654
655         if (segments >= queue_max_discard_segments(q))
656                 goto no_merge;
657         if (blk_rq_sectors(req) + bio_sectors(next->bio) >
658             blk_rq_get_max_sectors(req, blk_rq_pos(req)))
659                 goto no_merge;
660
661         req->nr_phys_segments = segments + blk_rq_nr_discard_segments(next);
662         return true;
663 no_merge:
664         req_set_nomerge(q, req);
665         return false;
666 }
667
668 static int ll_merge_requests_fn(struct request_queue *q, struct request *req,
669                                 struct request *next)
670 {
671         int total_phys_segments;
672         unsigned int seg_size =
673                 req->biotail->bi_seg_back_size + next->bio->bi_seg_front_size;
674
675         if (req_gap_back_merge(req, next->bio))
676                 return 0;
677
678         /*
679          * Will it become too large?
680          */
681         if ((blk_rq_sectors(req) + blk_rq_sectors(next)) >
682             blk_rq_get_max_sectors(req, blk_rq_pos(req)))
683                 return 0;
684
685         total_phys_segments = req->nr_phys_segments + next->nr_phys_segments;
686         if (blk_phys_contig_segment(q, req->biotail, next->bio)) {
687                 if (req->nr_phys_segments == 1)
688                         req->bio->bi_seg_front_size = seg_size;
689                 if (next->nr_phys_segments == 1)
690                         next->biotail->bi_seg_back_size = seg_size;
691         }
692
693         if (total_phys_segments > queue_max_segments(q))
694                 return 0;
695
696         if (blk_integrity_merge_rq(q, req, next) == false)
697                 return 0;
698
699         /* Merge is OK... */
700         req->nr_phys_segments = total_phys_segments;
701         return 1;
702 }
703
704 /**
705  * blk_rq_set_mixed_merge - mark a request as mixed merge
706  * @rq: request to mark as mixed merge
707  *
708  * Description:
709  *     @rq is about to be mixed merged.  Make sure the attributes
710  *     which can be mixed are set in each bio and mark @rq as mixed
711  *     merged.
712  */
713 void blk_rq_set_mixed_merge(struct request *rq)
714 {
715         unsigned int ff = rq->cmd_flags & REQ_FAILFAST_MASK;
716         struct bio *bio;
717
718         if (rq->rq_flags & RQF_MIXED_MERGE)
719                 return;
720
721         /*
722          * @rq will no longer represent mixable attributes for all the
723          * contained bios.  It will just track those of the first one.
724          * Distributes the attributs to each bio.
725          */
726         for (bio = rq->bio; bio; bio = bio->bi_next) {
727                 WARN_ON_ONCE((bio->bi_opf & REQ_FAILFAST_MASK) &&
728                              (bio->bi_opf & REQ_FAILFAST_MASK) != ff);
729                 bio->bi_opf |= ff;
730         }
731         rq->rq_flags |= RQF_MIXED_MERGE;
732 }
733
734 static void blk_account_io_merge(struct request *req)
735 {
736         if (blk_do_io_stat(req)) {
737                 struct hd_struct *part;
738
739                 part_stat_lock();
740                 part = req->part;
741
742                 part_dec_in_flight(req->q, part, rq_data_dir(req));
743
744                 hd_struct_put(part);
745                 part_stat_unlock();
746         }
747 }
748 /*
749  * Two cases of handling DISCARD merge:
750  * If max_discard_segments > 1, the driver takes every bio
751  * as a range and send them to controller together. The ranges
752  * needn't to be contiguous.
753  * Otherwise, the bios/requests will be handled as same as
754  * others which should be contiguous.
755  */
756 static inline bool blk_discard_mergable(struct request *req)
757 {
758         if (req_op(req) == REQ_OP_DISCARD &&
759             queue_max_discard_segments(req->q) > 1)
760                 return true;
761         return false;
762 }
763
764 static enum elv_merge blk_try_req_merge(struct request *req,
765                                         struct request *next)
766 {
767         if (blk_discard_mergable(req))
768                 return ELEVATOR_DISCARD_MERGE;
769         else if (blk_rq_pos(req) + blk_rq_sectors(req) == blk_rq_pos(next))
770                 return ELEVATOR_BACK_MERGE;
771
772         return ELEVATOR_NO_MERGE;
773 }
774
775 /*
776  * For non-mq, this has to be called with the request spinlock acquired.
777  * For mq with scheduling, the appropriate queue wide lock should be held.
778  */
779 static struct request *attempt_merge(struct request_queue *q,
780                                      struct request *req, struct request *next)
781 {
782         if (!rq_mergeable(req) || !rq_mergeable(next))
783                 return NULL;
784
785         if (req_op(req) != req_op(next))
786                 return NULL;
787
788         if (rq_data_dir(req) != rq_data_dir(next)
789             || req->rq_disk != next->rq_disk)
790                 return NULL;
791
792         if (req_op(req) == REQ_OP_WRITE_SAME &&
793             !blk_write_same_mergeable(req->bio, next->bio))
794                 return NULL;
795
796         /*
797          * Don't allow merge of different write hints, or for a hint with
798          * non-hint IO.
799          */
800         if (req->write_hint != next->write_hint)
801                 return NULL;
802
803         if (req->ioprio != next->ioprio)
804                 return NULL;
805
806         /*
807          * If we are allowed to merge, then append bio list
808          * from next to rq and release next. merge_requests_fn
809          * will have updated segment counts, update sector
810          * counts here. Handle DISCARDs separately, as they
811          * have separate settings.
812          */
813
814         switch (blk_try_req_merge(req, next)) {
815         case ELEVATOR_DISCARD_MERGE:
816                 if (!req_attempt_discard_merge(q, req, next))
817                         return NULL;
818                 break;
819         case ELEVATOR_BACK_MERGE:
820                 if (!ll_merge_requests_fn(q, req, next))
821                         return NULL;
822                 break;
823         default:
824                 return NULL;
825         }
826
827         /*
828          * If failfast settings disagree or any of the two is already
829          * a mixed merge, mark both as mixed before proceeding.  This
830          * makes sure that all involved bios have mixable attributes
831          * set properly.
832          */
833         if (((req->rq_flags | next->rq_flags) & RQF_MIXED_MERGE) ||
834             (req->cmd_flags & REQ_FAILFAST_MASK) !=
835             (next->cmd_flags & REQ_FAILFAST_MASK)) {
836                 blk_rq_set_mixed_merge(req);
837                 blk_rq_set_mixed_merge(next);
838         }
839
840         /*
841          * At this point we have either done a back merge or front merge. We
842          * need the smaller start_time_ns of the merged requests to be the
843          * current request for accounting purposes.
844          */
845         if (next->start_time_ns < req->start_time_ns)
846                 req->start_time_ns = next->start_time_ns;
847
848         req->biotail->bi_next = next->bio;
849         req->biotail = next->biotail;
850
851         req->__data_len += blk_rq_bytes(next);
852
853         if (!blk_discard_mergable(req))
854                 elv_merge_requests(q, req, next);
855
856         /*
857          * 'next' is going away, so update stats accordingly
858          */
859         blk_account_io_merge(next);
860
861         /*
862          * ownership of bio passed from next to req, return 'next' for
863          * the caller to free
864          */
865         next->bio = NULL;
866         return next;
867 }
868
869 struct request *attempt_back_merge(struct request_queue *q, struct request *rq)
870 {
871         struct request *next = elv_latter_request(q, rq);
872
873         if (next)
874                 return attempt_merge(q, rq, next);
875
876         return NULL;
877 }
878
879 struct request *attempt_front_merge(struct request_queue *q, struct request *rq)
880 {
881         struct request *prev = elv_former_request(q, rq);
882
883         if (prev)
884                 return attempt_merge(q, prev, rq);
885
886         return NULL;
887 }
888
889 int blk_attempt_req_merge(struct request_queue *q, struct request *rq,
890                           struct request *next)
891 {
892         struct request *free;
893
894         free = attempt_merge(q, rq, next);
895         if (free) {
896                 blk_put_request(free);
897                 return 1;
898         }
899
900         return 0;
901 }
902
903 bool blk_rq_merge_ok(struct request *rq, struct bio *bio)
904 {
905         if (!rq_mergeable(rq) || !bio_mergeable(bio))
906                 return false;
907
908         if (req_op(rq) != bio_op(bio))
909                 return false;
910
911         /* different data direction or already started, don't merge */
912         if (bio_data_dir(bio) != rq_data_dir(rq))
913                 return false;
914
915         /* must be same device */
916         if (rq->rq_disk != bio->bi_disk)
917                 return false;
918
919         /* only merge integrity protected bio into ditto rq */
920         if (blk_integrity_merge_bio(rq->q, rq, bio) == false)
921                 return false;
922
923         /* must be using the same buffer */
924         if (req_op(rq) == REQ_OP_WRITE_SAME &&
925             !blk_write_same_mergeable(rq->bio, bio))
926                 return false;
927
928         /*
929          * Don't allow merge of different write hints, or for a hint with
930          * non-hint IO.
931          */
932         if (rq->write_hint != bio->bi_write_hint)
933                 return false;
934
935         if (rq->ioprio != bio_prio(bio))
936                 return false;
937
938         return true;
939 }
940
941 enum elv_merge blk_try_merge(struct request *rq, struct bio *bio)
942 {
943         if (blk_discard_mergable(rq))
944                 return ELEVATOR_DISCARD_MERGE;
945         else if (blk_rq_pos(rq) + blk_rq_sectors(rq) == bio->bi_iter.bi_sector)
946                 return ELEVATOR_BACK_MERGE;
947         else if (blk_rq_pos(rq) - bio_sectors(bio) == bio->bi_iter.bi_sector)
948                 return ELEVATOR_FRONT_MERGE;
949         return ELEVATOR_NO_MERGE;
950 }