Lines Matching refs:req
287 struct request *req, in ll_new_hw_segment() argument
292 if (req->nr_phys_segments + nr_phys_segs > queue_max_segments(q)) in ll_new_hw_segment()
295 if (blk_integrity_merge_bio(q, req, bio) == false) in ll_new_hw_segment()
302 req->nr_phys_segments += nr_phys_segs; in ll_new_hw_segment()
306 req->cmd_flags |= REQ_NOMERGE; in ll_new_hw_segment()
307 if (req == q->last_merge) in ll_new_hw_segment()
312 int ll_back_merge_fn(struct request_queue *q, struct request *req, in ll_back_merge_fn() argument
315 if (blk_rq_sectors(req) + bio_sectors(bio) > in ll_back_merge_fn()
316 blk_rq_get_max_sectors(req)) { in ll_back_merge_fn()
317 req->cmd_flags |= REQ_NOMERGE; in ll_back_merge_fn()
318 if (req == q->last_merge) in ll_back_merge_fn()
322 if (!bio_flagged(req->biotail, BIO_SEG_VALID)) in ll_back_merge_fn()
323 blk_recount_segments(q, req->biotail); in ll_back_merge_fn()
327 return ll_new_hw_segment(q, req, bio); in ll_back_merge_fn()
330 int ll_front_merge_fn(struct request_queue *q, struct request *req, in ll_front_merge_fn() argument
333 if (blk_rq_sectors(req) + bio_sectors(bio) > in ll_front_merge_fn()
334 blk_rq_get_max_sectors(req)) { in ll_front_merge_fn()
335 req->cmd_flags |= REQ_NOMERGE; in ll_front_merge_fn()
336 if (req == q->last_merge) in ll_front_merge_fn()
342 if (!bio_flagged(req->bio, BIO_SEG_VALID)) in ll_front_merge_fn()
343 blk_recount_segments(q, req->bio); in ll_front_merge_fn()
345 return ll_new_hw_segment(q, req, bio); in ll_front_merge_fn()
352 static bool req_no_special_merge(struct request *req) in req_no_special_merge() argument
354 struct request_queue *q = req->q; in req_no_special_merge()
356 return !q->mq_ops && req->special; in req_no_special_merge()
359 static int req_gap_to_prev(struct request *req, struct request *next) in req_gap_to_prev() argument
361 struct bio *prev = req->biotail; in req_gap_to_prev()
367 static int ll_merge_requests_fn(struct request_queue *q, struct request *req, in ll_merge_requests_fn() argument
372 req->biotail->bi_seg_back_size + next->bio->bi_seg_front_size; in ll_merge_requests_fn()
378 if (req_no_special_merge(req) || req_no_special_merge(next)) in ll_merge_requests_fn()
382 req_gap_to_prev(req, next)) in ll_merge_requests_fn()
388 if ((blk_rq_sectors(req) + blk_rq_sectors(next)) > in ll_merge_requests_fn()
389 blk_rq_get_max_sectors(req)) in ll_merge_requests_fn()
392 total_phys_segments = req->nr_phys_segments + next->nr_phys_segments; in ll_merge_requests_fn()
393 if (blk_phys_contig_segment(q, req->biotail, next->bio)) { in ll_merge_requests_fn()
394 if (req->nr_phys_segments == 1) in ll_merge_requests_fn()
395 req->bio->bi_seg_front_size = seg_size; in ll_merge_requests_fn()
404 if (blk_integrity_merge_rq(q, req, next) == false) in ll_merge_requests_fn()
408 req->nr_phys_segments = total_phys_segments; in ll_merge_requests_fn()
442 static void blk_account_io_merge(struct request *req) in blk_account_io_merge() argument
444 if (blk_do_io_stat(req)) { in blk_account_io_merge()
449 part = req->part; in blk_account_io_merge()
452 part_dec_in_flight(part, rq_data_dir(req)); in blk_account_io_merge()
462 static int attempt_merge(struct request_queue *q, struct request *req, in attempt_merge() argument
465 if (!rq_mergeable(req) || !rq_mergeable(next)) in attempt_merge()
468 if (!blk_check_merge_flags(req->cmd_flags, next->cmd_flags)) in attempt_merge()
474 if (blk_rq_pos(req) + blk_rq_sectors(req) != blk_rq_pos(next)) in attempt_merge()
477 if (rq_data_dir(req) != rq_data_dir(next) in attempt_merge()
478 || req->rq_disk != next->rq_disk in attempt_merge()
482 if (req->cmd_flags & REQ_WRITE_SAME && in attempt_merge()
483 !blk_write_same_mergeable(req->bio, next->bio)) in attempt_merge()
492 if (!ll_merge_requests_fn(q, req, next)) in attempt_merge()
501 if ((req->cmd_flags | next->cmd_flags) & REQ_MIXED_MERGE || in attempt_merge()
502 (req->cmd_flags & REQ_FAILFAST_MASK) != in attempt_merge()
504 blk_rq_set_mixed_merge(req); in attempt_merge()
514 if (time_after(req->start_time, next->start_time)) in attempt_merge()
515 req->start_time = next->start_time; in attempt_merge()
517 req->biotail->bi_next = next->bio; in attempt_merge()
518 req->biotail = next->biotail; in attempt_merge()
520 req->__data_len += blk_rq_bytes(next); in attempt_merge()
522 elv_merge_requests(q, req, next); in attempt_merge()
529 req->ioprio = ioprio_best(req->ioprio, next->ioprio); in attempt_merge()
531 req->cpu = next->cpu; in attempt_merge()