From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752960AbdI3LcF (ORCPT ); Sat, 30 Sep 2017 07:32:05 -0400 Received: from mx1.redhat.com ([209.132.183.28]:40422 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752944AbdI3LcD (ORCPT ); Sat, 30 Sep 2017 07:32:03 -0400 DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 9A3156524 Authentication-Results: ext-mx10.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx10.extmail.prod.ext.phx2.redhat.com; spf=fail smtp.mailfrom=ming.lei@redhat.com From: Ming Lei To: Jens Axboe , linux-block@vger.kernel.org, Christoph Hellwig , Mike Snitzer , dm-devel@redhat.com Cc: Bart Van Assche , Laurence Oberman , Paolo Valente , Oleksandr Natalenko , Tom Nguyen , linux-kernel@vger.kernel.org, Omar Sandoval , Ming Lei Subject: [PATCH V5 5/8] block: add check on elevator for supporting bio merge via hashtable from blk-mq sw queue Date: Sat, 30 Sep 2017 19:26:52 +0800 Message-Id: <20170930112655.31451-6-ming.lei@redhat.com> In-Reply-To: <20170930112655.31451-1-ming.lei@redhat.com> References: <20170930112655.31451-1-ming.lei@redhat.com> X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.39]); Sat, 30 Sep 2017 11:32:03 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org blk_mq_sched_try_merge() will be reused in following patches to support bio merge to blk-mq sw queue, so add checkes to related functions which are called from blk_mq_sched_try_merge(). Tested-by: Oleksandr Natalenko Tested-by: Tom Nguyen Tested-by: Paolo Valente Signed-off-by: Ming Lei --- block/elevator.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/block/elevator.c b/block/elevator.c index e11c7873fc21..2424aea85393 100644 --- a/block/elevator.c +++ b/block/elevator.c @@ -71,6 +71,10 @@ bool elv_bio_merge_ok(struct request *rq, struct bio *bio) if (!blk_rq_merge_ok(rq, bio)) return false; + /* We need to support to merge bio from sw queue */ + if (!rq->q->elevator) + return true; + if (!elv_iosched_allow_bio_merge(rq, bio)) return false; @@ -449,6 +453,10 @@ static enum elv_merge __elv_merge(struct request_queue *q, return ELEVATOR_BACK_MERGE; } + /* no elevator when merging bio to blk-mq sw queue */ + if (!e) + return ELEVATOR_NO_MERGE; + if (e->uses_mq && e->type->ops.mq.request_merge) return e->type->ops.mq.request_merge(q, req, bio); else if (!e->uses_mq && e->type->ops.sq.elevator_merge_fn) @@ -711,6 +719,10 @@ struct request *elv_latter_request(struct request_queue *q, struct request *rq) { struct elevator_queue *e = q->elevator; + /* no elevator when merging bio to blk-mq sw queue */ + if (!e) + return NULL; + if (e->uses_mq && e->type->ops.mq.next_request) return e->type->ops.mq.next_request(q, rq); else if (!e->uses_mq && e->type->ops.sq.elevator_latter_req_fn) @@ -723,6 +735,10 @@ struct request *elv_former_request(struct request_queue *q, struct request *rq) { struct elevator_queue *e = q->elevator; + /* no elevator when merging bio to blk-mq sw queue */ + if (!e) + return NULL; + if (e->uses_mq && e->type->ops.mq.former_request) return e->type->ops.mq.former_request(q, rq); if (!e->uses_mq && e->type->ops.sq.elevator_former_req_fn) -- 2.9.5