From patchwork Mon Nov 26 02:17:19 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ming Lei X-Patchwork-Id: 10697481 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 42D5C16B1 for ; Mon, 26 Nov 2018 02:21:32 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 3228529AA1 for ; Mon, 26 Nov 2018 02:21:32 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 2583829AA9; Mon, 26 Nov 2018 02:21:32 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_NONE autolearn=unavailable version=3.3.1 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 7CBC129AC2 for ; Mon, 26 Nov 2018 02:21:31 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 8111E6B3F8C; Sun, 25 Nov 2018 21:21:30 -0500 (EST) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 7E61D6B3F8E; Sun, 25 Nov 2018 21:21:30 -0500 (EST) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 6AD1A6B3F8F; Sun, 25 Nov 2018 21:21:30 -0500 (EST) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-qt1-f197.google.com (mail-qt1-f197.google.com [209.85.160.197]) by kanga.kvack.org (Postfix) with ESMTP id 3F48A6B3F8C for ; Sun, 25 Nov 2018 21:21:30 -0500 (EST) Received: by mail-qt1-f197.google.com with SMTP id d35so15447061qtd.20 for ; Sun, 25 Nov 2018 18:21:30 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-original-authentication-results:x-gm-message-state:from:to:cc :subject:date:message-id:in-reply-to:references; bh=JAk4rIma+Ea807AEnkgWW9rrDJRA56i1/EIDUeqJu1Y=; b=dIq6glPtIZY/GhCcZv8uHsHFRPlrNYrq2zW66s3S+udHVpuBSSEh4cKdUdTB5mI9Np ebj1whGfnaYxYRNdp/1Ggt8/8pt9RJcdxuCXpQ24eKjuLaPRZKOj3tk04/HQSNnw+hBx JnrcLTqLIMxUZvEm3JH/ONzvUzfbZtYPPOR9INwdMSRf7wYvN+Q7f4TjROAmSHOGppjJ /DtnNsIbCG+1MRTFBTwCXbX3fH1vQhWjD/Ruakt43HKLe6Hnl3nkslKUetfSg0/p9qdX Ij1CciXtVrZgU5Qpask2vmHIW71htUGkKj98eKkhlm4AHCzRYkVFYVNulqQ/D1mm65g8 m41g== X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of ming.lei@redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=ming.lei@redhat.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com X-Gm-Message-State: AA+aEWb+yHolYayIn3DwbbFHWORwmvU9RQNuvD3a8GHot7rhVA8j49BG 1YAHVhUG4kHISVeyGHxt7cwMBWr5qLurIt+thEjLytR59dfDfU0qAjsOgdAT2ARnMYju5HWsKFj VNbS6sAdn/aYRmebRVK6W4iMtsqjX1KUODs3JuQra3/ibc5e6RY/SvgaM+1Zh+1aOCg== X-Received: by 2002:a0c:df12:: with SMTP id g18mr23537188qvl.208.1543198890010; Sun, 25 Nov 2018 18:21:30 -0800 (PST) X-Google-Smtp-Source: AFSGD/XyduFlWqQdjDtR0U9NU3xyjufIaol+TeakFMJ72UxDUkkI7LRF7Ei+Lfmjpbw02s2ZEZyi X-Received: by 2002:a0c:df12:: with SMTP id g18mr23537159qvl.208.1543198889242; Sun, 25 Nov 2018 18:21:29 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1543198889; cv=none; d=google.com; s=arc-20160816; b=rdwdk6bFuaCxkOTeeJ8D3GprKqVC40/RJznNZSwBtTwBXuBono6n9oAEPmO8M8okKv 1rMB3eUbUeLQM4Z+XGKsf54zoNbiOLzz16pLxx3/O21PD0qwgB1L+cpPRpfUNAJDs/mm u9XGOj+W0PWfQoCdqIxXDU9AAYZkSeVQdPuIn9LRBqy4x+FC66oVAnVoYEqaVnSxzBpE 5srhHmSQ+t63fzmnply1xyalmzUvSLmZvSbFAq+wU0mJsbuMqm9o8kR30ULZ7KJGal1j gSQ3NHSVqK3G2Ajh5oiFm8Fmh1Izt3nm0Jyu461qa67gXHVxF9RPXc9skdV0nG2ilHKS UEvA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=references:in-reply-to:message-id:date:subject:cc:to:from; bh=JAk4rIma+Ea807AEnkgWW9rrDJRA56i1/EIDUeqJu1Y=; b=a20bZNlsVhVeuUW7RhsFAH3qSmtbAsHikMnvZauuNerdJLg3uzFAiYEGhgn59AlOEP txtIAYhOIXQerWI7ox3WKpjORNKQsPEtZHgn4S2Fo57S/cYPaAHAgQ3foFj8yBFOKv8A D/vYvpQFuhzTmT77z/M4QmAZJwoDsZApGeJTtKu8NP5WuYUvKjGWH2D4qd/8lbEgEoPn aTKsYQOyPozVddLyjMygRSpGmaNFHPJN/sN0ys0Qxjmh7nrAXEr5BRdSrI60+mCh5tGW kplXr/+wBcQpZKBLjLWTLll3QeTwfBWM7QWdZpCjp73Y4DRRy7//PcWcmGwh+8gmrReY hBRA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of ming.lei@redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=ming.lei@redhat.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: from mx1.redhat.com (mx1.redhat.com. [209.132.183.28]) by mx.google.com with ESMTPS id x4si585536qtj.211.2018.11.25.18.21.29 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 25 Nov 2018 18:21:29 -0800 (PST) Received-SPF: pass (google.com: domain of ming.lei@redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ming.lei@redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=ming.lei@redhat.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 18C27356F5; Mon, 26 Nov 2018 02:21:28 +0000 (UTC) Received: from localhost (ovpn-8-19.pek2.redhat.com [10.72.8.19]) by smtp.corp.redhat.com (Postfix) with ESMTP id A7B115C2E4; Mon, 26 Nov 2018 02:21:17 +0000 (UTC) From: Ming Lei To: Jens Axboe Cc: linux-block@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Theodore Ts'o , Omar Sandoval , Sagi Grimberg , Dave Chinner , Kent Overstreet , Mike Snitzer , dm-devel@redhat.com, Alexander Viro , linux-fsdevel@vger.kernel.org, Shaohua Li , linux-raid@vger.kernel.org, David Sterba , linux-btrfs@vger.kernel.org, "Darrick J . Wong" , linux-xfs@vger.kernel.org, Gao Xiang , Christoph Hellwig , linux-ext4@vger.kernel.org, Coly Li , linux-bcache@vger.kernel.org, Boaz Harrosh , Bob Peterson , cluster-devel@redhat.com, Ming Lei Subject: [PATCH V12 19/20] block: kill QUEUE_FLAG_NO_SG_MERGE Date: Mon, 26 Nov 2018 10:17:19 +0800 Message-Id: <20181126021720.19471-20-ming.lei@redhat.com> In-Reply-To: <20181126021720.19471-1-ming.lei@redhat.com> References: <20181126021720.19471-1-ming.lei@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.30]); Mon, 26 Nov 2018 02:21:28 +0000 (UTC) X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: X-Virus-Scanned: ClamAV using ClamSMTP Since bdced438acd83ad83a6c ("block: setup bi_phys_segments after splitting"), physical segment number is mainly figured out in blk_queue_split() for fast path, and the flag of BIO_SEG_VALID is set there too. Now only blk_recount_segments() and blk_recalc_rq_segments() use this flag. Basically blk_recount_segments() is bypassed in fast path given BIO_SEG_VALID is set in blk_queue_split(). For another user of blk_recalc_rq_segments(): - run in partial completion branch of blk_update_request, which is an unusual case - run in blk_cloned_rq_check_limits(), still not a big problem if the flag is killed since dm-rq is the only user. Multi-page bvec is enabled now, not doing S/G merging is rather pointless with the current setup of the I/O path, as it isn't going to save you a significant amount of cycles. Reviewed-by: Christoph Hellwig Reviewed-by: Omar Sandoval Signed-off-by: Ming Lei --- block/blk-merge.c | 31 ++++++------------------------- block/blk-mq-debugfs.c | 1 - block/blk-mq.c | 3 --- drivers/md/dm-table.c | 13 ------------- include/linux/blkdev.h | 1 - 5 files changed, 6 insertions(+), 43 deletions(-) diff --git a/block/blk-merge.c b/block/blk-merge.c index 20b5b0c3e182..9a7fd8b1f90a 100644 --- a/block/blk-merge.c +++ b/block/blk-merge.c @@ -355,8 +355,7 @@ void blk_queue_split(struct request_queue *q, struct bio **bio) EXPORT_SYMBOL(blk_queue_split); static unsigned int __blk_recalc_rq_segments(struct request_queue *q, - struct bio *bio, - bool no_sg_merge) + struct bio *bio) { struct bio_vec bv, bvprv = { NULL }; unsigned int seg_size, nr_phys_segs; @@ -382,13 +381,6 @@ static unsigned int __blk_recalc_rq_segments(struct request_queue *q, nr_phys_segs = 0; for_each_bio(bio) { bio_for_each_bvec(bv, bio, iter) { - /* - * If SG merging is disabled, each bio vector is - * a segment - */ - if (no_sg_merge) - goto new_segment; - if (prev) { if (seg_size + bv.bv_len > queue_max_segment_size(q)) @@ -418,27 +410,16 @@ static unsigned int __blk_recalc_rq_segments(struct request_queue *q, void blk_recalc_rq_segments(struct request *rq) { - bool no_sg_merge = !!test_bit(QUEUE_FLAG_NO_SG_MERGE, - &rq->q->queue_flags); - - rq->nr_phys_segments = __blk_recalc_rq_segments(rq->q, rq->bio, - no_sg_merge); + rq->nr_phys_segments = __blk_recalc_rq_segments(rq->q, rq->bio); } void blk_recount_segments(struct request_queue *q, struct bio *bio) { - unsigned short seg_cnt = bio_segments(bio); - - if (test_bit(QUEUE_FLAG_NO_SG_MERGE, &q->queue_flags) && - (seg_cnt < queue_max_segments(q))) - bio->bi_phys_segments = seg_cnt; - else { - struct bio *nxt = bio->bi_next; + struct bio *nxt = bio->bi_next; - bio->bi_next = NULL; - bio->bi_phys_segments = __blk_recalc_rq_segments(q, bio, false); - bio->bi_next = nxt; - } + bio->bi_next = NULL; + bio->bi_phys_segments = __blk_recalc_rq_segments(q, bio); + bio->bi_next = nxt; bio_set_flag(bio, BIO_SEG_VALID); } diff --git a/block/blk-mq-debugfs.c b/block/blk-mq-debugfs.c index a32bb79d6c95..d752fe4461af 100644 --- a/block/blk-mq-debugfs.c +++ b/block/blk-mq-debugfs.c @@ -127,7 +127,6 @@ static const char *const blk_queue_flag_name[] = { QUEUE_FLAG_NAME(SAME_FORCE), QUEUE_FLAG_NAME(DEAD), QUEUE_FLAG_NAME(INIT_DONE), - QUEUE_FLAG_NAME(NO_SG_MERGE), QUEUE_FLAG_NAME(POLL), QUEUE_FLAG_NAME(WC), QUEUE_FLAG_NAME(FUA), diff --git a/block/blk-mq.c b/block/blk-mq.c index b16204df65d1..7b17191d755b 100644 --- a/block/blk-mq.c +++ b/block/blk-mq.c @@ -2780,9 +2780,6 @@ struct request_queue *blk_mq_init_allocated_queue(struct blk_mq_tag_set *set, q->queue_flags |= QUEUE_FLAG_MQ_DEFAULT; - if (!(set->flags & BLK_MQ_F_SG_MERGE)) - blk_queue_flag_set(QUEUE_FLAG_NO_SG_MERGE, q); - q->sg_reserved_size = INT_MAX; INIT_DELAYED_WORK(&q->requeue_work, blk_mq_requeue_work); diff --git a/drivers/md/dm-table.c b/drivers/md/dm-table.c index 844f7d0f2ef8..a41832cf0c98 100644 --- a/drivers/md/dm-table.c +++ b/drivers/md/dm-table.c @@ -1698,14 +1698,6 @@ static int device_is_not_random(struct dm_target *ti, struct dm_dev *dev, return q && !blk_queue_add_random(q); } -static int queue_supports_sg_merge(struct dm_target *ti, struct dm_dev *dev, - sector_t start, sector_t len, void *data) -{ - struct request_queue *q = bdev_get_queue(dev->bdev); - - return q && !test_bit(QUEUE_FLAG_NO_SG_MERGE, &q->queue_flags); -} - static bool dm_table_all_devices_attribute(struct dm_table *t, iterate_devices_callout_fn func) { @@ -1902,11 +1894,6 @@ void dm_table_set_restrictions(struct dm_table *t, struct request_queue *q, if (!dm_table_supports_write_zeroes(t)) q->limits.max_write_zeroes_sectors = 0; - if (dm_table_all_devices_attribute(t, queue_supports_sg_merge)) - blk_queue_flag_clear(QUEUE_FLAG_NO_SG_MERGE, q); - else - blk_queue_flag_set(QUEUE_FLAG_NO_SG_MERGE, q); - dm_table_verify_integrity(t); /* diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index fa263de3f1d1..9c1ae3a62ed3 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h @@ -589,7 +589,6 @@ struct request_queue { #define QUEUE_FLAG_SAME_FORCE 15 /* force complete on same CPU */ #define QUEUE_FLAG_DEAD 16 /* queue tear-down finished */ #define QUEUE_FLAG_INIT_DONE 17 /* queue is initialized */ -#define QUEUE_FLAG_NO_SG_MERGE 18 /* don't attempt to merge SG segments*/ #define QUEUE_FLAG_POLL 19 /* IO polling enabled if set */ #define QUEUE_FLAG_WC 20 /* Write back caching */ #define QUEUE_FLAG_FUA 21 /* device supports FUA writes */