From patchwork Mon Jul 20 06:12:49 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christoph Hellwig X-Patchwork-Id: 11672895 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 48FDD1510 for ; Mon, 20 Jul 2020 06:12:57 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 314F522BEF for ; Mon, 20 Jul 2020 06:12:57 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b="gNyTj+y2" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726084AbgGTGM4 (ORCPT ); Mon, 20 Jul 2020 02:12:56 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35438 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726854AbgGTGM4 (ORCPT ); Mon, 20 Jul 2020 02:12:56 -0400 Received: from casper.infradead.org (casper.infradead.org [IPv6:2001:8b0:10b:1236::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id BAC47C0619D4 for ; Sun, 19 Jul 2020 23:12:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To: Content-Type:Content-ID:Content-Description; bh=F0w4gm+r/ZCjW2UZaGj48qh6lACFSmhuiNmBnlVqUUw=; b=gNyTj+y2AeJKACkPqR7hSsEn9k zf3tBGLvzP/J9+qAiXqvr2qY5pW4q6epcBe32qyKVwk6ldmf8xATLfvZPFDsp6GN28f8eZP0ImiAW 9lskuAOXb45pJZWTrPtYlxCLUD9kT35ugMMxKCpNEYDTrJW4jPagAQVXs7t0k9/FE4ass0Mr7k7um G0+wRpKEXYpRR3G4Uhwvd8Og+DltTSvBkstEbohunpkKcqyo+5KY8biaUfIyj6FidR8Ewd4FiWW33 fqjXwCicTCAb8BYkI+SH3E+brQGMVpfsinZO73cjZ//8pzqzkN1mLV/Oh2nB3X+AY3pupW740CL9E E7qkT4Nw==; Received: from [2001:4bb8:105:4a81:b96b:120c:c0c5:74fd] (helo=localhost) by casper.infradead.org with esmtpsa (Exim 4.92.3 #3 (Red Hat Linux)) id 1jxP2j-0006g6-1O; Mon, 20 Jul 2020 06:12:53 +0000 From: Christoph Hellwig To: axboe@kernel.dk Cc: Damien.LeMoal@wdc.com, linux-block@vger.kernel.org, dm-devel@redhat.com Subject: [PATCH 1/3] block: inherit the zoned characteristics in blk_stack_limits Date: Mon, 20 Jul 2020 08:12:49 +0200 Message-Id: <20200720061251.652457-2-hch@lst.de> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20200720061251.652457-1-hch@lst.de> References: <20200720061251.652457-1-hch@lst.de> MIME-Version: 1.0 X-SRS-Rewrite: SMTP reverse-path rewritten from by casper.infradead.org. See http://www.infradead.org/rpr.html Sender: linux-block-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-block@vger.kernel.org Lift the code from device mapper into blk_stack_limits to inherity the stacking limitations. This ensures we do the right thing for all stacked zoned block devices. Signed-off-by: Christoph Hellwig Reviewed-by: Johannes Thumshirn Reviewed-by: Damien Le Moal Acked-by: Mike Snitzer --- block/blk-settings.c | 1 + drivers/md/dm-table.c | 19 ------------------- include/linux/blkdev.h | 9 ++++++--- 3 files changed, 7 insertions(+), 22 deletions(-) diff --git a/block/blk-settings.c b/block/blk-settings.c index 9a2c23cd970073..9cddbd73647405 100644 --- a/block/blk-settings.c +++ b/block/blk-settings.c @@ -609,6 +609,7 @@ int blk_stack_limits(struct queue_limits *t, struct queue_limits *b, t->chunk_sectors = min_not_zero(t->chunk_sectors, b->chunk_sectors); + t->zoned = max(t->zoned, b->zoned); return ret; } EXPORT_SYMBOL(blk_stack_limits); diff --git a/drivers/md/dm-table.c b/drivers/md/dm-table.c index 0ea5b7367179ff..ec5364133cef7f 100644 --- a/drivers/md/dm-table.c +++ b/drivers/md/dm-table.c @@ -467,9 +467,6 @@ static int dm_set_device_limits(struct dm_target *ti, struct dm_dev *dev, q->limits.logical_block_size, q->limits.alignment_offset, (unsigned long long) start << SECTOR_SHIFT); - - limits->zoned = blk_queue_zoned_model(q); - return 0; } @@ -1528,22 +1525,6 @@ int dm_calculate_queue_limits(struct dm_table *table, dm_device_name(table->md), (unsigned long long) ti->begin, (unsigned long long) ti->len); - - /* - * FIXME: this should likely be moved to blk_stack_limits(), would - * also eliminate limits->zoned stacking hack in dm_set_device_limits() - */ - if (limits->zoned == BLK_ZONED_NONE && ti_limits.zoned != BLK_ZONED_NONE) { - /* - * By default, the stacked limits zoned model is set to - * BLK_ZONED_NONE in blk_set_stacking_limits(). Update - * this model using the first target model reported - * that is not BLK_ZONED_NONE. This will be either the - * first target device zoned model or the model reported - * by the target .io_hints. - */ - limits->zoned = ti_limits.zoned; - } } /* diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index 06995b96e94679..67b9ccc1da3560 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h @@ -306,11 +306,14 @@ enum blk_queue_state { /* * Zoned block device models (zoned limit). + * + * Note: This needs to be ordered from the least to the most severe + * restrictions for the inheritance in blk_stack_limits() to work. */ enum blk_zoned_model { - BLK_ZONED_NONE, /* Regular block device */ - BLK_ZONED_HA, /* Host-aware zoned block device */ - BLK_ZONED_HM, /* Host-managed zoned block device */ + BLK_ZONED_NONE = 0, /* Regular block device */ + BLK_ZONED_HA, /* Host-aware zoned block device */ + BLK_ZONED_HM, /* Host-managed zoned block device */ }; struct queue_limits { From patchwork Mon Jul 20 06:12:50 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christoph Hellwig X-Patchwork-Id: 11672897 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id CD2F5138C for ; Mon, 20 Jul 2020 06:12:58 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id B47002080D for ; Mon, 20 Jul 2020 06:12:58 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b="iW8rqW1R" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726890AbgGTGM6 (ORCPT ); Mon, 20 Jul 2020 02:12:58 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35442 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726854AbgGTGM5 (ORCPT ); Mon, 20 Jul 2020 02:12:57 -0400 Received: from casper.infradead.org (casper.infradead.org [IPv6:2001:8b0:10b:1236::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9152CC0619D2 for ; Sun, 19 Jul 2020 23:12:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To: Content-Type:Content-ID:Content-Description; bh=8daV8r/qFxWDHpdjOBYXBjl9K8YuFUivqt0kDie5aX4=; b=iW8rqW1RT/Z9zgoLcZzBnY59zM YN5kpZ8KFASM1guz3D/nJFSpW4Dapr1pIo7jIlIpFR6qo60+D9UbjVyBF1UersTl+LcU4zGUhjY3U xPwb5ifntZhte2og2+hffvaIFRfmMG6rwr9I9SoQGkhlqX8jlhZU9wi+fTTIrffe1buM2J2p0TkJ4 ZErJTKPcS/CXOxzNAViJ95VeEIswS8+wo5SNrx5H5wzwnR4yG+WQWXleIToY1hFfomSZDuY6sKJOI sWKy1sTuzkoerXatO2mGcE7SiImQ8QIrBcUBCbavV3BfEyk4ulyZ9t2zoN0pBS8qHy6ye3w14nEM5 lfjNmP2A==; Received: from [2001:4bb8:105:4a81:b96b:120c:c0c5:74fd] (helo=localhost) by casper.infradead.org with esmtpsa (Exim 4.92.3 #3 (Red Hat Linux)) id 1jxP2k-0006gG-Ik; Mon, 20 Jul 2020 06:12:55 +0000 From: Christoph Hellwig To: axboe@kernel.dk Cc: Damien.LeMoal@wdc.com, linux-block@vger.kernel.org, dm-devel@redhat.com Subject: [PATCH 2/3] block: remove bdev_stack_limits Date: Mon, 20 Jul 2020 08:12:50 +0200 Message-Id: <20200720061251.652457-3-hch@lst.de> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20200720061251.652457-1-hch@lst.de> References: <20200720061251.652457-1-hch@lst.de> MIME-Version: 1.0 X-SRS-Rewrite: SMTP reverse-path rewritten from by casper.infradead.org. See http://www.infradead.org/rpr.html Sender: linux-block-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-block@vger.kernel.org This function is just a tiny wrapper around blk_stack_limit and has two callers. Simplify the stack a bit by open coding it in the two callers. Signed-off-by: Christoph Hellwig Reviewed-by: Damien Le Moal Reviewed-by: Johannes Thumshirn --- block/blk-settings.c | 25 ++----------------------- drivers/md/dm-table.c | 3 ++- include/linux/blkdev.h | 2 -- 3 files changed, 4 insertions(+), 26 deletions(-) diff --git a/block/blk-settings.c b/block/blk-settings.c index 9cddbd73647405..8c63af7726850c 100644 --- a/block/blk-settings.c +++ b/block/blk-settings.c @@ -614,28 +614,6 @@ int blk_stack_limits(struct queue_limits *t, struct queue_limits *b, } EXPORT_SYMBOL(blk_stack_limits); -/** - * bdev_stack_limits - adjust queue limits for stacked drivers - * @t: the stacking driver limits (top device) - * @bdev: the component block_device (bottom) - * @start: first data sector within component device - * - * Description: - * Merges queue limits for a top device and a block_device. Returns - * 0 if alignment didn't change. Returns -1 if adding the bottom - * device caused misalignment. - */ -int bdev_stack_limits(struct queue_limits *t, struct block_device *bdev, - sector_t start) -{ - struct request_queue *bq = bdev_get_queue(bdev); - - start += get_start_sect(bdev); - - return blk_stack_limits(t, &bq->limits, start); -} -EXPORT_SYMBOL(bdev_stack_limits); - /** * disk_stack_limits - adjust queue limits for stacked drivers * @disk: MD/DM gendisk (top) @@ -651,7 +629,8 @@ void disk_stack_limits(struct gendisk *disk, struct block_device *bdev, { struct request_queue *t = disk->queue; - if (bdev_stack_limits(&t->limits, bdev, offset >> 9) < 0) { + if (blk_stack_limits(&t->limits, &bdev_get_queue(bdev)->limits, + get_start_sect(bdev) + (offset >> 9)) < 0) { char top[BDEVNAME_SIZE], bottom[BDEVNAME_SIZE]; disk_name(disk, 0, top); diff --git a/drivers/md/dm-table.c b/drivers/md/dm-table.c index ec5364133cef7f..aac4c31cfc8498 100644 --- a/drivers/md/dm-table.c +++ b/drivers/md/dm-table.c @@ -458,7 +458,8 @@ static int dm_set_device_limits(struct dm_target *ti, struct dm_dev *dev, return 0; } - if (bdev_stack_limits(limits, bdev, start) < 0) + if (blk_stack_limits(limits, &q->limits, + get_start_sect(bdev) + start) < 0) DMWARN("%s: adding target device %s caused an alignment inconsistency: " "physical_block_size=%u, logical_block_size=%u, " "alignment_offset=%u, start=%llu", diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index 67b9ccc1da3560..247b0e0a2901f0 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h @@ -1106,8 +1106,6 @@ extern void blk_set_default_limits(struct queue_limits *lim); extern void blk_set_stacking_limits(struct queue_limits *lim); extern int blk_stack_limits(struct queue_limits *t, struct queue_limits *b, sector_t offset); -extern int bdev_stack_limits(struct queue_limits *t, struct block_device *bdev, - sector_t offset); extern void disk_stack_limits(struct gendisk *disk, struct block_device *bdev, sector_t offset); extern void blk_queue_stack_limits(struct request_queue *t, struct request_queue *b); From patchwork Mon Jul 20 06:12:51 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christoph Hellwig X-Patchwork-Id: 11672899 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 06FBB138C for ; Mon, 20 Jul 2020 06:13:00 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id E18212080D for ; Mon, 20 Jul 2020 06:12:59 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b="D7k9LYQD" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726893AbgGTGM7 (ORCPT ); Mon, 20 Jul 2020 02:12:59 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35448 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726892AbgGTGM7 (ORCPT ); Mon, 20 Jul 2020 02:12:59 -0400 Received: from casper.infradead.org (casper.infradead.org [IPv6:2001:8b0:10b:1236::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id ECD3BC0619D2 for ; Sun, 19 Jul 2020 23:12:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To: Content-Type:Content-ID:Content-Description; bh=6wS8AG/dT4atadMMMMGDnuFn9Z9C/x/k+18Du5ci1CE=; b=D7k9LYQDumBiBrMRL1NiBUGTi4 yAJWZlPnyaAeNEzZQKLWMEVLLVjkenW+/agpMZtUPXH4yZy3NZ6XZO5FLm8biTIirM/b7z/fw19tg w2tZ/sOZjL5cAQazdVSyovX3ZLIMP1TV2cbBhrR3JG7iXLrxffhplAgSCGTwY9oggfV1cntSCdc1D cROT9mbd8/axNQYQ0AQsebI8ZCpQclc7mvin4yJk2VPtBINLFn9gXp98k9kxKYNIR/lgusQp/+PBd fA6AM2AkEKYdNQoIDNAECZRV8mUh7r1wCeGXOd8KW8GcRFhRvE7c4n+GsaLlcG9iNgQyr7wxXgHTk FspYrfkg==; Received: from [2001:4bb8:105:4a81:b96b:120c:c0c5:74fd] (helo=localhost) by casper.infradead.org with esmtpsa (Exim 4.92.3 #3 (Red Hat Linux)) id 1jxP2m-0006gd-GA; Mon, 20 Jul 2020 06:12:57 +0000 From: Christoph Hellwig To: axboe@kernel.dk Cc: Damien.LeMoal@wdc.com, linux-block@vger.kernel.org, dm-devel@redhat.com Subject: [PATCH 3/3] block: remove blk_queue_stack_limits Date: Mon, 20 Jul 2020 08:12:51 +0200 Message-Id: <20200720061251.652457-4-hch@lst.de> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20200720061251.652457-1-hch@lst.de> References: <20200720061251.652457-1-hch@lst.de> MIME-Version: 1.0 X-SRS-Rewrite: SMTP reverse-path rewritten from by casper.infradead.org. See http://www.infradead.org/rpr.html Sender: linux-block-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-block@vger.kernel.org This function is just a tiny wrapper around blk_stack_limits. Open code it int the two callers. Signed-off-by: Christoph Hellwig Reviewed-by: Damien Le Moal Reviewed-by: Johannes Thumshirn --- block/blk-settings.c | 11 ----------- drivers/block/drbd/drbd_nl.c | 4 ++-- drivers/nvme/host/core.c | 3 ++- include/linux/blkdev.h | 1 - 4 files changed, 4 insertions(+), 15 deletions(-) diff --git a/block/blk-settings.c b/block/blk-settings.c index 8c63af7726850c..76a7e03bcd6cac 100644 --- a/block/blk-settings.c +++ b/block/blk-settings.c @@ -455,17 +455,6 @@ void blk_queue_io_opt(struct request_queue *q, unsigned int opt) } EXPORT_SYMBOL(blk_queue_io_opt); -/** - * blk_queue_stack_limits - inherit underlying queue limits for stacked drivers - * @t: the stacking driver (top) - * @b: the underlying device (bottom) - **/ -void blk_queue_stack_limits(struct request_queue *t, struct request_queue *b) -{ - blk_stack_limits(&t->limits, &b->limits, 0); -} -EXPORT_SYMBOL(blk_queue_stack_limits); - /** * blk_stack_limits - adjust queue_limits for stacked devices * @t: the stacking driver limits (top device) diff --git a/drivers/block/drbd/drbd_nl.c b/drivers/block/drbd/drbd_nl.c index da4a3ebe04efa5..d0d9a549b58388 100644 --- a/drivers/block/drbd/drbd_nl.c +++ b/drivers/block/drbd/drbd_nl.c @@ -1250,7 +1250,7 @@ static void fixup_discard_if_not_supported(struct request_queue *q) static void fixup_write_zeroes(struct drbd_device *device, struct request_queue *q) { - /* Fixup max_write_zeroes_sectors after blk_queue_stack_limits(): + /* Fixup max_write_zeroes_sectors after blk_stack_limits(): * if we can handle "zeroes" efficiently on the protocol, * we want to do that, even if our backend does not announce * max_write_zeroes_sectors itself. */ @@ -1361,7 +1361,7 @@ static void drbd_setup_queue_param(struct drbd_device *device, struct drbd_backi decide_on_write_same_support(device, q, b, o, disable_write_same); if (b) { - blk_queue_stack_limits(q, b); + blk_stack_limits(&q->limits, &b->limits, 0); if (q->backing_dev_info->ra_pages != b->backing_dev_info->ra_pages) { diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c index 5192a024dc1b9c..45c4c408649080 100644 --- a/drivers/nvme/host/core.c +++ b/drivers/nvme/host/core.c @@ -1973,7 +1973,8 @@ static int __nvme_revalidate_disk(struct gendisk *disk, struct nvme_id_ns *id) #ifdef CONFIG_NVME_MULTIPATH if (ns->head->disk) { nvme_update_disk_info(ns->head->disk, ns, id); - blk_queue_stack_limits(ns->head->disk->queue, ns->queue); + blk_stack_limits(&ns->head->disk->queue->limits, + &ns->queue->limits, 0); revalidate_disk(ns->head->disk); } #endif diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index 247b0e0a2901f0..484cd3c8447452 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h @@ -1108,7 +1108,6 @@ extern int blk_stack_limits(struct queue_limits *t, struct queue_limits *b, sector_t offset); extern void disk_stack_limits(struct gendisk *disk, struct block_device *bdev, sector_t offset); -extern void blk_queue_stack_limits(struct request_queue *t, struct request_queue *b); extern void blk_queue_update_dma_pad(struct request_queue *, unsigned int); extern void blk_queue_segment_boundary(struct request_queue *, unsigned long); extern void blk_queue_virt_boundary(struct request_queue *, unsigned long);