diff options
author | Pavel Begunkov | 2019-11-29 00:11:53 +0300 |
---|---|---|
committer | Jens Axboe | 2019-12-19 06:08:50 -0700 |
commit | 7d30a621028a22a9e8fbae5c5d8dc455869e4999 (patch) | |
tree | 2ed626e9fce51d89849495a2ab5a8b68496fb4ce /block | |
parent | 80a0c2e511a97e11d82e0ec11564e2c3fe624b0d (diff) |
blk-mq: optimise rq sort function
Check "!=" in multi-layer comparisons. The same memory usage, fewer
instructions, and 2 from 4 jumps are replaced with SETcc.
Note, that list_sort() doesn't differ 0 and <0.
Reviewed-by: Nikolay Borisov <nborisov@suse.com>
Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'block')
-rw-r--r-- | block/blk-mq.c | 12 |
1 files changed, 4 insertions, 8 deletions
diff --git a/block/blk-mq.c b/block/blk-mq.c index 323c9cb28066..f32a3cfdd34e 100644 --- a/block/blk-mq.c +++ b/block/blk-mq.c @@ -1668,14 +1668,10 @@ static int plug_rq_cmp(void *priv, struct list_head *a, struct list_head *b) struct request *rqa = container_of(a, struct request, queuelist); struct request *rqb = container_of(b, struct request, queuelist); - if (rqa->mq_ctx < rqb->mq_ctx) - return -1; - else if (rqa->mq_ctx > rqb->mq_ctx) - return 1; - else if (rqa->mq_hctx < rqb->mq_hctx) - return -1; - else if (rqa->mq_hctx > rqb->mq_hctx) - return 1; + if (rqa->mq_ctx != rqb->mq_ctx) + return rqa->mq_ctx > rqb->mq_ctx; + if (rqa->mq_hctx != rqb->mq_hctx) + return rqa->mq_hctx > rqb->mq_hctx; return blk_rq_pos(rqa) > blk_rq_pos(rqb); } |