block: move blk_mq_sched_try_merge to blk-merge.c
authorChristoph Hellwig <hch@lst.de>
Tue, 6 Oct 2020 07:07:19 +0000 (09:07 +0200)
committerJens Axboe <axboe@kernel.dk>
Tue, 6 Oct 2020 13:29:53 +0000 (07:29 -0600)
Move blk_mq_sched_try_merge to blk-merge.c, which allows to mark
a lot of the merge infrastructure static there.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/blk-merge.c
block/blk-mq-sched.c
block/blk.h

index 6ed7158..bcf5e45 100644 (file)
@@ -580,7 +580,8 @@ int ll_back_merge_fn(struct request *req, struct bio *bio, unsigned int nr_segs)
        return ll_new_hw_segment(req, bio, nr_segs);
 }
 
-int ll_front_merge_fn(struct request *req, struct bio *bio, unsigned int nr_segs)
+static int ll_front_merge_fn(struct request *req, struct bio *bio,
+               unsigned int nr_segs)
 {
        if (req_gap_front_merge(req, bio))
                return 0;
@@ -810,7 +811,8 @@ static struct request *attempt_merge(struct request_queue *q,
        return next;
 }
 
-struct request *attempt_back_merge(struct request_queue *q, struct request *rq)
+static struct request *attempt_back_merge(struct request_queue *q,
+               struct request *rq)
 {
        struct request *next = elv_latter_request(q, rq);
 
@@ -820,7 +822,8 @@ struct request *attempt_back_merge(struct request_queue *q, struct request *rq)
        return NULL;
 }
 
-struct request *attempt_front_merge(struct request_queue *q, struct request *rq)
+static struct request *attempt_front_merge(struct request_queue *q,
+               struct request *rq)
 {
        struct request *prev = elv_former_request(q, rq);
 
@@ -907,9 +910,14 @@ static void blk_account_io_merge_bio(struct request *req)
        part_stat_unlock();
 }
 
-enum bio_merge_status bio_attempt_back_merge(struct request *req,
-                                            struct bio *bio,
-                                            unsigned int nr_segs)
+enum bio_merge_status {
+       BIO_MERGE_OK,
+       BIO_MERGE_NONE,
+       BIO_MERGE_FAILED,
+};
+
+static enum bio_merge_status bio_attempt_back_merge(struct request *req,
+               struct bio *bio, unsigned int nr_segs)
 {
        const int ff = bio->bi_opf & REQ_FAILFAST_MASK;
 
@@ -932,9 +940,8 @@ enum bio_merge_status bio_attempt_back_merge(struct request *req,
        return BIO_MERGE_OK;
 }
 
-enum bio_merge_status bio_attempt_front_merge(struct request *req,
-                                             struct bio *bio,
-                                             unsigned int nr_segs)
+static enum bio_merge_status bio_attempt_front_merge(struct request *req,
+               struct bio *bio, unsigned int nr_segs)
 {
        const int ff = bio->bi_opf & REQ_FAILFAST_MASK;
 
@@ -959,9 +966,8 @@ enum bio_merge_status bio_attempt_front_merge(struct request *req,
        return BIO_MERGE_OK;
 }
 
-enum bio_merge_status bio_attempt_discard_merge(struct request_queue *q,
-                                               struct request *req,
-                                               struct bio *bio)
+static enum bio_merge_status bio_attempt_discard_merge(struct request_queue *q,
+               struct request *req, struct bio *bio)
 {
        unsigned short segments = blk_rq_nr_discard_segments(req);
 
@@ -1096,3 +1102,35 @@ bool blk_bio_list_merge(struct request_queue *q, struct list_head *list,
        return false;
 }
 EXPORT_SYMBOL_GPL(blk_bio_list_merge);
+
+bool blk_mq_sched_try_merge(struct request_queue *q, struct bio *bio,
+               unsigned int nr_segs, struct request **merged_request)
+{
+       struct request *rq;
+
+       switch (elv_merge(q, &rq, bio)) {
+       case ELEVATOR_BACK_MERGE:
+               if (!blk_mq_sched_allow_merge(q, rq, bio))
+                       return false;
+               if (bio_attempt_back_merge(rq, bio, nr_segs) != BIO_MERGE_OK)
+                       return false;
+               *merged_request = attempt_back_merge(q, rq);
+               if (!*merged_request)
+                       elv_merged_request(q, rq, ELEVATOR_BACK_MERGE);
+               return true;
+       case ELEVATOR_FRONT_MERGE:
+               if (!blk_mq_sched_allow_merge(q, rq, bio))
+                       return false;
+               if (bio_attempt_front_merge(rq, bio, nr_segs) != BIO_MERGE_OK)
+                       return false;
+               *merged_request = attempt_front_merge(q, rq);
+               if (!*merged_request)
+                       elv_merged_request(q, rq, ELEVATOR_FRONT_MERGE);
+               return true;
+       case ELEVATOR_DISCARD_MERGE:
+               return bio_attempt_discard_merge(q, rq, bio) == BIO_MERGE_OK;
+       default:
+               return false;
+       }
+}
+EXPORT_SYMBOL_GPL(blk_mq_sched_try_merge);
index 3e95967..e7a690a 100644 (file)
@@ -344,38 +344,6 @@ void blk_mq_sched_dispatch_requests(struct blk_mq_hw_ctx *hctx)
        }
 }
 
-bool blk_mq_sched_try_merge(struct request_queue *q, struct bio *bio,
-               unsigned int nr_segs, struct request **merged_request)
-{
-       struct request *rq;
-
-       switch (elv_merge(q, &rq, bio)) {
-       case ELEVATOR_BACK_MERGE:
-               if (!blk_mq_sched_allow_merge(q, rq, bio))
-                       return false;
-               if (bio_attempt_back_merge(rq, bio, nr_segs) != BIO_MERGE_OK)
-                       return false;
-               *merged_request = attempt_back_merge(q, rq);
-               if (!*merged_request)
-                       elv_merged_request(q, rq, ELEVATOR_BACK_MERGE);
-               return true;
-       case ELEVATOR_FRONT_MERGE:
-               if (!blk_mq_sched_allow_merge(q, rq, bio))
-                       return false;
-               if (bio_attempt_front_merge(rq, bio, nr_segs) != BIO_MERGE_OK)
-                       return false;
-               *merged_request = attempt_front_merge(q, rq);
-               if (!*merged_request)
-                       elv_merged_request(q, rq, ELEVATOR_FRONT_MERGE);
-               return true;
-       case ELEVATOR_DISCARD_MERGE:
-               return bio_attempt_discard_merge(q, rq, bio) == BIO_MERGE_OK;
-       default:
-               return false;
-       }
-}
-EXPORT_SYMBOL_GPL(blk_mq_sched_try_merge);
-
 bool __blk_mq_sched_bio_merge(struct request_queue *q, struct bio *bio,
                unsigned int nr_segs)
 {
index 8fcb146..dfab984 100644 (file)
@@ -29,12 +29,6 @@ struct blk_flush_queue {
        spinlock_t              mq_flush_lock;
 };
 
-enum bio_merge_status {
-       BIO_MERGE_OK,
-       BIO_MERGE_NONE,
-       BIO_MERGE_FAILED,
-};
-
 extern struct kmem_cache *blk_requestq_cachep;
 extern struct kobj_type blk_queue_ktype;
 extern struct ida blk_queue_ida;
@@ -190,15 +184,6 @@ static inline void blk_integrity_del(struct gendisk *disk)
 unsigned long blk_rq_timeout(unsigned long timeout);
 void blk_add_timer(struct request *req);
 
-enum bio_merge_status bio_attempt_front_merge(struct request *req,
-                                             struct bio *bio,
-                                             unsigned int nr_segs);
-enum bio_merge_status bio_attempt_back_merge(struct request *req,
-                                            struct bio *bio,
-                                            unsigned int nr_segs);
-enum bio_merge_status bio_attempt_discard_merge(struct request_queue *q,
-                                               struct request *req,
-                                               struct bio *bio);
 bool blk_attempt_plug_merge(struct request_queue *q, struct bio *bio,
                unsigned int nr_segs, struct request **same_queue_rq);
 bool blk_bio_list_merge(struct request_queue *q, struct list_head *list,
@@ -249,10 +234,6 @@ ssize_t part_timeout_store(struct device *, struct device_attribute *,
 void __blk_queue_split(struct bio **bio, unsigned int *nr_segs);
 int ll_back_merge_fn(struct request *req, struct bio *bio,
                unsigned int nr_segs);
-int ll_front_merge_fn(struct request *req,  struct bio *bio,
-               unsigned int nr_segs);
-struct request *attempt_back_merge(struct request_queue *q, struct request *rq);
-struct request *attempt_front_merge(struct request_queue *q, struct request *rq);
 int blk_attempt_req_merge(struct request_queue *q, struct request *rq,
                                struct request *next);
 unsigned int blk_recalc_rq_segments(struct request *rq);