From patchwork Thu Jun 25 12:21:47 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Javier_Gonz=C3=A1lez?= X-Patchwork-Id: 11625005 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 AC89390 for ; Thu, 25 Jun 2020 12:22:18 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 8EE1220709 for ; Thu, 25 Jun 2020 12:22:18 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=javigon-com.20150623.gappssmtp.com header.i=@javigon-com.20150623.gappssmtp.com header.b="ul+okasJ" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2404599AbgFYMWR (ORCPT ); Thu, 25 Jun 2020 08:22:17 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55176 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2404343AbgFYMWR (ORCPT ); Thu, 25 Jun 2020 08:22:17 -0400 Received: from mail-wm1-x342.google.com (mail-wm1-x342.google.com [IPv6:2a00:1450:4864:20::342]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1AE34C061573 for ; Thu, 25 Jun 2020 05:22:17 -0700 (PDT) Received: by mail-wm1-x342.google.com with SMTP id g75so5332566wme.5 for ; Thu, 25 Jun 2020 05:22:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=javigon-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=HUZa4ScwjxYX1rN8zZ6Z6dgZqN0kjBnH5qLQixL2WJo=; b=ul+okasJvE6KMy1WY5AmOXTy2OsCN2ysq/dGKyIV5tlWwQiDyDCzyDaskIq1dl1BqM /qPxDbl7edw/QYV4cFOx7Tp8CTjJ4O0LyON9vulEFav1f3tXAYFN+qc6D533Lx1xLE4C HTpb7v7YxzX9xjRPI87gOzU4su4qDnBRZh87wCtnG6Crwvx4hPQyJIFmgzQtJxKarW5R +P3sve4QoG3wYH01FinDNU/hYNKAvusKtuxFySrNYqkxl6ZYIBZ2JMQ2ioq26exQjsiV BK9Dq+bK9yZMeB8rSNhrx/KuGciq3Qu5u2RDZDqFShxDxdW8cO4JWk1URs5Y0DvHsU/K Oofw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=HUZa4ScwjxYX1rN8zZ6Z6dgZqN0kjBnH5qLQixL2WJo=; b=AB0u9ws0O+JXZNoihGbY613GRpE2LNSIO96gjY6xwowGCjIXA6fhS5AldN6gBtzLNx 4kk85+d+fcqYimXZcR0GBFmv1pfXI3/n3YfmoLxbVgYQoWox7P+GrQXgdHqOrWhbUT+R 7hN7Eu7nvLkjrsn97DbhVJPCQgE3JxaXOpNgNq0uIMh8U9CbT3xMBAmPuF/jfOqKQuf+ MkWPqBBWuT1nqmLmhaYPvKTbzwlWKpuho8U0tjZl7PSoiGWap3vewoGOpR2JYXZmTZG7 spi9dfqdh0OKEK0ZQWCLBKIGynnxOagdf67sz2tqy8sDh5BKKP9ltvX02tpCpGt54r81 E+4A== X-Gm-Message-State: AOAM530DT8ZCPxFtdMfjuC+X+nrfIZttkabGIA5LLn/bvRlen3dNe7SJ mrrhwdcmIU3dMfBo59vIKw6TpQ== X-Google-Smtp-Source: ABdhPJzHLz641P5clBQpIy9+k/4I437sBYg1AePtyUs11AaPJ/9WpqJ1Dw+iBmU6GO7ZVL3UDbLnsw== X-Received: by 2002:a1c:2d4b:: with SMTP id t72mr3038062wmt.105.1593087735750; Thu, 25 Jun 2020 05:22:15 -0700 (PDT) Received: from localhost.localdomain ([194.62.217.57]) by smtp.gmail.com with ESMTPSA id f186sm11934307wmf.29.2020.06.25.05.22.14 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 25 Jun 2020 05:22:15 -0700 (PDT) From: =?utf-8?q?Javier_Gonz=C3=A1lez?= To: linux-nvme@lists.infradead.org Cc: linux-block@vger.kernel.org, hch@lst.de, kbusch@kernel.org, sagi@grimberg.me, axboe@kernel.dk, =?utf-8?q?Javier_Gonz=C3=A1lez?= , SelvaKumar S , Kanchan Joshi , Nitesh Shetty Subject: [PATCH 1/6] block: introduce IOCTL for zone mgmt Date: Thu, 25 Jun 2020 14:21:47 +0200 Message-Id: <20200625122152.17359-2-javier@javigon.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200625122152.17359-1-javier@javigon.com> References: <20200625122152.17359-1-javier@javigon.com> MIME-Version: 1.0 Sender: linux-block-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-block@vger.kernel.org From: Javier González The current IOCTL interface for zone management is limited by struct blk_zone_range, which is unfortunately not extensible. Specially, the lack of flags is problematic for ZNS zoned devices. This new IOCTL is designed to be a superset of the current one, with support for flags and bits for extensibility. Signed-off-by: Javier González Signed-off-by: SelvaKumar S Signed-off-by: Kanchan Joshi Signed-off-by: Nitesh Shetty --- block/blk-zoned.c | 56 ++++++++++++++++++++++++++++++++++- block/ioctl.c | 2 ++ include/linux/blkdev.h | 9 ++++++ include/uapi/linux/blkzoned.h | 33 +++++++++++++++++++++ 4 files changed, 99 insertions(+), 1 deletion(-) diff --git a/block/blk-zoned.c b/block/blk-zoned.c index 81152a260354..e87c60004dc5 100644 --- a/block/blk-zoned.c +++ b/block/blk-zoned.c @@ -322,7 +322,7 @@ int blkdev_report_zones_ioctl(struct block_device *bdev, fmode_t mode, * BLKRESETZONE, BLKOPENZONE, BLKCLOSEZONE and BLKFINISHZONE ioctl processing. * Called from blkdev_ioctl. */ -int blkdev_zone_mgmt_ioctl(struct block_device *bdev, fmode_t mode, +int blkdev_zone_ops_ioctl(struct block_device *bdev, fmode_t mode, unsigned int cmd, unsigned long arg) { void __user *argp = (void __user *)arg; @@ -370,6 +370,60 @@ int blkdev_zone_mgmt_ioctl(struct block_device *bdev, fmode_t mode, GFP_KERNEL); } +/* + * Zone management ioctl processing. Extension of blkdev_zone_ops_ioctl(), with + * blk_zone_mgmt structure. + * + * Called from blkdev_ioctl. + */ +int blkdev_zone_mgmt_ioctl(struct block_device *bdev, fmode_t mode, + unsigned int cmd, unsigned long arg) +{ + void __user *argp = (void __user *)arg; + struct request_queue *q; + struct blk_zone_mgmt zmgmt; + enum req_opf op; + + if (!argp) + return -EINVAL; + + q = bdev_get_queue(bdev); + if (!q) + return -ENXIO; + + if (!blk_queue_is_zoned(q)) + return -ENOTTY; + + if (!capable(CAP_SYS_ADMIN)) + return -EACCES; + + if (!(mode & FMODE_WRITE)) + return -EBADF; + + if (copy_from_user(&zmgmt, argp, sizeof(struct blk_zone_mgmt))) + return -EFAULT; + + switch (zmgmt.action) { + case BLK_ZONE_MGMT_CLOSE: + op = REQ_OP_ZONE_CLOSE; + break; + case BLK_ZONE_MGMT_FINISH: + op = REQ_OP_ZONE_FINISH; + break; + case BLK_ZONE_MGMT_OPEN: + op = REQ_OP_ZONE_OPEN; + break; + case BLK_ZONE_MGMT_RESET: + op = REQ_OP_ZONE_RESET; + break; + default: + return -ENOTTY; + } + + return blkdev_zone_mgmt(bdev, op, zmgmt.sector, zmgmt.nr_sectors, + GFP_KERNEL); +} + static inline unsigned long *blk_alloc_zone_bitmap(int node, unsigned int nr_zones) { diff --git a/block/ioctl.c b/block/ioctl.c index bdb3bbb253d9..0ea29754e7dd 100644 --- a/block/ioctl.c +++ b/block/ioctl.c @@ -514,6 +514,8 @@ static int blkdev_common_ioctl(struct block_device *bdev, fmode_t mode, case BLKOPENZONE: case BLKCLOSEZONE: case BLKFINISHZONE: + return blkdev_zone_ops_ioctl(bdev, mode, cmd, arg); + case BLKMGMTZONE: return blkdev_zone_mgmt_ioctl(bdev, mode, cmd, arg); case BLKGETZONESZ: return put_uint(argp, bdev_zone_sectors(bdev)); diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index 8fd900998b4e..bd8521f94dc4 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h @@ -368,6 +368,8 @@ int blk_revalidate_disk_zones(struct gendisk *disk, extern int blkdev_report_zones_ioctl(struct block_device *bdev, fmode_t mode, unsigned int cmd, unsigned long arg); +extern int blkdev_zone_ops_ioctl(struct block_device *bdev, fmode_t mode, + unsigned int cmd, unsigned long arg); extern int blkdev_zone_mgmt_ioctl(struct block_device *bdev, fmode_t mode, unsigned int cmd, unsigned long arg); @@ -385,6 +387,13 @@ static inline int blkdev_report_zones_ioctl(struct block_device *bdev, return -ENOTTY; } + +static inline int blkdev_zone_ops_ioctl(struct block_device *bdev, fmode_t mode, + unsigned int cmd, unsigned long arg) +{ + return -ENOTTY; +} + static inline int blkdev_zone_mgmt_ioctl(struct block_device *bdev, fmode_t mode, unsigned int cmd, unsigned long arg) diff --git a/include/uapi/linux/blkzoned.h b/include/uapi/linux/blkzoned.h index 42c3366cc25f..07b5fde21d9f 100644 --- a/include/uapi/linux/blkzoned.h +++ b/include/uapi/linux/blkzoned.h @@ -142,6 +142,38 @@ struct blk_zone_range { __u64 nr_sectors; }; +/** + * enum blk_zone_action - Zone state transitions managed from user-space + * + * @BLK_ZONE_MGMT_CLOSE: Transition to Closed state + * @BLK_ZONE_MGMT_FINISH: Transition to Finish state + * @BLK_ZONE_MGMT_OPEN: Transition to Open state + * @BLK_ZONE_MGMT_RESET: Transition to Reset state + */ +enum blk_zone_action { + BLK_ZONE_MGMT_CLOSE = 0x1, + BLK_ZONE_MGMT_FINISH = 0x2, + BLK_ZONE_MGMT_OPEN = 0x3, + BLK_ZONE_MGMT_RESET = 0x4, +}; + +/** + * struct blk_zone_mgmt - Extended zoned management + * + * @action: Zone action as in described in enum blk_zone_action + * @flags: Flags for the action + * @sector: Starting sector of the first zone to operate on + * @nr_sectors: Total number of sectors of all zones to operate on + */ +struct blk_zone_mgmt { + __u8 action; + __u8 resv3[3]; + __u32 flags; + __u64 sector; + __u64 nr_sectors; + __u64 resv31; +}; + /** * Zoned block device ioctl's: * @@ -166,5 +198,6 @@ struct blk_zone_range { #define BLKOPENZONE _IOW(0x12, 134, struct blk_zone_range) #define BLKCLOSEZONE _IOW(0x12, 135, struct blk_zone_range) #define BLKFINISHZONE _IOW(0x12, 136, struct blk_zone_range) +#define BLKMGMTZONE _IOR(0x12, 137, struct blk_zone_mgmt) #endif /* _UAPI_BLKZONED_H */ From patchwork Thu Jun 25 12:21:48 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Javier_Gonz=C3=A1lez?= X-Patchwork-Id: 11625007 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 3B88090 for ; Thu, 25 Jun 2020 12:22:20 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 235F6206EB for ; Thu, 25 Jun 2020 12:22:20 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=javigon-com.20150623.gappssmtp.com header.i=@javigon-com.20150623.gappssmtp.com header.b="ifgHFoOG" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2404611AbgFYMWT (ORCPT ); Thu, 25 Jun 2020 08:22:19 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55184 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2404343AbgFYMWS (ORCPT ); Thu, 25 Jun 2020 08:22:18 -0400 Received: from mail-wr1-x443.google.com (mail-wr1-x443.google.com [IPv6:2a00:1450:4864:20::443]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 84569C061573 for ; Thu, 25 Jun 2020 05:22:18 -0700 (PDT) Received: by mail-wr1-x443.google.com with SMTP id a6so5629032wrm.4 for ; Thu, 25 Jun 2020 05:22:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=javigon-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=3bkv5TGbl7wYs9nS4zaCevytBrOA5cQbuULXOr6pl3k=; b=ifgHFoOGFnPjkhUJyWlsM6iDVmY6+dXBQ2RYy98T9hw6pqwoNJQ5ekXb4B1EPGXQT0 MRKbDXdW2C/DboFLHOyBCoGGwN+6j0+r7IzErzD0WL5hOjs9oiNUhb162G9nRHs62jlV kz9ifdRLxZeqPD3rLCIttiz6uUFMXBjw4pIScjnHGIM05F+7MWOtgNFrfcMmkAtZrep6 awZ96tfAVb0b9WvH7FJxTqrg8ZbWfmMDu/Tp8AixYn8oDKO8m+1iPpzIhs+cgICilSlt Bl1qzXwe+FYUTlI8xI6uvMzkgQgWE7/zuZofBLsJyuPoIn1fOgPlUcnSSoVBq8s3++4U bQLw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=3bkv5TGbl7wYs9nS4zaCevytBrOA5cQbuULXOr6pl3k=; b=ox3CofCDsuEsjx2xGlH1RwZB/Quw7NdhYE0cu90bROo2YZK3XtTQbnK7Hd6uh2wDbX wO6Vke9JL+Jc0MCZf2WdYNzOphn5W7/uce4jNHF1tiwfyNaAhTEjZpdOFMRv4HRdJKqS 6XjwEv5QCE53WL4PxMBtW34VWP0W4/HdtS0X2Y8fa8h3pXnBWBKtBqFfWXOM1EeyOZwo IqrUnDehRG7RtIfHoQ6Ra9cow2nCxaITWM+Kr0UjT9r7GWdgowI++7smg8otbCXlon+i rjVAjIxutRPqzPHfQTjxNNMXlqUjBQ54thiTRq8akca3n5g1oJDnx+mxZrI4/KXKEp9L 0lOw== X-Gm-Message-State: AOAM533rWU6Xd5CgkJViQsWtop3ouElqMGEHtO/MoHmKR4QSvkErYqct QxOKr4z28pA1niOllbOmHCYlhg== X-Google-Smtp-Source: ABdhPJzF8GY0GnEa29w1laEfJi/6dSjQwhhYGR9JKKjHg3d8xUSjch6Sz0P0cntsTzsVn5L/uRebXw== X-Received: by 2002:adf:f54b:: with SMTP id j11mr20889677wrp.206.1593087737294; Thu, 25 Jun 2020 05:22:17 -0700 (PDT) Received: from localhost.localdomain ([194.62.217.57]) by smtp.gmail.com with ESMTPSA id f186sm11934307wmf.29.2020.06.25.05.22.15 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 25 Jun 2020 05:22:16 -0700 (PDT) From: =?utf-8?q?Javier_Gonz=C3=A1lez?= To: linux-nvme@lists.infradead.org Cc: linux-block@vger.kernel.org, hch@lst.de, kbusch@kernel.org, sagi@grimberg.me, axboe@kernel.dk, =?utf-8?q?Javier_Gonz=C3=A1lez?= , SelvaKumar S , Kanchan Joshi , Nitesh Shetty Subject: [PATCH 2/6] block: add support for selecting all zones Date: Thu, 25 Jun 2020 14:21:48 +0200 Message-Id: <20200625122152.17359-3-javier@javigon.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200625122152.17359-1-javier@javigon.com> References: <20200625122152.17359-1-javier@javigon.com> MIME-Version: 1.0 Sender: linux-block-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-block@vger.kernel.org From: Javier González Add flag to allow selecting all zones on a single zone management operation Signed-off-by: Javier González Signed-off-by: SelvaKumar S Signed-off-by: Kanchan Joshi Signed-off-by: Nitesh Shetty --- block/blk-zoned.c | 3 +++ include/linux/blk_types.h | 3 ++- include/uapi/linux/blkzoned.h | 9 +++++++++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/block/blk-zoned.c b/block/blk-zoned.c index e87c60004dc5..29194388a1bb 100644 --- a/block/blk-zoned.c +++ b/block/blk-zoned.c @@ -420,6 +420,9 @@ int blkdev_zone_mgmt_ioctl(struct block_device *bdev, fmode_t mode, return -ENOTTY; } + if (zmgmt.flags & BLK_ZONE_SELECT_ALL) + op |= REQ_ZONE_ALL; + return blkdev_zone_mgmt(bdev, op, zmgmt.sector, zmgmt.nr_sectors, GFP_KERNEL); } diff --git a/include/linux/blk_types.h b/include/linux/blk_types.h index ccb895f911b1..16b57fb2b99c 100644 --- a/include/linux/blk_types.h +++ b/include/linux/blk_types.h @@ -351,6 +351,7 @@ enum req_flag_bits { * work item to avoid such priority inversions. */ __REQ_CGROUP_PUNT, + __REQ_ZONE_ALL, /* apply zone operation to all zones */ /* command specific flags for REQ_OP_WRITE_ZEROES: */ __REQ_NOUNMAP, /* do not free blocks when zeroing */ @@ -378,7 +379,7 @@ enum req_flag_bits { #define REQ_BACKGROUND (1ULL << __REQ_BACKGROUND) #define REQ_NOWAIT (1ULL << __REQ_NOWAIT) #define REQ_CGROUP_PUNT (1ULL << __REQ_CGROUP_PUNT) - +#define REQ_ZONE_ALL (1ULL << __REQ_ZONE_ALL) #define REQ_NOUNMAP (1ULL << __REQ_NOUNMAP) #define REQ_HIPRI (1ULL << __REQ_HIPRI) diff --git a/include/uapi/linux/blkzoned.h b/include/uapi/linux/blkzoned.h index 07b5fde21d9f..a8c89fe58f97 100644 --- a/include/uapi/linux/blkzoned.h +++ b/include/uapi/linux/blkzoned.h @@ -157,6 +157,15 @@ enum blk_zone_action { BLK_ZONE_MGMT_RESET = 0x4, }; +/** + * enum blk_zone_mgmt_flags - Flags for blk_zone_mgmt + * + * BLK_ZONE_SELECT_ALL: Select all zones for current zone action + */ +enum blk_zone_mgmt_flags { + BLK_ZONE_SELECT_ALL = 1 << 0, +}; + /** * struct blk_zone_mgmt - Extended zoned management * From patchwork Thu Jun 25 12:21:49 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Javier_Gonz=C3=A1lez?= X-Patchwork-Id: 11625009 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 695B790 for ; Thu, 25 Jun 2020 12:22:22 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 51B9620720 for ; Thu, 25 Jun 2020 12:22:22 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=javigon-com.20150623.gappssmtp.com header.i=@javigon-com.20150623.gappssmtp.com header.b="Kh44WkYO" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2404612AbgFYMWV (ORCPT ); Thu, 25 Jun 2020 08:22:21 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55190 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2404343AbgFYMWU (ORCPT ); Thu, 25 Jun 2020 08:22:20 -0400 Received: from mail-wm1-x341.google.com (mail-wm1-x341.google.com [IPv6:2a00:1450:4864:20::341]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 54966C061573 for ; Thu, 25 Jun 2020 05:22:20 -0700 (PDT) Received: by mail-wm1-x341.google.com with SMTP id t194so5706113wmt.4 for ; Thu, 25 Jun 2020 05:22:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=javigon-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=2L00CNHKBCbfy3cMWAQy/pd7OUpZtWDs/eSSmk8PMi4=; b=Kh44WkYOain0Pp75DcY1C7bHN1YW5+QHFdo0wKvqm9K7NX2tVMrXpvj0g6MLYu+In9 6l8Xk8BxfTXc6h02EsJj/CABUJVdAsbvA4lCOPPMgSOEnZXXp9t7zWzNnf65+lyl6Lyz zjRuKiajCZJBs3MdoA4P9WnKTWsYDL9rOITff9JoBR5oxIwH8PgFJ1J2HcbLzt18F1dq n8xTt4fzX3bFSM/myHNFJPFcraZDxYSu+DnKkSXsaeU7QHUfT8Naodsb+K6Fb6LTrD+K a+mUhAfxMtNS+cS0JuxLOjLeIYaqPvdllhcjxmDI+pLRpnG7a4JmFLELeZ3nSRO8Mc6R P7OA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=2L00CNHKBCbfy3cMWAQy/pd7OUpZtWDs/eSSmk8PMi4=; b=jcl8yXe7aytOs/3aicQt0Cgfzyo3VOsSl96QvjBP74/3ouTNrMS9XmQfqOW7Es8lNi tbYqg8iHdx9+ZwiHel3wHDYHcjq8e1yrk3e93sQz4vkvSnf9pwgXHmJkmgB/Ig5GMJBX aawIlhyRJXZ/FxGq5pAkC+m61d3hNRz2zV/wCyaTeIsaygF51Sa3M6vci5Wkc2Z9Ecm+ HmNDdB5f/0DwGuiormJ4FMhIIv2YadeGen27tzf93IbNWUKiYnPDwrp5TbG4COqI6al2 byXWukIU1ZMtKMMlmV/Kh6bzIFrQslHkpZvYtOVLpP7qE8IU5UHZS8oTjldZo5LVVpAA Orvw== X-Gm-Message-State: AOAM532q1jNxxApHYPk6qxiqyChpKLcxgHgyj0RMPS3oY/xAOEahOlnP //bLpJ7hhpDnwLXPR+K4TFXang== X-Google-Smtp-Source: ABdhPJwLQKCVAuxkPWqx617ggfLTUwSVHSwvKTQYrG5rXSz42pycHLAu2PUhv9lJFRFCtaThehrtNw== X-Received: by 2002:a1c:bc8a:: with SMTP id m132mr2389198wmf.1.1593087738990; Thu, 25 Jun 2020 05:22:18 -0700 (PDT) Received: from localhost.localdomain ([194.62.217.57]) by smtp.gmail.com with ESMTPSA id f186sm11934307wmf.29.2020.06.25.05.22.17 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 25 Jun 2020 05:22:18 -0700 (PDT) From: =?utf-8?q?Javier_Gonz=C3=A1lez?= To: linux-nvme@lists.infradead.org Cc: linux-block@vger.kernel.org, hch@lst.de, kbusch@kernel.org, sagi@grimberg.me, axboe@kernel.dk, =?utf-8?q?Javier_Gonz=C3=A1lez?= , SelvaKumar S , Kanchan Joshi , Nitesh Shetty Subject: [PATCH 3/6] block: add support for zone offline transition Date: Thu, 25 Jun 2020 14:21:49 +0200 Message-Id: <20200625122152.17359-4-javier@javigon.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200625122152.17359-1-javier@javigon.com> References: <20200625122152.17359-1-javier@javigon.com> MIME-Version: 1.0 Sender: linux-block-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-block@vger.kernel.org From: Javier González Add support for offline transition on the zoned block device using the new zone management IOCTL Signed-off-by: Javier González Signed-off-by: SelvaKumar S Signed-off-by: Kanchan Joshi Signed-off-by: Nitesh Shetty --- block/blk-core.c | 2 ++ block/blk-zoned.c | 3 +++ drivers/nvme/host/core.c | 3 +++ include/linux/blk_types.h | 3 +++ include/linux/blkdev.h | 1 - include/uapi/linux/blkzoned.h | 1 + 6 files changed, 12 insertions(+), 1 deletion(-) diff --git a/block/blk-core.c b/block/blk-core.c index 03252af8c82c..589cbdacc5ec 100644 --- a/block/blk-core.c +++ b/block/blk-core.c @@ -140,6 +140,7 @@ static const char *const blk_op_name[] = { REQ_OP_NAME(ZONE_CLOSE), REQ_OP_NAME(ZONE_FINISH), REQ_OP_NAME(ZONE_APPEND), + REQ_OP_NAME(ZONE_OFFLINE), REQ_OP_NAME(WRITE_SAME), REQ_OP_NAME(WRITE_ZEROES), REQ_OP_NAME(SCSI_IN), @@ -1030,6 +1031,7 @@ generic_make_request_checks(struct bio *bio) case REQ_OP_ZONE_OPEN: case REQ_OP_ZONE_CLOSE: case REQ_OP_ZONE_FINISH: + case REQ_OP_ZONE_OFFLINE: if (!blk_queue_is_zoned(q)) goto not_supported; break; diff --git a/block/blk-zoned.c b/block/blk-zoned.c index 29194388a1bb..704fc15813d1 100644 --- a/block/blk-zoned.c +++ b/block/blk-zoned.c @@ -416,6 +416,9 @@ int blkdev_zone_mgmt_ioctl(struct block_device *bdev, fmode_t mode, case BLK_ZONE_MGMT_RESET: op = REQ_OP_ZONE_RESET; break; + case BLK_ZONE_MGMT_OFFLINE: + op = REQ_OP_ZONE_OFFLINE; + break; default: return -ENOTTY; } diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c index f1215523792b..5b95c81d2a2d 100644 --- a/drivers/nvme/host/core.c +++ b/drivers/nvme/host/core.c @@ -776,6 +776,9 @@ blk_status_t nvme_setup_cmd(struct nvme_ns *ns, struct request *req, case REQ_OP_ZONE_FINISH: ret = nvme_setup_zone_mgmt_send(ns, req, cmd, NVME_ZONE_FINISH); break; + case REQ_OP_ZONE_OFFLINE: + ret = nvme_setup_zone_mgmt_send(ns, req, cmd, NVME_ZONE_OFFLINE); + break; case REQ_OP_WRITE_ZEROES: ret = nvme_setup_write_zeroes(ns, req, cmd); break; diff --git a/include/linux/blk_types.h b/include/linux/blk_types.h index 16b57fb2b99c..b3921263c3dd 100644 --- a/include/linux/blk_types.h +++ b/include/linux/blk_types.h @@ -316,6 +316,8 @@ enum req_opf { REQ_OP_ZONE_FINISH = 12, /* write data at the current zone write pointer */ REQ_OP_ZONE_APPEND = 13, + /* Transition a zone to offline */ + REQ_OP_ZONE_OFFLINE = 14, /* SCSI passthrough using struct scsi_request */ REQ_OP_SCSI_IN = 32, @@ -456,6 +458,7 @@ static inline bool op_is_zone_mgmt(enum req_opf op) case REQ_OP_ZONE_OPEN: case REQ_OP_ZONE_CLOSE: case REQ_OP_ZONE_FINISH: + case REQ_OP_ZONE_OFFLINE: return true; default: return false; diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index bd8521f94dc4..8308d8a3720b 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h @@ -372,7 +372,6 @@ extern int blkdev_zone_ops_ioctl(struct block_device *bdev, fmode_t mode, unsigned int cmd, unsigned long arg); extern int blkdev_zone_mgmt_ioctl(struct block_device *bdev, fmode_t mode, unsigned int cmd, unsigned long arg); - #else /* CONFIG_BLK_DEV_ZONED */ static inline unsigned int blkdev_nr_zones(struct gendisk *disk) diff --git a/include/uapi/linux/blkzoned.h b/include/uapi/linux/blkzoned.h index a8c89fe58f97..d0978ee10fc7 100644 --- a/include/uapi/linux/blkzoned.h +++ b/include/uapi/linux/blkzoned.h @@ -155,6 +155,7 @@ enum blk_zone_action { BLK_ZONE_MGMT_FINISH = 0x2, BLK_ZONE_MGMT_OPEN = 0x3, BLK_ZONE_MGMT_RESET = 0x4, + BLK_ZONE_MGMT_OFFLINE = 0x5, }; /** From patchwork Thu Jun 25 12:21:50 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Javier_Gonz=C3=A1lez?= X-Patchwork-Id: 11625011 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 C59A090 for ; Thu, 25 Jun 2020 12:22:23 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id A7DA220709 for ; Thu, 25 Jun 2020 12:22:23 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=javigon-com.20150623.gappssmtp.com header.i=@javigon-com.20150623.gappssmtp.com header.b="vHo7xwxm" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2404614AbgFYMWW (ORCPT ); Thu, 25 Jun 2020 08:22:22 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55196 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2404343AbgFYMWV (ORCPT ); Thu, 25 Jun 2020 08:22:21 -0400 Received: from mail-wm1-x341.google.com (mail-wm1-x341.google.com [IPv6:2a00:1450:4864:20::341]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A82E2C061573 for ; Thu, 25 Jun 2020 05:22:21 -0700 (PDT) Received: by mail-wm1-x341.google.com with SMTP id 22so5353749wmg.1 for ; Thu, 25 Jun 2020 05:22:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=javigon-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=QVuXuxH0RNZPwMvVhvbrXP1I5MxGr3zaHjUTrH2fxlk=; b=vHo7xwxmqOdYNMOvQx07xNLkFAP2waiv+m/15GQK2UltT6rqpl+ZpkV/4ojbItx0pF dqQdaGpDJFRX2RkGz74qBqXSpxNXhqN8eqY4UJ7Kphs1G4HPJaK3DTQFT9fewqvMTWIW wen3a8jEhmx/HuouCnBOLTQXiZovIcdOV0ApI7D7CQKYzq2vhuiJZRuJntQA39n0VKDo sP5EhUnDp3oWgankJ0C0wH9kwFnzVyIsg0IzMdYDmgNuOHf6LLerFjYI05/qYU1rpTHd i7aWNzZgP6Rjecv3Z3cvx66m3P4hCtWOw8cQu/0x4bnwoZmgv+0okA+XXda+TZ2jtB2V UDCg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=QVuXuxH0RNZPwMvVhvbrXP1I5MxGr3zaHjUTrH2fxlk=; b=HaAZhHUqGvtfLv0ubo+X2sW2/559LPCTym8cB0P6ebHUMcM32jkqMG/kspGRn8m3Jp fE524dMFLNos5wszzB0vGlO5vdSeMRmt1TeA4dRaEhiwLIgfzJoF3o4cag9Z49M3bWu1 ipIy9gfVhljaM1IgpzAAzlzNYh1tEsaaOLFFWG2syARV5geav+y5l1/z2D+xvOTsxbdK pOEfH98ftTQyk/ASXT9wrvf26uvcV2h9mM8T1p6KJ/GHXreDI+LmqhbIF/Xxl/92N6MH cD7sel0HRN227bU6ZaXtPl6fKMZS6StHp06PzIuDDDiR/Jj/UdbeKmn612vBWfJEvdOB SqBw== X-Gm-Message-State: AOAM533PApVVUvN/vTGrZ5T+xjtfUh4XdpM8Kd/Z4sAYs6ANSbKelIr1 D4OtcehjFq+LOXYXPvw0M/Uo8g== X-Google-Smtp-Source: ABdhPJxhoSDTi3pCSQ8kawblF+mFjhNea/BYV8xSU7/d52ouMJ+4GKd7wcR/svTt1L1C6vyKCBeQLA== X-Received: by 2002:a1c:2d4d:: with SMTP id t74mr3280279wmt.177.1593087740314; Thu, 25 Jun 2020 05:22:20 -0700 (PDT) Received: from localhost.localdomain ([194.62.217.57]) by smtp.gmail.com with ESMTPSA id f186sm11934307wmf.29.2020.06.25.05.22.19 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 25 Jun 2020 05:22:19 -0700 (PDT) From: =?utf-8?q?Javier_Gonz=C3=A1lez?= To: linux-nvme@lists.infradead.org Cc: linux-block@vger.kernel.org, hch@lst.de, kbusch@kernel.org, sagi@grimberg.me, axboe@kernel.dk, =?utf-8?q?Javier_Gonz=C3=A1lez?= , SelvaKumar S , Kanchan Joshi , Nitesh Shetty Subject: [PATCH 4/6] block: introduce IOCTL to report dev properties Date: Thu, 25 Jun 2020 14:21:50 +0200 Message-Id: <20200625122152.17359-5-javier@javigon.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200625122152.17359-1-javier@javigon.com> References: <20200625122152.17359-1-javier@javigon.com> MIME-Version: 1.0 Sender: linux-block-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-block@vger.kernel.org From: Javier González With the addition of ZNS, a new set of properties have been added to the zoned block device. This patch introduces a new IOCTL to expose these rroperties to user space. Signed-off-by: Javier González Signed-off-by: SelvaKumar S Signed-off-by: Kanchan Joshi Signed-off-by: Nitesh Shetty --- block/blk-zoned.c | 46 ++++++++++++++++++++++++++ block/ioctl.c | 2 ++ drivers/nvme/host/core.c | 2 ++ drivers/nvme/host/nvme.h | 11 +++++++ drivers/nvme/host/zns.c | 61 +++++++++++++++++++++++++++++++++++ include/linux/blkdev.h | 9 ++++++ include/uapi/linux/blkzoned.h | 13 ++++++++ 7 files changed, 144 insertions(+) diff --git a/block/blk-zoned.c b/block/blk-zoned.c index 704fc15813d1..39ec72af9537 100644 --- a/block/blk-zoned.c +++ b/block/blk-zoned.c @@ -169,6 +169,17 @@ int blkdev_report_zones(struct block_device *bdev, sector_t sector, } EXPORT_SYMBOL_GPL(blkdev_report_zones); +static int blkdev_report_zonedev_prop(struct block_device *bdev, + struct blk_zone_dev *zprop) +{ + struct gendisk *disk = bdev->bd_disk; + + if (WARN_ON_ONCE(!bdev->bd_disk->fops->report_zone_p)) + return -EOPNOTSUPP; + + return disk->fops->report_zone_p(disk, zprop); +} + static inline bool blkdev_allow_reset_all_zones(struct block_device *bdev, sector_t sector, sector_t nr_sectors) @@ -430,6 +441,41 @@ int blkdev_zone_mgmt_ioctl(struct block_device *bdev, fmode_t mode, GFP_KERNEL); } +int blkdev_zonedev_prop(struct block_device *bdev, fmode_t mode, + unsigned int cmd, unsigned long arg) +{ + void __user *argp = (void __user *)arg; + struct request_queue *q; + struct blk_zone_dev zprop; + int ret; + + if (!argp) + return -EINVAL; + + q = bdev_get_queue(bdev); + if (!q) + return -ENXIO; + + if (!blk_queue_is_zoned(q)) + return -ENOTTY; + + if (!capable(CAP_SYS_ADMIN)) + return -EACCES; + + if (!(mode & FMODE_WRITE)) + return -EBADF; + + ret = blkdev_report_zonedev_prop(bdev, &zprop); + if (ret) + goto out; + + if (copy_to_user(argp, &zprop, sizeof(struct blk_zone_dev))) + return -EFAULT; + +out: + return ret; +} + static inline unsigned long *blk_alloc_zone_bitmap(int node, unsigned int nr_zones) { diff --git a/block/ioctl.c b/block/ioctl.c index 0ea29754e7dd..f7b4e0f2dd4c 100644 --- a/block/ioctl.c +++ b/block/ioctl.c @@ -517,6 +517,8 @@ static int blkdev_common_ioctl(struct block_device *bdev, fmode_t mode, return blkdev_zone_ops_ioctl(bdev, mode, cmd, arg); case BLKMGMTZONE: return blkdev_zone_mgmt_ioctl(bdev, mode, cmd, arg); + case BLKZONEDEVPROP: + return blkdev_zonedev_prop(bdev, mode, cmd, arg); case BLKGETZONESZ: return put_uint(argp, bdev_zone_sectors(bdev)); case BLKGETNRZONES: diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c index 5b95c81d2a2d..a32c909a915f 100644 --- a/drivers/nvme/host/core.c +++ b/drivers/nvme/host/core.c @@ -2254,6 +2254,7 @@ static const struct block_device_operations nvme_fops = { .getgeo = nvme_getgeo, .revalidate_disk= nvme_revalidate_disk, .report_zones = nvme_report_zones, + .report_zone_p = nvme_report_zone_prop, .pr_ops = &nvme_pr_ops, }; @@ -2280,6 +2281,7 @@ const struct block_device_operations nvme_ns_head_ops = { .compat_ioctl = nvme_compat_ioctl, .getgeo = nvme_getgeo, .report_zones = nvme_report_zones, + .report_zone_p = nvme_report_zone_prop, .pr_ops = &nvme_pr_ops, }; #endif /* CONFIG_NVME_MULTIPATH */ diff --git a/drivers/nvme/host/nvme.h b/drivers/nvme/host/nvme.h index ecf443efdf91..172e0531f37f 100644 --- a/drivers/nvme/host/nvme.h +++ b/drivers/nvme/host/nvme.h @@ -407,6 +407,14 @@ struct nvme_ns { u8 pi_type; #ifdef CONFIG_BLK_DEV_ZONED u64 zsze; + + u32 nr_zones; + u32 mar; + u32 mor; + u32 rrl; + u32 frl; + u16 zoc; + u16 ozcs; #endif unsigned long features; unsigned long flags; @@ -704,11 +712,14 @@ int nvme_update_zone_info(struct gendisk *disk, struct nvme_ns *ns, int nvme_report_zones(struct gendisk *disk, sector_t sector, unsigned int nr_zones, report_zones_cb cb, void *data); +int nvme_report_zone_prop(struct gendisk *disk, struct blk_zone_dev *zprop); + blk_status_t nvme_setup_zone_mgmt_send(struct nvme_ns *ns, struct request *req, struct nvme_command *cmnd, enum nvme_zone_mgmt_action action); #else #define nvme_report_zones NULL +#define nvme_report_zone_prop NULL static inline blk_status_t nvme_setup_zone_mgmt_send(struct nvme_ns *ns, struct request *req, struct nvme_command *cmnd, diff --git a/drivers/nvme/host/zns.c b/drivers/nvme/host/zns.c index 2e6512ac6f01..258d03610cc0 100644 --- a/drivers/nvme/host/zns.c +++ b/drivers/nvme/host/zns.c @@ -32,6 +32,28 @@ static int nvme_set_max_append(struct nvme_ctrl *ctrl) return 0; } +static u64 nvme_zns_nr_zones(struct nvme_ns *ns) +{ + struct nvme_command c = { }; + struct nvme_zone_report report; + int buflen = sizeof(struct nvme_zone_report); + int ret; + + c.zmr.opcode = nvme_cmd_zone_mgmt_recv; + c.zmr.nsid = cpu_to_le32(ns->head->ns_id); + c.zmr.slba = cpu_to_le64(0); + c.zmr.numd = cpu_to_le32(nvme_bytes_to_numd(buflen)); + c.zmr.zra = NVME_ZRA_ZONE_REPORT; + c.zmr.zrasf = NVME_ZRASF_ZONE_REPORT_ALL; + c.zmr.pr = 0; + + ret = nvme_submit_sync_cmd(ns->queue, &c, &report, buflen); + if (ret) + return ret; + + return le64_to_cpu(report.nr_zones); +} + int nvme_update_zone_info(struct gendisk *disk, struct nvme_ns *ns, unsigned lbaf) { @@ -87,6 +109,13 @@ int nvme_update_zone_info(struct gendisk *disk, struct nvme_ns *ns, goto free_data; } + ns->nr_zones = nvme_zns_nr_zones(ns); + ns->mar = le32_to_cpu(id->mar); + ns->mor = le32_to_cpu(id->mor); + ns->rrl = le32_to_cpu(id->rrl); + ns->frl = le32_to_cpu(id->frl); + ns->zoc = le16_to_cpu(id->zoc); + q->limits.zoned = BLK_ZONED_HM; blk_queue_flag_set(QUEUE_FLAG_ZONE_RESETALL, q); free_data: @@ -230,6 +259,38 @@ int nvme_report_zones(struct gendisk *disk, sector_t sector, return ret; } +static int nvme_ns_report_zone_prop(struct nvme_ns *ns, struct blk_zone_dev *zprop) +{ + zprop->nr_zones = ns->nr_zones; + zprop->zoc = ns->zoc; + zprop->ozcs = ns->ozcs; + zprop->mar = ns->mar; + zprop->mor = ns->mor; + zprop->rrl = ns->rrl; + zprop->frl = ns->frl; + + return 0; +} + +int nvme_report_zone_prop(struct gendisk *disk, struct blk_zone_dev *zprop) +{ + struct nvme_ns_head *head = NULL; + struct nvme_ns *ns; + int srcu_idx, ret; + + ns = nvme_get_ns_from_disk(disk, &head, &srcu_idx); + if (unlikely(!ns)) + return -EWOULDBLOCK; + + if (ns->head->ids.csi == NVME_CSI_ZNS) + ret = nvme_ns_report_zone_prop(ns, zprop); + else + ret = -EINVAL; + nvme_put_ns_from_disk(head, srcu_idx); + + return ret; +} + blk_status_t nvme_setup_zone_mgmt_send(struct nvme_ns *ns, struct request *req, struct nvme_command *c, enum nvme_zone_mgmt_action action) { diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index 8308d8a3720b..0c0faa58b7f4 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h @@ -372,6 +372,8 @@ extern int blkdev_zone_ops_ioctl(struct block_device *bdev, fmode_t mode, unsigned int cmd, unsigned long arg); extern int blkdev_zone_mgmt_ioctl(struct block_device *bdev, fmode_t mode, unsigned int cmd, unsigned long arg); +extern int blkdev_zonedev_prop(struct block_device *bdev, fmode_t mode, + unsigned int cmd, unsigned long arg); #else /* CONFIG_BLK_DEV_ZONED */ static inline unsigned int blkdev_nr_zones(struct gendisk *disk) @@ -400,6 +402,12 @@ static inline int blkdev_zone_mgmt_ioctl(struct block_device *bdev, return -ENOTTY; } +static inline int blkdev_zonedev_prop(struct block_device *bdev, fmode_t mode, + unsigned int cmd, unsigned long arg) +{ + return -ENOTTY; +} + #endif /* CONFIG_BLK_DEV_ZONED */ struct request_queue { @@ -1770,6 +1778,7 @@ struct block_device_operations { int (*report_zones)(struct gendisk *, sector_t sector, unsigned int nr_zones, report_zones_cb cb, void *data); char *(*devnode)(struct gendisk *disk, umode_t *mode); + int (*report_zone_p)(struct gendisk *disk, struct blk_zone_dev *zprop); struct module *owner; const struct pr_ops *pr_ops; }; diff --git a/include/uapi/linux/blkzoned.h b/include/uapi/linux/blkzoned.h index d0978ee10fc7..0c49a4b2ce5d 100644 --- a/include/uapi/linux/blkzoned.h +++ b/include/uapi/linux/blkzoned.h @@ -142,6 +142,18 @@ struct blk_zone_range { __u64 nr_sectors; }; +struct blk_zone_dev { + __u32 nr_zones; + __u32 mar; + __u32 mor; + __u32 rrl; + __u32 frl; + __u16 zoc; + __u16 ozcs; + __u32 rsv31[2]; + __u64 rsv63[4]; +}; + /** * enum blk_zone_action - Zone state transitions managed from user-space * @@ -209,5 +221,6 @@ struct blk_zone_mgmt { #define BLKCLOSEZONE _IOW(0x12, 135, struct blk_zone_range) #define BLKFINISHZONE _IOW(0x12, 136, struct blk_zone_range) #define BLKMGMTZONE _IOR(0x12, 137, struct blk_zone_mgmt) +#define BLKZONEDEVPROP _IOR(0x12, 138, struct blk_zone_dev) #endif /* _UAPI_BLKZONED_H */ From patchwork Thu Jun 25 12:21:51 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Javier_Gonz=C3=A1lez?= X-Patchwork-Id: 11625013 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 EA450138C for ; Thu, 25 Jun 2020 12:22:25 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id D22F4206EB for ; Thu, 25 Jun 2020 12:22:25 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=javigon-com.20150623.gappssmtp.com header.i=@javigon-com.20150623.gappssmtp.com header.b="pKwqM6/B" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2404619AbgFYMWY (ORCPT ); Thu, 25 Jun 2020 08:22:24 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55200 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2404508AbgFYMWY (ORCPT ); Thu, 25 Jun 2020 08:22:24 -0400 Received: from mail-wr1-x441.google.com (mail-wr1-x441.google.com [IPv6:2a00:1450:4864:20::441]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D4B78C0613ED for ; Thu, 25 Jun 2020 05:22:22 -0700 (PDT) Received: by mail-wr1-x441.google.com with SMTP id h15so5613172wrq.8 for ; Thu, 25 Jun 2020 05:22:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=javigon-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Uplg47+RomE9YaWxZaB8jq75+RVgxneSzcAc8bd9ca0=; b=pKwqM6/BNNtcXKCnqMZeye8/adtX0X/kD2BvhvoojAvfru7Z8ZK4mKkjbZbxp9tbWo HxBdLz44Pni9xhrCCnd1oFt9oJPzvizNfc78+H5GGICH+/lGRMs85hCDdmPwoXSmoJWx at8xpmekaKwqpaNJaMuZRrmjniqcFCJNPPnTVEvl27FQZXMuXayOxT9X+zBX7oK23xsX nUD9rOQ52tE5Yn9OZHGOBlXhWWJjJVl6dziT27/AxnVGLJLunr3bGLnHw451QsydaDDc hlc4yoAUoY6iy/JrUOGAxRvOTpwG9/fEakD1h5bJK/4gahehBNDeLxdoJ0JOWImgk3r1 SULw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Uplg47+RomE9YaWxZaB8jq75+RVgxneSzcAc8bd9ca0=; b=eVwOjU+uoAcgp2N+omUoxt7/40x6tVUc/t32YqfQ0MQIrDsel24Ed2L0XVrJDVNmhp d4W+XULnfWB3y8baJX40yHDFftykIwj0NrQkCxhUk8VcA8GYAscyNBGiHhSKM/7nllq2 CWI71pWQnIJE3yvGJuib/R6+MU5g+Rr+lV+AUA1cZHwgwy4ff6G1TZCUS7TSefLM6f0k vKF0HX9hSN9szKORBih4vbEqVpLUJnp84RpE95UqpiPC75bHE4U5gTYeTXg61igSn2Il LImJRAMCSvjJ3pFPRSI2EO/6rVkU37Fcr/xYFiVTG1BmNVRE1zOeFmVpgAPW7p0hi/96 pQYw== X-Gm-Message-State: AOAM533FdPrZYUQ6MkhpBPhLw/2M8NKgHfc/TW4PmRK0x6fVRQ+0R69E b8/ohwxUy3xpqtFEGwpNGbFPeA== X-Google-Smtp-Source: ABdhPJzl2u7SbnklyFfMa/Qyq7hFxasyRw6r1/oAry3ecNHjaxknZiMpQeqk9tjHTb1+Tl39UBn2Qg== X-Received: by 2002:a5d:68cc:: with SMTP id p12mr2763592wrw.111.1593087741592; Thu, 25 Jun 2020 05:22:21 -0700 (PDT) Received: from localhost.localdomain ([194.62.217.57]) by smtp.gmail.com with ESMTPSA id f186sm11934307wmf.29.2020.06.25.05.22.20 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 25 Jun 2020 05:22:20 -0700 (PDT) From: =?utf-8?q?Javier_Gonz=C3=A1lez?= To: linux-nvme@lists.infradead.org Cc: linux-block@vger.kernel.org, hch@lst.de, kbusch@kernel.org, sagi@grimberg.me, axboe@kernel.dk, =?utf-8?q?Javier_Gonz=C3=A1lez?= , SelvaKumar S , Kanchan Joshi , Nitesh Shetty Subject: [PATCH 5/6] block: add zone attr. to zone mgmt IOCTL struct Date: Thu, 25 Jun 2020 14:21:51 +0200 Message-Id: <20200625122152.17359-6-javier@javigon.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200625122152.17359-1-javier@javigon.com> References: <20200625122152.17359-1-javier@javigon.com> MIME-Version: 1.0 Sender: linux-block-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-block@vger.kernel.org From: Javier González Add zone attributes field to the blk_zone structure. Use ZNS attributes as base for zoned block devices in general. Signed-off-by: Javier González Signed-off-by: SelvaKumar S Signed-off-by: Kanchan Joshi Signed-off-by: Nitesh Shetty --- drivers/nvme/host/zns.c | 1 + include/uapi/linux/blkzoned.h | 13 ++++++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/drivers/nvme/host/zns.c b/drivers/nvme/host/zns.c index 258d03610cc0..7d8381fe7665 100644 --- a/drivers/nvme/host/zns.c +++ b/drivers/nvme/host/zns.c @@ -195,6 +195,7 @@ static int nvme_zone_parse_entry(struct nvme_ns *ns, zone.capacity = nvme_lba_to_sect(ns, le64_to_cpu(entry->zcap)); zone.start = nvme_lba_to_sect(ns, le64_to_cpu(entry->zslba)); zone.wp = nvme_lba_to_sect(ns, le64_to_cpu(entry->wp)); + zone.attr = entry->za; return cb(&zone, idx, data); } diff --git a/include/uapi/linux/blkzoned.h b/include/uapi/linux/blkzoned.h index 0c49a4b2ce5d..2e43a00e3425 100644 --- a/include/uapi/linux/blkzoned.h +++ b/include/uapi/linux/blkzoned.h @@ -82,6 +82,16 @@ enum blk_zone_report_flags { BLK_ZONE_REP_CAPACITY = (1 << 0), }; +/** + * Zone Attributes + */ +enum blk_zone_attr { + BLK_ZONE_ATTR_ZFC = 1 << 0, + BLK_ZONE_ATTR_FZR = 1 << 1, + BLK_ZONE_ATTR_RZR = 1 << 2, + BLK_ZONE_ATTR_ZDEV = 1 << 7, +}; + /** * struct blk_zone - Zone descriptor for BLKREPORTZONE ioctl. * @@ -108,7 +118,8 @@ struct blk_zone { __u8 cond; /* Zone condition */ __u8 non_seq; /* Non-sequential write resources active */ __u8 reset; /* Reset write pointer recommended */ - __u8 resv[4]; + __u8 attr; /* Zone attributes */ + __u8 resv[3]; __u64 capacity; /* Zone capacity in number of sectors */ __u8 reserved[24]; }; From patchwork Thu Jun 25 12:21:52 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Javier_Gonz=C3=A1lez?= X-Patchwork-Id: 11625015 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 8833D161F for ; Thu, 25 Jun 2020 12:22:26 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 6F1AD20709 for ; Thu, 25 Jun 2020 12:22:26 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=javigon-com.20150623.gappssmtp.com header.i=@javigon-com.20150623.gappssmtp.com header.b="a4kPMuPR" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2404451AbgFYMWZ (ORCPT ); Thu, 25 Jun 2020 08:22:25 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55206 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2404343AbgFYMWY (ORCPT ); Thu, 25 Jun 2020 08:22:24 -0400 Received: from mail-wr1-x441.google.com (mail-wr1-x441.google.com [IPv6:2a00:1450:4864:20::441]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A17DEC061573 for ; Thu, 25 Jun 2020 05:22:24 -0700 (PDT) Received: by mail-wr1-x441.google.com with SMTP id a6so5629346wrm.4 for ; Thu, 25 Jun 2020 05:22:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=javigon-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=0Ju3UDNPPwBAk1TA1zeQdRuOHY5B22Z1S54Q7dxG7ro=; b=a4kPMuPRI94jYMbUyDiniUkJA4zHEgowzmPRA9qYcmXUwmmW3U2rYITJC0+M3sTR78 KVXqrURRTM+O4yO3SgN2zJ86WC0cyeLX4d6ryi0wJ4Nebi7WZSqa6HHD+ZxZvrewq2P1 OX/BOsVovRoiGC4xBatKL4iWx1NRQVYBtAw4yOxNz/O3PjT9uXFP4y4Nj8oL38r/lITX kAbq+bt36sje5oCKcgh4VWXRlBXjvDHYB7DPPqkFBXZ5RjqJzA2sYDnBwcoQeylDqJar Y8bM/RXncZrCOKNrv/To5XmqAVNpHfZwuL7rHFdVrXynZOqA5NRy1K7PRNn08PiUkKLB pxRw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=0Ju3UDNPPwBAk1TA1zeQdRuOHY5B22Z1S54Q7dxG7ro=; b=meV75KAL1RTNDU8MnO1GaEmPym3ztN1kbuf8DHMeuSrnB/vrXRKdTbIh7Pocxy25QL fEYJ4gHsGYLKcctDlT8Lcab/+7hBSK2dPA/TYCB8cVQXve/ERHJBK0POj6aaO4zZ4qEj lsxeTgM6zuKmUAMOYDQccalwU6niG8sYpRbPl/dBRNyxTD2nsFAHUY1y+gAYcd2etPYs /dbY1b7M27eVnsMO7SerNrhZKfPx+dK0pBEw9AJQCIFNqbPpcmHOZZHXIsE5zFDb+slY ofZGNBi2e+R2BuX4qmk3mElSJo3Ixvst6fuJYzkfV5aGvT6pscbQSotzm+iqyP35u3QG jPyw== X-Gm-Message-State: AOAM531UtVEJqbtqJVpkOTChT76oH834/eev+DgNloCdQtvV6hd2w70g lFVUNC/GhiFOznS7vEtGixrepqsqzKAJ7Q== X-Google-Smtp-Source: ABdhPJxWQm3VN+zqrMTnb8iXcKCR7M7Ez3ONvMlEt8CNYRRoA4A76A69bhclHB00O5N4pgSPkhGdNg== X-Received: by 2002:a05:6000:128e:: with SMTP id f14mr39466905wrx.276.1593087743370; Thu, 25 Jun 2020 05:22:23 -0700 (PDT) Received: from localhost.localdomain ([194.62.217.57]) by smtp.gmail.com with ESMTPSA id f186sm11934307wmf.29.2020.06.25.05.22.21 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 25 Jun 2020 05:22:22 -0700 (PDT) From: =?utf-8?q?Javier_Gonz=C3=A1lez?= To: linux-nvme@lists.infradead.org Cc: linux-block@vger.kernel.org, hch@lst.de, kbusch@kernel.org, sagi@grimberg.me, axboe@kernel.dk, =?utf-8?q?Javier_Gonz=C3=A1lez?= , SelvaKumar S , Kanchan Joshi , Nitesh Shetty Subject: [PATCH 6/6] nvme: Add consistency check for zone count Date: Thu, 25 Jun 2020 14:21:52 +0200 Message-Id: <20200625122152.17359-7-javier@javigon.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200625122152.17359-1-javier@javigon.com> References: <20200625122152.17359-1-javier@javigon.com> MIME-Version: 1.0 Sender: linux-block-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-block@vger.kernel.org From: Javier González Since the number of zones is calculated through the reported device capacity and the ZNS specification allows to report the total number of zones in the device, add an extra check to guarantee consistency between the device and the kernel. Signed-off-by: Javier González Signed-off-by: SelvaKumar S Signed-off-by: Kanchan Joshi Signed-off-by: Nitesh Shetty --- drivers/nvme/host/zns.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/nvme/host/zns.c b/drivers/nvme/host/zns.c index 7d8381fe7665..de806788a184 100644 --- a/drivers/nvme/host/zns.c +++ b/drivers/nvme/host/zns.c @@ -234,6 +234,13 @@ static int nvme_ns_report_zones(struct nvme_ns *ns, sector_t sector, sector += ns->zsze * nz; } + if (nr_zones < 0 && zone_idx != ns->nr_zones) { + dev_err(ns->ctrl->device, "inconsistent zone count %u/%u\n", + zone_idx, ns->nr_zones); + ret = -EINVAL; + goto out_free; + } + ret = zone_idx; out_free: kvfree(report);