Loading block/blk-core.c +4 −1 Original line number Diff line number Diff line Loading @@ -1431,6 +1431,9 @@ static struct request *blk_old_get_request(struct request_queue *q, /* q->queue_lock is unlocked at this point */ rq->__data_len = 0; rq->__sector = (sector_t) -1; #ifdef CONFIG_PFK rq->__dun = 0; #endif rq->bio = rq->biotail = NULL; return rq; } Loading Loading @@ -1655,7 +1658,7 @@ bool bio_attempt_front_merge(struct request_queue *q, struct request *req, req->bio = bio; #ifdef CONFIG_PFK WARN_ON(req->__dun || bio->bi_iter.bi_dun); req->__dun = bio->bi_iter.bi_dun; #endif req->__sector = bio->bi_iter.bi_sector; req->__data_len += bio->bi_iter.bi_size; Loading block/blk-merge.c +14 −10 Original line number Diff line number Diff line Loading @@ -505,6 +505,8 @@ int ll_back_merge_fn(struct request_queue *q, struct request *req, if (blk_integrity_rq(req) && integrity_req_gap_back_merge(req, bio)) return 0; if (blk_try_merge(req, bio) != ELEVATOR_BACK_MERGE) return 0; if (blk_rq_sectors(req) + bio_sectors(bio) > blk_rq_get_max_sectors(req, blk_rq_pos(req))) { req_set_nomerge(q, req); Loading @@ -527,6 +529,8 @@ int ll_front_merge_fn(struct request_queue *q, struct request *req, if (blk_integrity_rq(req) && integrity_req_gap_front_merge(req, bio)) return 0; if (blk_try_merge(req, bio) != ELEVATOR_FRONT_MERGE) return 0; if (blk_rq_sectors(req) + bio_sectors(bio) > blk_rq_get_max_sectors(req, bio->bi_iter.bi_sector)) { req_set_nomerge(q, req); Loading Loading @@ -837,24 +841,24 @@ bool blk_rq_merge_ok(struct request *rq, struct bio *bio) if (rq->write_hint != bio->bi_write_hint) return false; if (crypto_not_mergeable(rq->bio, bio)) return false; return true; } enum elv_merge blk_try_merge(struct request *rq, struct bio *bio) { #ifdef CONFIG_PFK if (blk_rq_dun(rq) || bio_dun(bio)) return ELEVATOR_NO_MERGE; #endif if (req_op(rq) == REQ_OP_DISCARD && queue_max_discard_segments(rq->q) > 1) queue_max_discard_segments(rq->q) > 1) { return ELEVATOR_DISCARD_MERGE; else if (blk_rq_pos(rq) + blk_rq_sectors(rq) == bio->bi_iter.bi_sector) } else if (blk_rq_pos(rq) + blk_rq_sectors(rq) == bio->bi_iter.bi_sector) { if (crypto_not_mergeable(rq->bio, bio)) return ELEVATOR_NO_MERGE; return ELEVATOR_BACK_MERGE; else if (blk_rq_pos(rq) - bio_sectors(bio) == bio->bi_iter.bi_sector) } else if (blk_rq_pos(rq) - bio_sectors(bio) == bio->bi_iter.bi_sector) { if (crypto_not_mergeable(bio, rq->bio)) return ELEVATOR_NO_MERGE; return ELEVATOR_FRONT_MERGE; } return ELEVATOR_NO_MERGE; } Loading
block/blk-core.c +4 −1 Original line number Diff line number Diff line Loading @@ -1431,6 +1431,9 @@ static struct request *blk_old_get_request(struct request_queue *q, /* q->queue_lock is unlocked at this point */ rq->__data_len = 0; rq->__sector = (sector_t) -1; #ifdef CONFIG_PFK rq->__dun = 0; #endif rq->bio = rq->biotail = NULL; return rq; } Loading Loading @@ -1655,7 +1658,7 @@ bool bio_attempt_front_merge(struct request_queue *q, struct request *req, req->bio = bio; #ifdef CONFIG_PFK WARN_ON(req->__dun || bio->bi_iter.bi_dun); req->__dun = bio->bi_iter.bi_dun; #endif req->__sector = bio->bi_iter.bi_sector; req->__data_len += bio->bi_iter.bi_size; Loading
block/blk-merge.c +14 −10 Original line number Diff line number Diff line Loading @@ -505,6 +505,8 @@ int ll_back_merge_fn(struct request_queue *q, struct request *req, if (blk_integrity_rq(req) && integrity_req_gap_back_merge(req, bio)) return 0; if (blk_try_merge(req, bio) != ELEVATOR_BACK_MERGE) return 0; if (blk_rq_sectors(req) + bio_sectors(bio) > blk_rq_get_max_sectors(req, blk_rq_pos(req))) { req_set_nomerge(q, req); Loading @@ -527,6 +529,8 @@ int ll_front_merge_fn(struct request_queue *q, struct request *req, if (blk_integrity_rq(req) && integrity_req_gap_front_merge(req, bio)) return 0; if (blk_try_merge(req, bio) != ELEVATOR_FRONT_MERGE) return 0; if (blk_rq_sectors(req) + bio_sectors(bio) > blk_rq_get_max_sectors(req, bio->bi_iter.bi_sector)) { req_set_nomerge(q, req); Loading Loading @@ -837,24 +841,24 @@ bool blk_rq_merge_ok(struct request *rq, struct bio *bio) if (rq->write_hint != bio->bi_write_hint) return false; if (crypto_not_mergeable(rq->bio, bio)) return false; return true; } enum elv_merge blk_try_merge(struct request *rq, struct bio *bio) { #ifdef CONFIG_PFK if (blk_rq_dun(rq) || bio_dun(bio)) return ELEVATOR_NO_MERGE; #endif if (req_op(rq) == REQ_OP_DISCARD && queue_max_discard_segments(rq->q) > 1) queue_max_discard_segments(rq->q) > 1) { return ELEVATOR_DISCARD_MERGE; else if (blk_rq_pos(rq) + blk_rq_sectors(rq) == bio->bi_iter.bi_sector) } else if (blk_rq_pos(rq) + blk_rq_sectors(rq) == bio->bi_iter.bi_sector) { if (crypto_not_mergeable(rq->bio, bio)) return ELEVATOR_NO_MERGE; return ELEVATOR_BACK_MERGE; else if (blk_rq_pos(rq) - bio_sectors(bio) == bio->bi_iter.bi_sector) } else if (blk_rq_pos(rq) - bio_sectors(bio) == bio->bi_iter.bi_sector) { if (crypto_not_mergeable(bio, rq->bio)) return ELEVATOR_NO_MERGE; return ELEVATOR_FRONT_MERGE; } return ELEVATOR_NO_MERGE; }