Received: by 2002:a05:6a10:144:0:0:0:0 with SMTP id 4csp68873pxw; Fri, 8 Apr 2022 01:00:19 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxAKvQzcJtLsHOiZj+uKftkoXVBz8O7q8dCgaM/P6AAgkKGg2AU8tUURZamfPZTVP+8LXZ+ X-Received: by 2002:a05:6a00:168a:b0:4f7:e161:83cd with SMTP id k10-20020a056a00168a00b004f7e16183cdmr18320551pfc.56.1649404819092; Fri, 08 Apr 2022 01:00:19 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1649404819; cv=none; d=google.com; s=arc-20160816; b=RUeyiad/1Wz2f/4KJKLwAhPyWlg7dQ1uyX21+n+LnqvlgR/+mc090rW1KvK+y8rND5 WxP/4/X2w43pfdF/iMu47NXJwGgMbh1StWStOID1vjrTDUrKa/KbhEmtJtLq0C4ej2aT 4S9JFxlBhVQ1+VU1RI+esYcg4a2UpK1BKYfwnv/P+I0rnOIlhInIiC9/ftPxGn5NPh+M 8gx8GAosjszit5BbxDarlcE1jkC7SCJfe/2hJxjsl0TdD0pRVCCkOgStXxQ/wQzpvg0Q Kr+K4b+NaM3wwklqAstcCyPWW8bCAT+/HBmygME0yE1BcROwwCuhJbGtRSdlLVuP1hzX eUsw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=pUnnG3T4kpA5B1ahtZ1tMjoM9hEB3Kj2a3PWOz6/bjY=; b=0VMkDR6p7kJawel1O1+lKuvae1RC6f4bljHi3Zv4UFDOj7gDUCEX+ExvNo2xP96xsH 0EDetjZk9V+T5yo+/H+Y7XDQnfiWqBamwyra9qHYffsOap1HkaAAIKj5k4wzzN0tE/YR dq5X/rEOXE22lM5uFwLYYDVRSeYs2fyYQ0ldgtj/GQ88jBa3Dj2n5f03S//u/M2TXlie g8ax/915lyl8/AgYQIeE5dmurbjb2/i3K302qigkvQjsmVgHiBnLBmsTdv6JHaSTH8HQ IW8H1zMqrSyGY1f/x/owkK+m/DWYzli7BwAPxce9+pBaPl6vFnc+S1V0cBwt6PmmwC29 LuBQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=huawei.com Return-Path: Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net. [2620:137:e000::1:18]) by mx.google.com with ESMTPS id s16-20020a634510000000b003816043f02bsi590743pga.544.2022.04.08.01.00.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Apr 2022 01:00:19 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) client-ip=2620:137:e000::1:18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=huawei.com Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 3A7A720BCB; Fri, 8 Apr 2022 00:35:02 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230022AbiDHH1S (ORCPT + 99 others); Fri, 8 Apr 2022 03:27:18 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54448 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229862AbiDHH0q (ORCPT ); Fri, 8 Apr 2022 03:26:46 -0400 Received: from szxga01-in.huawei.com (szxga01-in.huawei.com [45.249.212.187]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5301D36A451; Fri, 8 Apr 2022 00:24:43 -0700 (PDT) Received: from kwepemi100003.china.huawei.com (unknown [172.30.72.53]) by szxga01-in.huawei.com (SkyGuard) with ESMTP id 4KZV9m2SBdzdZgB; Fri, 8 Apr 2022 15:24:12 +0800 (CST) Received: from kwepemm600009.china.huawei.com (7.193.23.164) by kwepemi100003.china.huawei.com (7.221.188.122) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.24; Fri, 8 Apr 2022 15:24:41 +0800 Received: from huawei.com (10.175.127.227) by kwepemm600009.china.huawei.com (7.193.23.164) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.21; Fri, 8 Apr 2022 15:24:40 +0800 From: Yu Kuai To: , , , , CC: , , Subject: [PATCH -next RFC v2 6/8] blk-mq: force tag preemption for split bios Date: Fri, 8 Apr 2022 15:39:14 +0800 Message-ID: <20220408073916.1428590-7-yukuai3@huawei.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20220408073916.1428590-1-yukuai3@huawei.com> References: <20220408073916.1428590-1-yukuai3@huawei.com> MIME-Version: 1.0 Content-Transfer-Encoding: 7BIT Content-Type: text/plain; charset=US-ASCII X-Originating-IP: [10.175.127.227] X-ClientProxiedBy: dggems703-chm.china.huawei.com (10.3.19.180) To kwepemm600009.china.huawei.com (7.193.23.164) X-CFilter-Loop: Reflected X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RDNS_NONE, SPF_HELO_NONE,T_SCC_BODY_TEXT_LINE autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org For HDD, sequential io is much faster than random io, thus it's better to issue split io continuously. However, this is broken when tag preemption is disabled, because wakers can only get one tag each time. Thus tag preemption should be disabled for split bios, specifically the first bio won't preempt tag, and following split bios will preempt tag. Signed-off-by: Yu Kuai --- block/blk-merge.c | 9 ++++++++- block/blk-mq.c | 1 + include/linux/blk_types.h | 4 ++++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/block/blk-merge.c b/block/blk-merge.c index 7771dacc99cb..cab6ca681513 100644 --- a/block/blk-merge.c +++ b/block/blk-merge.c @@ -343,12 +343,19 @@ void __blk_queue_split(struct request_queue *q, struct bio **bio, if (split) { /* there isn't chance to merge the splitted bio */ - split->bi_opf |= REQ_NOMERGE; + split->bi_opf |= (REQ_NOMERGE | REQ_SPLIT); + if ((*bio)->bi_opf & REQ_SPLIT) + split->bi_opf |= REQ_PREEMPT; + else + (*bio)->bi_opf |= REQ_SPLIT; bio_chain(split, *bio); trace_block_split(split, (*bio)->bi_iter.bi_sector); submit_bio_noacct(*bio); *bio = split; + } else { + if ((*bio)->bi_opf & REQ_SPLIT) + (*bio)->bi_opf |= REQ_PREEMPT; } } diff --git a/block/blk-mq.c b/block/blk-mq.c index ed3ed86f7dd2..909420c5186c 100644 --- a/block/blk-mq.c +++ b/block/blk-mq.c @@ -2737,6 +2737,7 @@ static struct request *blk_mq_get_new_requests(struct request_queue *q, .q = q, .nr_tags = 1, .cmd_flags = bio->bi_opf, + .preemption = (bio->bi_opf & REQ_PREEMPT), }; struct request *rq; diff --git a/include/linux/blk_types.h b/include/linux/blk_types.h index c62274466e72..6b56e271f926 100644 --- a/include/linux/blk_types.h +++ b/include/linux/blk_types.h @@ -418,6 +418,8 @@ enum req_flag_bits { /* for driver use */ __REQ_DRV, __REQ_SWAP, /* swapping request. */ + __REQ_SPLIT, + __REQ_PREEMPT, __REQ_NR_BITS, /* stops here */ }; @@ -443,6 +445,8 @@ enum req_flag_bits { #define REQ_DRV (1ULL << __REQ_DRV) #define REQ_SWAP (1ULL << __REQ_SWAP) +#define REQ_SPLIT (1ULL << __REQ_SPLIT) +#define REQ_PREEMPT (1ULL << __REQ_PREEMPT) #define REQ_FAILFAST_MASK \ (REQ_FAILFAST_DEV | REQ_FAILFAST_TRANSPORT | REQ_FAILFAST_DRIVER) -- 2.31.1