From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 2AAADC3DA64 for ; Tue, 6 Aug 2024 09:42:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=Wkw99A6J75ja/bafsi2cOBrPuahhvi4X3xRBQcfRthA=; b=KTyAqBWnDIKV9D06dN2huC6oYQ Zw/epatLWZcmCJJdn+vjA3tk7J973YTBSNEGQUplRJmd1XdzHNKaBkKOhREgCL8YnsAleURLn5MKw QScpvGcqAczD6QQ3KHGaf5J00Ko5te6ssW1QlIYWrhRimdcHjEjIQLDOksXxwa/vX1bBzfx5JhVp0 49s6NRaUKrSNFcEONSrT+uSUFTMSaK8SSNPa5565HZbIShdpX6LH0G6QX1vP2nEB/BsbIIYTTftB2 hwudQ2iX09OhztJsQdg3HAn3xDO3T2TKNRatazVAzASZT1ARSK8g1SB+bhOVWVQzZWGwwWOaDTLkx Bg9P/m6Q==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sbGiU-0000000188D-0MyS; Tue, 06 Aug 2024 09:42:54 +0000 Received: from out28-84.mail.aliyun.com ([115.124.28.84]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sbGiQ-0000000186s-2vVZ for linux-nvme@lists.infradead.org; Tue, 06 Aug 2024 09:42:53 +0000 X-Alimail-AntiSpam: AC=CONTINUE;BC=0.8884067|0.07017291;CH=green;DM=|AD|false|;DS=CONTINUE|ham_system_inform|0.00219896-0.000193296-0.997608;FP=1724916168027850290|0|0|0|0|-1|-1|-1;HT=maildocker-contentspam033068194251;MF=wangyugui@e16-tech.com;NM=1;PH=DS;RN=2;RT=2;SR=0;TI=SMTPD_---.Yjg1-3Q_1722937364; Received: from T640.e16-tech.com(mailfrom:wangyugui@e16-tech.com fp:SMTPD_---.Yjg1-3Q_1722937364) by smtp.aliyun-inc.com; Tue, 06 Aug 2024 17:42:45 +0800 From: Wang Yugui To: linux-nvme@lists.infradead.org Cc: Wang Yugui Subject: [PATCH RFC v2] nvmet: basic RMEDIA support for target Date: Tue, 6 Aug 2024 17:42:44 +0800 Message-ID: <20240806094244.8275-1-wangyugui@e16-tech.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20240806004928.27605-1-wangyugui@e16-tech.com> References: <20240806004928.27605-1-wangyugui@e16-tech.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240806_024250_939399_322DE9B6 X-CRM114-Status: GOOD ( 13.53 ) X-BeenThere: linux-nvme@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "Linux-nvme" Errors-To: linux-nvme-bounces+linux-nvme=archiver.kernel.org@lists.infradead.org Rotational media(RMEDIA) support is added to the NVMe 2.0 specification. We add Rotational media(RMEDIA) basic support to nvme target. Signed-off-by: Wang Yugui --- changelog of PATCH RFC v2 - change 'bdev_nonrot(ns->bdev)' to '!bdev_nonrot(ns->bdev)' based on comment. - add some support for 'nvme cmdset-ind-id-ns' drivers/nvme/target/admin-cmd.c | 42 +++++++++++++++++++++++++++++++ drivers/nvme/target/core.c | 2 ++ drivers/nvme/target/io-cmd-bdev.c | 1 + drivers/nvme/target/nvmet.h | 1 + 4 files changed, 46 insertions(+) diff --git a/drivers/nvme/target/admin-cmd.c b/drivers/nvme/target/admin-cmd.c index f7e1156ac7ec..20a28102f8a0 100644 --- a/drivers/nvme/target/admin-cmd.c +++ b/drivers/nvme/target/admin-cmd.c @@ -489,6 +489,45 @@ static void nvmet_execute_identify_ctrl(struct nvmet_req *req) nvmet_req_complete(req, status); } +static void nvmet_execute_identify_indep(struct nvmet_req *req) +{ + struct nvme_id_ns_cs_indep *id; + u16 status; + + id = kzalloc(sizeof(*id), GFP_KERNEL); + if (!id) { + status = NVME_SC_INTERNAL; + goto out; + } + + /* + * Our namespace might always be shared. Not just with other + * controllers, but also with any other user of the block device. + */ + id->nmic |= NVME_NS_NMIC_SHARED; + + id->nstat |= NVME_NSTAT_NRDY; + + if (!req->ns){ + goto done; + } + + id->anagrpid = cpu_to_le32(req->ns->anagrpid); + + if (req->ns->readonly) + id->nsattr |= NVME_NS_ATTR_RO; + + if (req->ns->rotational) + id->nsfeat |= NVME_INDEP_NS_FEAT_RMEDIA; + +done: + if (!status) + status = nvmet_copy_to_sgl(req, 0, id, sizeof(*id)); + kfree(id); +out: + nvmet_req_complete(req, status); +} + static void nvmet_execute_identify_ns(struct nvmet_req *req) { struct nvme_id_ns *id; @@ -706,6 +745,9 @@ static void nvmet_execute_identify(struct nvmet_req *req) break; } break; + case NVME_ID_CNS_NS_CS_INDEP: + nvmet_execute_identify_indep(req); + return; case NVME_ID_CNS_CS_CTRL: switch (req->cmd->identify.csi) { case NVME_CSI_NVM: diff --git a/drivers/nvme/target/core.c b/drivers/nvme/target/core.c index ed2424f8a396..2790fedb593b 100644 --- a/drivers/nvme/target/core.c +++ b/drivers/nvme/target/core.c @@ -1254,6 +1254,8 @@ static void nvmet_init_cap(struct nvmet_ctrl *ctrl) else ctrl->cap |= ctrl->port->max_queue_size - 1; + ctrl->cap |= NVME_CAP_CRMS_CRIMS; + if (nvmet_is_passthru_subsys(ctrl->subsys)) nvmet_passthrough_override_cap(ctrl); } diff --git a/drivers/nvme/target/io-cmd-bdev.c b/drivers/nvme/target/io-cmd-bdev.c index 0bda83d0fc3e..d15ad1a864bc 100644 --- a/drivers/nvme/target/io-cmd-bdev.c +++ b/drivers/nvme/target/io-cmd-bdev.c @@ -104,6 +104,7 @@ int nvmet_bdev_ns_enable(struct nvmet_ns *ns) ns->pi_type = 0; ns->metadata_size = 0; + ns->rotational = !bdev_nonrot(ns->bdev); if (IS_ENABLED(CONFIG_BLK_DEV_INTEGRITY)) nvmet_bdev_ns_enable_integrity(ns); diff --git a/drivers/nvme/target/nvmet.h b/drivers/nvme/target/nvmet.h index 190f55e6d753..86eeeadf3787 100644 --- a/drivers/nvme/target/nvmet.h +++ b/drivers/nvme/target/nvmet.h @@ -62,6 +62,7 @@ struct nvmet_ns { struct block_device *bdev; struct file *file; bool readonly; + bool rotational; u32 nsid; u32 blksize_shift; loff_t size; -- 2.36.2