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