block: remove the ioprio field from struct request
authorChristoph Hellwig <hch@lst.de>
Tue, 12 Nov 2024 17:00:39 +0000 (18:00 +0100)
committerJens Axboe <axboe@kernel.dk>
Tue, 12 Nov 2024 21:42:02 +0000 (14:42 -0700)
The request ioprio is only initialized from the first attached bio,
so requests without a bio already never set it.  Directly use the
bio field instead.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Bart Van Assche <bvanassche@acm.org>
Link: https://lore.kernel.org/r/20241112170050.1612998-3-hch@lst.de
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/blk-merge.c
block/blk-mq.c
include/linux/blk-mq.h
include/trace/events/block.h

index 2306014c108d53432547ec8159b0917e05483f2a..df36f83f37388a4fdb00650418d40a76d2cdfb87 100644 (file)
@@ -871,11 +871,10 @@ static struct request *attempt_merge(struct request_queue *q,
                /* Don't merge requests with different write hints. */
                if (req->bio->bi_write_hint != next->bio->bi_write_hint)
                        return NULL;
+               if (req->bio->bi_ioprio != next->bio->bi_ioprio)
+                       return NULL;
        }
 
-       if (req->ioprio != next->ioprio)
-               return NULL;
-
        if (!blk_atomic_write_mergeable_rqs(req, next))
                return NULL;
 
@@ -1007,11 +1006,10 @@ bool blk_rq_merge_ok(struct request *rq, struct bio *bio)
                /* Don't merge requests with different write hints. */
                if (rq->bio->bi_write_hint != bio->bi_write_hint)
                        return false;
+               if (rq->bio->bi_ioprio != bio->bi_ioprio)
+                       return false;
        }
 
-       if (rq->ioprio != bio_prio(bio))
-               return false;
-
        if (blk_atomic_write_mergeable_rq_bio(rq, bio) == false)
                return false;
 
index 65e6b86d341c53fac949ee952350894565bae1a6..3c6cadba75e35a936034aa403d1c80a10886074e 100644 (file)
@@ -842,7 +842,7 @@ static void blk_print_req_error(struct request *req, blk_status_t status)
                blk_op_str(req_op(req)),
                (__force u32)(req->cmd_flags & ~REQ_OP_MASK),
                req->nr_phys_segments,
-               IOPRIO_PRIO_CLASS(req->ioprio));
+               IOPRIO_PRIO_CLASS(req_get_ioprio(req)));
 }
 
 /*
@@ -3306,7 +3306,6 @@ int blk_rq_prep_clone(struct request *rq, struct request *rq_src,
                rq->special_vec = rq_src->special_vec;
        }
        rq->nr_phys_segments = rq_src->nr_phys_segments;
-       rq->ioprio = rq_src->ioprio;
 
        if (rq->bio && blk_crypto_rq_bio_prep(rq, rq->bio, gfp_mask) < 0)
                goto free_and_out;
index 2804fe181d9ddecb47309776eb6f6ee33af7b4cb..a28264442948fe2d6034af140479560f52292fc4 100644 (file)
@@ -156,8 +156,6 @@ struct request {
        struct blk_crypto_keyslot *crypt_keyslot;
 #endif
 
-       unsigned short ioprio;
-
        enum mq_rq_state state;
        atomic_t ref;
 
@@ -221,7 +219,9 @@ static inline bool blk_rq_is_passthrough(struct request *rq)
 
 static inline unsigned short req_get_ioprio(struct request *req)
 {
-       return req->ioprio;
+       if (req->bio)
+               return req->bio->bi_ioprio;
+       return 0;
 }
 
 #define rq_data_dir(rq)                (op_is_write(req_op(rq)) ? WRITE : READ)
@@ -984,7 +984,6 @@ static inline void blk_rq_bio_prep(struct request *rq, struct bio *bio,
        rq->nr_phys_segments = nr_segs;
        rq->__data_len = bio->bi_iter.bi_size;
        rq->bio = rq->biotail = bio;
-       rq->ioprio = bio_prio(bio);
 }
 
 void blk_mq_hctx_set_fq_lock_class(struct blk_mq_hw_ctx *hctx,
index 1527d5d45e01a482d541ffc038c290bfa7eb36e0..bd0ea07338eb6c9147636f15958be8343e04c344 100644 (file)
@@ -99,7 +99,7 @@ TRACE_EVENT(block_rq_requeue,
                __entry->dev       = rq->q->disk ? disk_devt(rq->q->disk) : 0;
                __entry->sector    = blk_rq_trace_sector(rq);
                __entry->nr_sector = blk_rq_trace_nr_sectors(rq);
-               __entry->ioprio    = rq->ioprio;
+               __entry->ioprio    = req_get_ioprio(rq);
 
                blk_fill_rwbs(__entry->rwbs, rq->cmd_flags);
                __get_str(cmd)[0] = '\0';
@@ -136,7 +136,7 @@ DECLARE_EVENT_CLASS(block_rq_completion,
                __entry->sector    = blk_rq_pos(rq);
                __entry->nr_sector = nr_bytes >> 9;
                __entry->error     = blk_status_to_errno(error);
-               __entry->ioprio    = rq->ioprio;
+               __entry->ioprio    = req_get_ioprio(rq);
 
                blk_fill_rwbs(__entry->rwbs, rq->cmd_flags);
                __get_str(cmd)[0] = '\0';
@@ -209,7 +209,7 @@ DECLARE_EVENT_CLASS(block_rq,
                __entry->sector    = blk_rq_trace_sector(rq);
                __entry->nr_sector = blk_rq_trace_nr_sectors(rq);
                __entry->bytes     = blk_rq_bytes(rq);
-               __entry->ioprio    = rq->ioprio;
+               __entry->ioprio    = req_get_ioprio(rq);
 
                blk_fill_rwbs(__entry->rwbs, rq->cmd_flags);
                __get_str(cmd)[0] = '\0';