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