From nobody Fri Apr 17 10:35:54 2026 Received: from mail-qk1-f226.google.com (mail-qk1-f226.google.com [209.85.222.226]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C692C262808 for ; Sat, 21 Feb 2026 03:33:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.222.226 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771644789; cv=none; b=OMHUpANY1lFGwkCTxo9RMcMo8UrxbtrBmWgPRRaSUjLvFPVQhfvklIHnFqE8TCt7P+GBIjjLMOm2KtpHg/4EUaRJJsqxVOPOG+TLAroNXR+dSEkhwfiTlh725gicoQBgmQx7vaWyb0sx9xWJuCR1zSoD80VzqCRPUUthIrYq+yE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771644789; c=relaxed/simple; bh=C1USMimgJzASCD7VPj4tIL5i173jKmiylohG9y4/etY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=K8SuufB2lbkOCjMGgJsjj41lgUT44PBAl3pfKnMrZhajJZqV2JSm2+CQUC63IVnJ0W34QFJDJcSu+6PxVA4L+4x5i+pAUIRhtwnyxLNocHhERAtNtwHXLcZrkFc/3cJ76lmsZX7i322z40t3nl1iWU3603kmww0uU2HKY94zgcQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com; spf=fail smtp.mailfrom=purestorage.com; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b=GGfFnYns; arc=none smtp.client-ip=209.85.222.226 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=purestorage.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b="GGfFnYns" Received: by mail-qk1-f226.google.com with SMTP id af79cd13be357-8c711951be3so11597285a.3 for ; Fri, 20 Feb 2026 19:33:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=purestorage.com; s=google2022; t=1771644787; x=1772249587; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=qCPUB5YteTwm4Su/ndU1zpliegenX1WCgWKjuq5aUfY=; b=GGfFnYns1fBs2VTLQyz1rlkEzxWKVB5yt4y7dXXUXfLUWemBo85rBqEnjH7UAhL3vX LRxaou2GAq+001VSVW0n3Pl2BbD1818DwfBIXOIDZ39/SNur9ToKEG5N2ArvpredHrTI SOBl1hOwy9Rer6kGPBiCS1S0MsFkgdXVLeOT4SRxSuRCl2mkt5DJFQAR/e7H4IU11ahh c6ixIvVLZ8FydZHqMqqBx25dj1KZG9KNUcviD1aXgkp8X8It8dUF1D0QJmdANRQW5Xvx x6Nj4/1WcKRfARWYILJxuDLTFgFiZ67qpNGZ2cA5C/THYycNhIpPg2GN7Jj09rDcaqDv iClw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771644787; x=1772249587; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=qCPUB5YteTwm4Su/ndU1zpliegenX1WCgWKjuq5aUfY=; b=F9DN+pySl+hQrabEB/8UP6pQZa7cqYbK79zm5wZzBT/XDvMYzrKRPy+V9fl9b9irdU fQ/XMX/cC9GymOtQT2g343/Rq0IgRX3W0URilU4aElEL/mRgDr9QiPrw6QiUNfFH0q5J hkRFcTA2DUB86HWlbondhDdpizA1lAggmZ/g66Eia7vVnqQ5xCc4KwKWInh9UJUC7gkS zhopr8kD7zj/U1bdPpngMDqI7ZO/cqOsRF2p4WdI/PTEWzHbysgetaltDQSdU6Zs2Ms+ d0WS+HUo4wdbb53m4Abn//f+q9PtdW8iN7JzkGmA5kios8RMiTOjhCZ4PYvW9gIU06vB GmXQ== X-Forwarded-Encrypted: i=1; AJvYcCXOSa3LnqXi3q9YJXveW2PswPH/HfhEnLsyQ1DiTPkuA7PoDQH6vGALLRn7o2oSyDuJ3ndRwwYLNq3B5tk=@vger.kernel.org X-Gm-Message-State: AOJu0Yxe/qmLBIQGbA+zCRRp9h2Tipx585dI2yONgJhBpxADoA1R/qAy r5BBu7GXoRsfge9hQcrO64JIUJ53u9VXQ6dgn2ipn/kKDaRaZzS4VSQiwmsRlMEWdW4yoWtZwkU dLUSfNI8OpTm9GdQAky0nHHHVR1Ma9cDPZr1/ X-Gm-Gg: AZuq6aKq+JE3E/rtLTip5+5vV4hpOQq05TFC/aBZgcD+kMjQc64QmEGwz5DQKAEgx1O W/sK/hErMUAMeFjOSnsR4SW58qNRnkrVZ3+0Vw4mexAyHt7rI8EjnMQoexGrgndCFWcY1QbMyzT U4YVooK7x22YYEf7DHvXxZBJoSvmjRZCH2BQwtm9k5hWijnpIDpECDJp2DwDDHBbBCo1sKKgC9C KolRLxI5TNjNSj8jc4zkDLDwbRZaJ0yRyZBqzHnMvwi8IF2YC1kkvgop2mGWUoVhVyUHJffrjV1 V8Nz5rRRG/EicXamVROQBHfNWpJ/EWeJNd/4wMW3VCuTOsS/17PE/K9UAV+LYVHV1M7RhREH0Rq mQSVnvvmwv6NVCM3BbqKFO2QiG+2j/UTmP1b1a1w1MsynH+0dnHgx0A== X-Received: by 2002:a05:620a:6910:b0:8b2:ea2d:a5 with SMTP id af79cd13be357-8cb8cabef31mr182110685a.7.1771644786585; Fri, 20 Feb 2026 19:33:06 -0800 (PST) Received: from c7-smtp-2023.dev.purestorage.com ([208.88.159.128]) by smtp-relay.gmail.com with ESMTPS id 6a1803df08f44-8997e637562sm1338636d6.26.2026.02.20.19.33.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 20 Feb 2026 19:33:06 -0800 (PST) X-Relaying-Domain: purestorage.com Received: from dev-csander.dev.purestorage.com (dev-csander.dev.purestorage.com [10.112.29.101]) by c7-smtp-2023.dev.purestorage.com (Postfix) with ESMTP id 46FA9340686; Fri, 20 Feb 2026 20:33:05 -0700 (MST) Received: by dev-csander.dev.purestorage.com (Postfix, from userid 1557716354) id 40A81E427C8; Fri, 20 Feb 2026 20:33:05 -0700 (MST) From: Caleb Sander Mateos To: Keith Busch , Jens Axboe , Christoph Hellwig , Sagi Grimberg , Chaitanya Kulkarni Cc: linux-nvme@lists.infradead.org, linux-kernel@vger.kernel.org, Caleb Sander Mateos Subject: [PATCH v2 1/7] nvme: add preferred I/O size fields to struct nvme_id_ns_nvm Date: Fri, 20 Feb 2026 20:32:56 -0700 Message-ID: <20260221033302.1451669-2-csander@purestorage.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20260221033302.1451669-1-csander@purestorage.com> References: <20260221033302.1451669-1-csander@purestorage.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" A subsequent change will use the NPDGL and NPDAL fields of the NVM Command Set Specific Identify Namespace structure, so add them (and the handful of intervening fields) to struct nvme_id_ns_nvm. Add an assertion that the size is still 4 KB. Signed-off-by: Caleb Sander Mateos Reviewed-by: Christoph Hellwig --- include/linux/nvme.h | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/include/linux/nvme.h b/include/linux/nvme.h index 655d194f8e72..1134e6bf2d5c 100644 --- a/include/linux/nvme.h +++ b/include/linux/nvme.h @@ -511,13 +511,20 @@ struct nvme_id_ctrl_zns { struct nvme_id_ns_nvm { __le64 lbstm; __u8 pic; __u8 rsvd9[3]; __le32 elbaf[64]; - __u8 rsvd268[3828]; + __le32 npdgl; + __le32 nprg; + __le32 npra; + __le32 nors; + __le32 npdal; + __u8 rsvd288[3808]; }; =20 +static_assert(sizeof(struct nvme_id_ns_nvm) =3D=3D 4096); + enum { NVME_ID_NS_NVM_STS_MASK =3D 0x7f, NVME_ID_NS_NVM_GUARD_SHIFT =3D 7, NVME_ID_NS_NVM_GUARD_MASK =3D 0x3, NVME_ID_NS_NVM_QPIF_SHIFT =3D 9, --=20 2.45.2 From nobody Fri Apr 17 10:35:54 2026 Received: from mail-qv1-f97.google.com (mail-qv1-f97.google.com [209.85.219.97]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2E07433987 for ; Sat, 21 Feb 2026 03:33:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.97 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771644788; cv=none; b=NQ2VbOk+H/e7Qe4JrpfHQ9Lfti/B/RdpDWjxBpdW+RMPbOQRlQsVzshoirM4EtjOe14PDS9ecLeBvrBNi3wQQqP6pSM0oI9GPKDXJc38SSm/hfER55cRy2X4ddAMiALtLoaN2e1598tHI05zGeH59mfDo6xE857GEy5aeJRz8SM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771644788; c=relaxed/simple; bh=b+nRZBOa3beO/MTGItF1Rz/gmkK999ZqYLCnOCB/bro=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=bSjGGcQYHlcCEbiehmpa5AQpgwLpkaR06INc8N4p258fC9HQcNmMwGMtSh5Qgt+je8l/1bUCjRDWcTaQpEUiRXPAlmJVd0Vzm9Ka0sCmSXQ32inEdvJkA/Y+POIylSg4Pp0Dea1SYhanPCLi77dQ8doMgdZFJTMxVzMUBYtdpv4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com; spf=fail smtp.mailfrom=purestorage.com; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b=dSPmyrC7; arc=none smtp.client-ip=209.85.219.97 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=purestorage.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b="dSPmyrC7" Received: by mail-qv1-f97.google.com with SMTP id 6a1803df08f44-89470513c62so5880676d6.1 for ; Fri, 20 Feb 2026 19:33:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=purestorage.com; s=google2022; t=1771644786; x=1772249586; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=eYFSHEsFJdDOj3cQkRPFLn4/+IOAqySMBQqhkpK+Jyo=; b=dSPmyrC7y/sumWcOLDUo61cfWHTkmfOK9fASMokfYfWmqC1dohs6b0Aco/7ym0Pg6M v8B9f1+wBKIQrYXoY5DIuzLkfaYsebHxR6wbpANdTGhcq8lKeWeicunZaoj/w0gBvKKd 2JoVhwrd+qxumS9klgAtHqnM5oavv7pALkqzz8tQBxq9kl8XefskseKMaDsY1d/vR3/2 FmT96Xj084tVXderhlhpX1eNzie0BXnwtX6SqKmiPCL1IrRy/nTlc5aODje9bhcbAcGn 9tiraK14B9b0QfR+dtXAouwXbL6kCPvHJznipgxp7Ezc1XGbGWEJWRxo1vthbMkLMnCp TjFQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771644786; x=1772249586; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=eYFSHEsFJdDOj3cQkRPFLn4/+IOAqySMBQqhkpK+Jyo=; b=vZFWpczexEH19iEg9fjyO/p3uEowwYdVLur+wHmN1EKqdzx3XhdREel1OcfgErNz0V /LvWzownk6ZkLUZP8HcA3KCb+G51pK4R0hJEwZi3KwSf9n0cNVCNO6r3Gi6WXgYKm+5U K/2TYX7Y8xvFxU3APloblVUUvhtuk6Gqle63blNTztZkPmTSl2iQUpUjKGDLqI3HuqFd ZCqZdrTtX+IILfwD63nd91GcejRq58s3pweJZkKB+mbCxijdk7gyvCj7CJQvMa9zvwex mvAPR2N+w4+vnrTA9SxNC/tVMDrd6uOzWent4hUB5f2ZzKHfTmj/XxYnLpvhPhEPgZ7V ExTg== X-Forwarded-Encrypted: i=1; AJvYcCWlZY6o+p2wrU4NY5EuIjot5KUlHbuTI1wjsLxhzbTrfLOXJeYbI8MH3KhvvRfGJ13iPiyloaAY5Kl1Ivg=@vger.kernel.org X-Gm-Message-State: AOJu0YxVK3xmfVWoUNQZ/KH/+VHTEebd9LQ2FaOSmjafWP62Y4ow58Su ERnbbEYr2z56f5C8AeK2xXhRafiGo8aepthRVTRal1GpGxLtEolteppJG3+TfmJRwhp3nAOrNzO ooeoQ/tIRi582eiP/e8xqBz4ewnYxvFPOHoYC X-Gm-Gg: AZuq6aJUVrcHd8HywW4xw2qSbZ2tdc8ZOC2TXtmxYYtf2ZaVxPLFaqYPaExme7v/Oox CD6v+tMbI2ASZk/UDbXRdU4ZujSDKM6a6O1wZ1KsTlZlh5rMDblo9/6rt2EnAUX/KJgCzNWsFlN vmn5AhcfMkvezUyn9K/Eshk/Ro++wphSpBlxJ7lrMAuF9QvZb6WryWrOqhSDUlLGRGVL3/rb++C tmVvcReFzqNplHnIX1PGBBA/nEQWlnEE7adUfGtIk3Ol7NQXKpr9AC2nSBzjYALxTyK+7xRntJb F7bGGQl5odpbEhBaYhosS5Qj2XwLcawNBqwtIw6M+qULIfGkfwSr2XLxrvWBMrHj0LlvhxnGtN0 +Pu60GvfVH4i1XCdHxJylbMhqBv77WOiKeBXCVWZemjRTJ15ooQXcKQ== X-Received: by 2002:a05:6214:4f04:b0:896:fd66:a084 with SMTP id 6a1803df08f44-89979e1ebe5mr22124746d6.8.1771644786127; Fri, 20 Feb 2026 19:33:06 -0800 (PST) Received: from c7-smtp-2023.dev.purestorage.com ([208.88.159.129]) by smtp-relay.gmail.com with ESMTPS id af79cd13be357-8cb8d0c103csm18720085a.3.2026.02.20.19.33.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 20 Feb 2026 19:33:06 -0800 (PST) X-Relaying-Domain: purestorage.com Received: from dev-csander.dev.purestorage.com (dev-csander.dev.purestorage.com [10.112.29.101]) by c7-smtp-2023.dev.purestorage.com (Postfix) with ESMTP id 71DA8340705; Fri, 20 Feb 2026 20:33:05 -0700 (MST) Received: by dev-csander.dev.purestorage.com (Postfix, from userid 1557716354) id 6D28DE427C8; Fri, 20 Feb 2026 20:33:05 -0700 (MST) From: Caleb Sander Mateos To: Keith Busch , Jens Axboe , Christoph Hellwig , Sagi Grimberg , Chaitanya Kulkarni Cc: linux-nvme@lists.infradead.org, linux-kernel@vger.kernel.org, Caleb Sander Mateos Subject: [PATCH v2 2/7] nvme: fold nvme_config_discard() into nvme_update_disk_info() Date: Fri, 20 Feb 2026 20:32:57 -0700 Message-ID: <20260221033302.1451669-3-csander@purestorage.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20260221033302.1451669-1-csander@purestorage.com> References: <20260221033302.1451669-1-csander@purestorage.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The choice of what queue limits are set in nvme_update_disk_info() vs. nvme_config_discard() seems a bit arbitrary. A subsequent commit will compute the discard_granularity limit using struct nvme_id_ns, which is only passed to nvme_update_disk_info() currently. So move the logic in nvme_config_discard() to nvme_update_disk_info(). Replace several instances of ns->ctrl in nvme_update_disk_info() with the ctrl variable brought from nvme_config_discard(). Signed-off-by: Caleb Sander Mateos Reviewed-by: Christoph Hellwig --- drivers/nvme/host/core.c | 43 ++++++++++++++++++---------------------- 1 file changed, 19 insertions(+), 24 deletions(-) diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c index 3a2126584a23..8dda2fe69789 100644 --- a/drivers/nvme/host/core.c +++ b/drivers/nvme/host/core.c @@ -1880,30 +1880,10 @@ static bool nvme_init_integrity(struct nvme_ns_head= *head, bi->pi_offset =3D info->pi_offset; } return true; } =20 -static void nvme_config_discard(struct nvme_ns *ns, struct queue_limits *l= im) -{ - struct nvme_ctrl *ctrl =3D ns->ctrl; - - if (ctrl->dmrsl && ctrl->dmrsl <=3D nvme_sect_to_lba(ns->head, UINT_MAX)) - lim->max_hw_discard_sectors =3D - nvme_lba_to_sect(ns->head, ctrl->dmrsl); - else if (ctrl->oncs & NVME_CTRL_ONCS_DSM) - lim->max_hw_discard_sectors =3D UINT_MAX; - else - lim->max_hw_discard_sectors =3D 0; - - lim->discard_granularity =3D lim->logical_block_size; - - if (ctrl->dmrl) - lim->max_discard_segments =3D ctrl->dmrl; - else - lim->max_discard_segments =3D NVME_DSM_MAX_RANGES; -} - static bool nvme_ns_ids_equal(struct nvme_ns_ids *a, struct nvme_ns_ids *b) { return uuid_equal(&a->uuid, &b->uuid) && memcmp(&a->nguid, &b->nguid, sizeof(a->nguid)) =3D=3D 0 && memcmp(&a->eui64, &b->eui64, sizeof(a->eui64)) =3D=3D 0 && @@ -2078,10 +2058,11 @@ static void nvme_set_ctrl_limits(struct nvme_ctrl *= ctrl, =20 static bool nvme_update_disk_info(struct nvme_ns *ns, struct nvme_id_ns *i= d, struct queue_limits *lim) { struct nvme_ns_head *head =3D ns->head; + struct nvme_ctrl *ctrl =3D ns->ctrl; u32 bs =3D 1U << head->lba_shift; u32 atomic_bs, phys_bs, io_opt =3D 0; bool valid =3D true; =20 /* @@ -2112,15 +2093,30 @@ static bool nvme_update_disk_info(struct nvme_ns *n= s, struct nvme_id_ns *id, */ lim->logical_block_size =3D bs; lim->physical_block_size =3D min(phys_bs, atomic_bs); lim->io_min =3D phys_bs; lim->io_opt =3D io_opt; - if ((ns->ctrl->quirks & NVME_QUIRK_DEALLOCATE_ZEROES) && - (ns->ctrl->oncs & NVME_CTRL_ONCS_DSM)) + if ((ctrl->quirks & NVME_QUIRK_DEALLOCATE_ZEROES) && + (ctrl->oncs & NVME_CTRL_ONCS_DSM)) lim->max_write_zeroes_sectors =3D UINT_MAX; else - lim->max_write_zeroes_sectors =3D ns->ctrl->max_zeroes_sectors; + lim->max_write_zeroes_sectors =3D ctrl->max_zeroes_sectors; + + if (ctrl->dmrsl && ctrl->dmrsl <=3D nvme_sect_to_lba(ns->head, UINT_MAX)) + lim->max_hw_discard_sectors =3D + nvme_lba_to_sect(ns->head, ctrl->dmrsl); + else if (ctrl->oncs & NVME_CTRL_ONCS_DSM) + lim->max_hw_discard_sectors =3D UINT_MAX; + else + lim->max_hw_discard_sectors =3D 0; + + lim->discard_granularity =3D lim->logical_block_size; + + if (ctrl->dmrl) + lim->max_discard_segments =3D ctrl->dmrl; + else + lim->max_discard_segments =3D NVME_DSM_MAX_RANGES; return valid; } =20 static bool nvme_ns_is_readonly(struct nvme_ns *ns, struct nvme_ns_info *i= nfo) { @@ -2381,11 +2377,10 @@ static int nvme_update_ns_info_block(struct nvme_ns= *ns, nvme_configure_metadata(ns->ctrl, ns->head, id, nvm, info); nvme_set_chunk_sectors(ns, id, &lim); if (!nvme_update_disk_info(ns, id, &lim)) capacity =3D 0; =20 - nvme_config_discard(ns, &lim); if (IS_ENABLED(CONFIG_BLK_DEV_ZONED) && ns->head->ids.csi =3D=3D NVME_CSI_ZNS) nvme_update_zone_info(ns, &lim, &zi); =20 if ((ns->ctrl->vwc & NVME_CTRL_VWC_PRESENT) && !info->no_vwc) --=20 2.45.2 From nobody Fri Apr 17 10:35:54 2026 Received: from mail-ot1-f98.google.com (mail-ot1-f98.google.com [209.85.210.98]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 39CF9280A51 for ; Sat, 21 Feb 2026 03:33:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.98 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771644789; cv=none; b=PmTQ0bngB4NrhpwqJQWiMdSgCZRL0NbZDwZxVGTbDf/FPM+ebq6+QSL9UlQ38kSMNCeNgCCTVqVOPIR7+otZp3/Zw629vsMQCo5DKGljzSK83IRV7RAMuPiEVbHiOGAQtT78nM2YxEkArKFw0DQL6o5GA1kmz4AI1wigx8yZxjA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771644789; c=relaxed/simple; bh=ocf6ngOMJoJEB7fPHKYupVlbRdS1k67oX/rzqbQshkc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=QDgfNRUJGG0NvPdetlfE5yJ1EIi5Zk+oGIYjvVetsdbQ3DEqZfNTNLCyqP2Rimog2/DkeK0oeuemiIjuIr5eNZXc3aPLDtlqGdyMD0udIvsDskGG87YynW3WBIwKZv2LndAvccRh6c2HrkqVnnDT0+vqbSWh8O/Vek3kpggysWI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com; spf=fail smtp.mailfrom=purestorage.com; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b=Yu5fOda3; arc=none smtp.client-ip=209.85.210.98 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=purestorage.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b="Yu5fOda3" Received: by mail-ot1-f98.google.com with SMTP id 46e09a7af769-7d2ebc06f66so429822a34.0 for ; Fri, 20 Feb 2026 19:33:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=purestorage.com; s=google2022; t=1771644787; x=1772249587; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=fJltEScUjLqhErd6IHPXM2JEHFKvvI69iCjPQeYZdOk=; b=Yu5fOda38dRgdm2CAadYuuoEijfPCjT9Cl2m53Ry4f5H3QJaFiVAdSLJnbWkSTA9WJ Y6jO/0FfhoKcCdsurfuJhPySEnyFpfXXuHxaxnf09WB53pGfFffR7SCpoMKGVKeK7qQK jQKqbWMS4P73ljwLB9idOdDmyT9lYj4zhXRsLrGpyz9NDRR2ypdyMdcjqkadO6yQqEDv h0xR3oInPSyzqzCyCb3rC1k0+qrGS545pIuAtYQZGbLO8yqVr9G9AKLfhiFndXqgX0RF e/oo5yJQh6xXqBbOM2R2YGslB1VW7s4wQ+WeP9OwzYAB+RekYWRJWHQjz5VCbOOZzVnE 9CyA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771644787; x=1772249587; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=fJltEScUjLqhErd6IHPXM2JEHFKvvI69iCjPQeYZdOk=; b=KcRAgqdAFKpPdMX0o6KoH/dLi4K8cbHrP8Pw1HN+1iYTl9QjUCx2N2mMAMavppFG/N 2rYiCZDem57zy351GCWQr4OKj3EG/dXkpy5/0IH4PYCiwyEbaltIu+WAj9JGYVQdOrYv BN3ktsr00ZGnt/xL992tho1+/3N+uGZYaXIf839R6hEgppY7z7Hm0SxFTfSVjH4j+MWe 0ws6ubVvBC3Ciz7qPREzf85SRiExk10cn+LsWynAmv1V6UUUyYpbPzQjvwLQqn6i8ybi AIiDk0UDeVj43bedzOAjdnmPb9SRuNBX3kdmj4OGECyKb5alI1xmpySisuP7lQ0oe7Wp XJEg== X-Forwarded-Encrypted: i=1; AJvYcCVrLhIwvpWwnFOIIJxsagpv9S6wHrfhPMe8SaiVlYJfj6TN/g2ocjfvxeEM57D6RW8eZ5vrlFql2Yt/YNk=@vger.kernel.org X-Gm-Message-State: AOJu0Yw+E+65bNYLCtxHTSSiekBqZ0h3wAlJOwseZmPU1BSDLPd22C50 rNgV143E/gHXLHZ9sxc3n5tAYBKZhqimvuXaTPjmpihtTotfoZsc2PiChS/5nSxnoxq2/a9rIMW T8LVBDJ1nAJWxg/7kjhmy//kfzT2SqCv0WaZgyxc7TIfKPW7oqijq X-Gm-Gg: AZuq6aLfYGQZwVrEfJZvSXYKEbBCuH5+x8wFrdgoI+7j7EeGYQ893/aqZ1UmtdUOtOm SDorE9FCe9tuKiCGlYLBx3o5NSV1IALaXyEsW6lMc7DvXcl/h+cjBhbFvXnHbw4151cC3f5V27O xenGcKcns/0BrwUaF7uAn0wFEU2OurOKpS1zYVfrptbIOOosiANw9DRF8Y5g/xpRa2B2BvfwnTf msqszU3mUdxJzJV8Lo4D4A+Uu3HC+EKOmVy6ziZy7/sbCzXqhvHZ/wqC2f9u5JA1qxeOxlolpSR B9jnipEu48FKfrSD6YJlcSfZcsNWKVLyQOQiMQA0jjhrm00v3mgg62drJKlPkFiRmxDleP9uWKs /RfYYCIgZBwPofvQv7AP0LmumCRLZZrxx9aM2Bx8= X-Received: by 2002:a05:6870:2388:b0:409:54a3:6a88 with SMTP id 586e51a60fabf-4157abca642mr1008619fac.1.1771644786897; Fri, 20 Feb 2026 19:33:06 -0800 (PST) Received: from c7-smtp-2023.dev.purestorage.com ([2620:125:9017:12:36:3:5:0]) by smtp-relay.gmail.com with ESMTPS id 586e51a60fabf-4157d392440sm182717fac.17.2026.02.20.19.33.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 20 Feb 2026 19:33:06 -0800 (PST) X-Relaying-Domain: purestorage.com Received: from dev-csander.dev.purestorage.com (dev-csander.dev.purestorage.com [10.112.29.101]) by c7-smtp-2023.dev.purestorage.com (Postfix) with ESMTP id 99976340991; Fri, 20 Feb 2026 20:33:05 -0700 (MST) Received: by dev-csander.dev.purestorage.com (Postfix, from userid 1557716354) id 95668E427C8; Fri, 20 Feb 2026 20:33:05 -0700 (MST) From: Caleb Sander Mateos To: Keith Busch , Jens Axboe , Christoph Hellwig , Sagi Grimberg , Chaitanya Kulkarni Cc: linux-nvme@lists.infradead.org, linux-kernel@vger.kernel.org, Caleb Sander Mateos Subject: [PATCH v2 3/7] nvme: update nvme_id_ns OPTPERF constants Date: Fri, 20 Feb 2026 20:32:58 -0700 Message-ID: <20260221033302.1451669-4-csander@purestorage.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20260221033302.1451669-1-csander@purestorage.com> References: <20260221033302.1451669-1-csander@purestorage.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" In NVMe verson 2.0 and below, OPTPERF comprises only bit 4 of NSFEAT in the Identify Namespace structure. Since version 2.1, OPTPERF includes both bits 4 and 5 of NSFEAT. Replace the NVME_NS_FEAT_IO_OPT constant with NVME_NS_FEAT_OPTPERF_SHIFT, NVME_NS_FEAT_OPTPERF_MASK, and NVME_NS_FEAT_OPTPERF_MASK_2_1, representing the first bit, pre-2.1 bit width, and post-2.1 bit width of OPTPERF. Update nvme_update_disk_info() to check both OPTPERF bits for controllers that report version 2.1 or newer, as NPWG and NOWS are supported even if only bit 5 is set. Signed-off-by: Caleb Sander Mateos --- drivers/nvme/host/core.c | 8 +++++++- include/linux/nvme.h | 4 +++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c index 8dda2fe69789..bff6f26d7bcf 100644 --- a/drivers/nvme/host/core.c +++ b/drivers/nvme/host/core.c @@ -2062,10 +2062,11 @@ static bool nvme_update_disk_info(struct nvme_ns *n= s, struct nvme_id_ns *id, struct nvme_ns_head *head =3D ns->head; struct nvme_ctrl *ctrl =3D ns->ctrl; u32 bs =3D 1U << head->lba_shift; u32 atomic_bs, phys_bs, io_opt =3D 0; bool valid =3D true; + u8 optperf; =20 /* * The block layer can't support LBA sizes larger than the page size * or smaller than a sector size yet, so catch this early and don't * allow block I/O. @@ -2076,11 +2077,16 @@ static bool nvme_update_disk_info(struct nvme_ns *n= s, struct nvme_id_ns *id, } =20 phys_bs =3D bs; atomic_bs =3D nvme_configure_atomic_write(ns, id, lim, bs); =20 - if (id->nsfeat & NVME_NS_FEAT_IO_OPT) { + optperf =3D id->nsfeat >> NVME_NS_FEAT_OPTPERF_SHIFT; + if (ctrl->vs >=3D NVME_VS(2, 1, 0)) + optperf &=3D NVME_NS_FEAT_OPTPERF_MASK_2_1; + else + optperf &=3D NVME_NS_FEAT_OPTPERF_MASK; + if (optperf) { /* NPWG =3D Namespace Preferred Write Granularity */ phys_bs =3D bs * (1 + le16_to_cpu(id->npwg)); /* NOWS =3D Namespace Optimal Write Size */ if (id->nows) io_opt =3D bs * (1 + le16_to_cpu(id->nows)); diff --git a/include/linux/nvme.h b/include/linux/nvme.h index 1134e6bf2d5c..a025447212f8 100644 --- a/include/linux/nvme.h +++ b/include/linux/nvme.h @@ -595,11 +595,13 @@ enum { }; =20 enum { NVME_NS_FEAT_THIN =3D 1 << 0, NVME_NS_FEAT_ATOMICS =3D 1 << 1, - NVME_NS_FEAT_IO_OPT =3D 1 << 4, + NVME_NS_FEAT_OPTPERF_SHIFT =3D 4, + NVME_NS_FEAT_OPTPERF_MASK =3D 0x1, + NVME_NS_FEAT_OPTPERF_MASK_2_1 =3D 0x3, NVME_NS_ATTR_RO =3D 1 << 0, NVME_NS_FLBAS_LBA_MASK =3D 0xf, NVME_NS_FLBAS_LBA_UMASK =3D 0x60, NVME_NS_FLBAS_LBA_SHIFT =3D 1, NVME_NS_FLBAS_META_EXT =3D 0x10, --=20 2.45.2 From nobody Fri Apr 17 10:35:54 2026 Received: from mail-pl1-f226.google.com (mail-pl1-f226.google.com [209.85.214.226]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3E71528AB0B for ; Sat, 21 Feb 2026 03:33:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.226 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771644789; cv=none; b=ltUqhHE+6O8iTsNlC/E2u+OiTL3o44QVuE3GZiMCsr5m3JDdSIZtLnE5VDyfSo++Asd9XxFB6Y/hiOhm0CWv2Exq9Dlv3GopnTbReuX8VoYfSJj6pEfW4tdIE720oebTjWarX/ThE9QCJe866vBMcbPGkfQTQQcJQEdypFZKhgU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771644789; c=relaxed/simple; bh=NdPvYIVAiaJrTIXUdUqqs5xQQgNiklVTzdScYSwE5do=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=rrTOnUXluB2Le6JqYLe1JYK55xDu2KcUbc/RdIXRkJLrVGnj8cwVLy0F5/Hv9kDbYt5/SHaQRUcJCi6xeoXOOVQLHu77TUH/ISRzNVx/6ZkkhvBSkxEVC3R95gt8IIAWTcAQvmfoHu++cSb9bYzcQ4uzR/EKIRpqddymomRHHEw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com; spf=fail smtp.mailfrom=purestorage.com; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b=gADcNy34; arc=none smtp.client-ip=209.85.214.226 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=purestorage.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b="gADcNy34" Received: by mail-pl1-f226.google.com with SMTP id d9443c01a7336-2a8fba89cb5so3826945ad.2 for ; Fri, 20 Feb 2026 19:33:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=purestorage.com; s=google2022; t=1771644787; x=1772249587; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=d5MnxCfiSl8pO88LgItQirBF6Sk69OYbyQL24d2UZK0=; b=gADcNy342A8DAOfjlZdeeBTVAbDnGg1PbH7Y3JSS7JllwrMNJvYtl7uQNVjRrJpSVz ZKUJPUf2kelr2JDbaZ0XrzI1A23/H7Pzmab2PwuUXvVr6ghs9fjDlGoPO+1+g+fs1k5O 5BeyiDACcmDk+uerM6ou3rXl40M23s5mOVhl8gGcbGS8bayh0sd7VOKX1lKJI8+jPJ/J dyA7tkuFB4CcXW0dt7XTOcZPDczmEenS89a+o4/eJ3xFYtYyzrd/Z3PRvhHfDZHIHxu0 6WNHt/6y8GkRy/cRCdZw8ubugq+bxdsvKOzvFBPa3hHTsXajLYL3kbsET2l0/dUNLbuc J2ZQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771644787; x=1772249587; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=d5MnxCfiSl8pO88LgItQirBF6Sk69OYbyQL24d2UZK0=; b=bBWvqXfyXwsMknIfLd4bXC+2Cp5dTs2S3NK909diWepqUttTCOVhBT7Dz+9Agw1cCN CXyYickAnoWDc9gsQAnjAMYnF+xGDy/baqkRtH/zWem7KAkwGHclDb4/5bba2KBsnvI/ RMOTvQPqfETgalFdtaxNyKUcPYBFvEO2NYVxmgY8/JK7tBtZ+7yTKCIiu6zjDZZbI7An ishspeTBRS16iiPLP8ByYXlhCafMHQ3TkJHRuzRi7/HLua3pyOh9RkuewNnQQ/b13M1P euwgyeoDyPlpYt9SPEzzFoALKy7kG5lj06k1dY5u/gbPXMNTYKp3HsQ66wbKr/ijG3B2 rGdg== X-Forwarded-Encrypted: i=1; AJvYcCW1CjeWqUTVz4mq92aCfXshLkN6NZ+/CuxTzPKKg9xxjgOK3sYZojInIHdanfedxzfFq3Hjoh7UESyLOaw=@vger.kernel.org X-Gm-Message-State: AOJu0YxqdNRHCDKXKxEKGsvAMrjT485QPqrHFBmZ1ndUacQa0+hYQoau L4DCO9lxMzCWRWSEOAw3X7bSBQ3jtGmrxHGk0Pi8KNaZVMD9jazfiDIl0n9yr9cbrawXtDdzz2d KgqvcNIQwhaq/K6zstEodQ94cdJvh1T5Oh/tT5XreJ9FVGWc6MX+Q X-Gm-Gg: AZuq6aIeEN4jwHJIHhOx3ukYJ+9QUd268y0Utl1BApOUtctNrBB7RtEyBXzKnhi8bpf LJ/kGDajPos7MCUQ2OJ+WFlBG7OTcYBQZwcCBkD5nUQDUC7fAWo0SJTlRXENYfOmvxtN9n41ROI 6FIcKUXdZhcGfCwMeQ9lnIaJfP8VG5ItaGLwed65l0hsAi08Rwn+p8qKkPQ2ILkuXcxT7UniMGX tjUi2/iyh9BAMz5i8qrGu+wCRVNrTMXiATCW1pwu5QzH0HWotcFL5hRfQMZmWl/iY8GixbDBC/Z 4PqI4+fvKp9qlcwH2EqAiMqYZrL3el9XvR1DlG6jJRxKseilq4FB/dgCvEt/lmYEYRChkqX9euD lY8X0knG7fadyzksg/w2aCgW3nREd1Cb1dQ5zer8= X-Received: by 2002:a17:902:f607:b0:2a3:bf5f:9267 with SMTP id d9443c01a7336-2ad744d1bddmr11993925ad.4.1771644787570; Fri, 20 Feb 2026 19:33:07 -0800 (PST) Received: from c7-smtp-2023.dev.purestorage.com ([2620:125:9017:12:36:3:5:0]) by smtp-relay.gmail.com with ESMTPS id d9443c01a7336-2ad74e03b5asm1599765ad.2.2026.02.20.19.33.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 20 Feb 2026 19:33:07 -0800 (PST) X-Relaying-Domain: purestorage.com Received: from dev-csander.dev.purestorage.com (dev-csander.dev.purestorage.com [10.112.29.101]) by c7-smtp-2023.dev.purestorage.com (Postfix) with ESMTP id C91E8340705; Fri, 20 Feb 2026 20:33:06 -0700 (MST) Received: by dev-csander.dev.purestorage.com (Postfix, from userid 1557716354) id BF616E427C8; Fri, 20 Feb 2026 20:33:05 -0700 (MST) From: Caleb Sander Mateos To: Keith Busch , Jens Axboe , Christoph Hellwig , Sagi Grimberg , Chaitanya Kulkarni Cc: linux-nvme@lists.infradead.org, linux-kernel@vger.kernel.org, Caleb Sander Mateos Subject: [PATCH v2 4/7] nvme: always issue I/O Command Set specific Identify Namespace Date: Fri, 20 Feb 2026 20:32:59 -0700 Message-ID: <20260221033302.1451669-5-csander@purestorage.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20260221033302.1451669-1-csander@purestorage.com> References: <20260221033302.1451669-1-csander@purestorage.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Currently, the I/O Command Set specific Identify Namespace structure is only fetched for controllers that support extended LBA formats. This is because struct nvme_id_ns_nvm is only used by nvme_configure_pi_elbas(), which is only called when the ELBAS bit is set in the CTRATT field of the Identify Controller structure. However, the I/O Command Set specific Identify Namespace structure will soon be used in nvme_update_disk_info(), so always try to obtain it in nvme_update_ns_info_block() if the controller supports NVMe version 2.0 or later. Signed-off-by: Caleb Sander Mateos Reviewed-by: Christoph Hellwig --- drivers/nvme/host/core.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c index bff6f26d7bcf..2b433478f328 100644 --- a/drivers/nvme/host/core.c +++ b/drivers/nvme/host/core.c @@ -2352,11 +2352,11 @@ static int nvme_update_ns_info_block(struct nvme_ns= *ns, ret =3D -ENXIO; goto out; } lbaf =3D nvme_lbaf_index(id->flbas); =20 - if (ns->ctrl->ctratt & NVME_CTRL_ATTR_ELBAS) { + if (ns->ctrl->vs >=3D NVME_VS(2, 0, 0)) { ret =3D nvme_identify_ns_nvm(ns->ctrl, info->nsid, &nvm); if (ret < 0) goto out; } =20 --=20 2.45.2 From nobody Fri Apr 17 10:35:54 2026 Received: from mail-qk1-f228.google.com (mail-qk1-f228.google.com [209.85.222.228]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A2932255F5E for ; Sat, 21 Feb 2026 03:33:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.222.228 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771644789; cv=none; b=W1tRQhOvGGcyPnEGES71txzUs8skpZ7DGTIL85c2IW/bNqSt+H+cb9QWSuhUXnVFg/I9qbZJxtg1jDASwPkLtNdGbpl9O6NASFJ9qiSy72JFcH6p16AL8+3C54m/QhVNNUUE6kmuF4h8AQZ22XY+bKUmrt7Vqj8V28KHLrood8w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771644789; c=relaxed/simple; bh=P8egThV3IYf0SuKnd82q7N7fziyz776R7rOqIcpr/pw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=sHBP9jZ20MJppjszQsLeZrshi1biTWc9YVMdZZEHBKeKISSom5dUsswiQwKbHmGm1JsqaSsJDOTImVHRxl2JQ9/5dBBab4cScF7n5TMhu+j7/Z/BsN5PqMKRUaxK0wMjEzGQy7/1AV8kawBhSwtJI8wHJ6RqKQkaSFsflNTEMqo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com; spf=fail smtp.mailfrom=purestorage.com; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b=H2ColCIM; arc=none smtp.client-ip=209.85.222.228 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=purestorage.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b="H2ColCIM" Received: by mail-qk1-f228.google.com with SMTP id af79cd13be357-8cb5977d25eso38978785a.1 for ; Fri, 20 Feb 2026 19:33:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=purestorage.com; s=google2022; t=1771644787; x=1772249587; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=egZynsCm9n4B9np5fFEbCgBHoufsRNA7TK4tbUKZ+oI=; b=H2ColCIM+4JZsnNExnk2m4NTO+LEsA3S+1el+O35tJnzqbI4dMpyAOz++J8H1urqdU qt3VvN7PhNzTT3zPsLH3MiSjQ53Xy70gPE+QF9GtoVBVeeWUmpBGrNmis0v3bWcBzVjz 8zMc+FWu03hbOEPs3yTAEBLiwpzr1emOaBcvH68rX+haoThB7yE+QOis7IjnZsXnUmfE u83PPLqHhUpzWVcpJMRBWflYwwEORm7OrlGVZy9z3t+IYN17uqaUklmBnjhUZLBsxRSC DPpeM7TkSqLX510DtsbS9fgX6PMIkLaSpynuXpQT32xIYNk2D5/omb2OJKZAD3+9r83I b3zg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771644787; x=1772249587; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=egZynsCm9n4B9np5fFEbCgBHoufsRNA7TK4tbUKZ+oI=; b=PVbSk2+ZmJPZ2SFtJFPkbNqUJZMls+PA3771fmtHM28s8NzuQEGiHWe0zg+Llc8xCO UYaHK7Ei31HH0/IsgwfR/JvXP+14vuOCvILwB4drNhyqcoE8CNGqy9fNuMPzQe6wpEHa G+PyZntC1yoBfm5wGuWdB4S6V7GyTvkdcvQtiQzsv4PrUyu8TPb0vwjfxLKfBShf/prp AaUS3QfbNix2V7Dbotz6JYNdjnMYTpHvpjchOKbOFA+zeXCTiqjoAZpZQ4qg9XX5XbcI Dt9Q+5KlQhLD2M5poR0T/TX9TIwQeBiKDCvm0UaQEKxpmQkD1z8kFjwPEyr+8sNoqQrm ekdw== X-Forwarded-Encrypted: i=1; AJvYcCWhd2Mx9UCN5OFmPQwvXP5GD1IUf1BJeUW2XNiAEmvt0hF3OP/v1hXQIzs2EehcwC0mcSbY5DvD8/IWeus=@vger.kernel.org X-Gm-Message-State: AOJu0YzqkcBSvJHBSNB/Iit4VodtUkUmb4eqeXCiCJ0fJzVhyNaljyvZ jVl8/ieO7y6eYS7sXiX33/lFAXyFROQYIHG7FDAZIQbdPEPHj5cW2z8wN2XiVicdd409MzM1U0i IhwbaLysy5+NGVLs1sek8AQNMMvIU7ausPBmN X-Gm-Gg: AZuq6aK4Pnc3xrdp6rMNkHz8imslFckZuZmtIjIH+5KG50ccpXPitJPdXdaVSQ+Y6gY 09c/r8ezBGxVucWqP8xkSb5B7kBhKO+47+mTUHvR2be+5x837FnxZjrZnFrdiz8XjTPzBMEde2w OEDV07uEURqwEszRUILqmTafcVzMzYUzq+wRXLYRL0wurtxjUqZPOqeo9pQTT8AuJ+XR2rCpe5A S9WwNb+Jt1psch/xbSg6E5mCDZFVhD9UQ0TaP16BogR9ZY99M7y/9iNc3kcfMkfbhiYvd1g3DbM FiPrwLXbRA/UN/eAqX2hbJa5/OJUHNcLjN4dZ0DH7I4C9HPh3sDJOdK4lcB8VMMcKYiyeONO0T1 wxy9MRag5u36lvI2Kzw4e5t6jbzSX+vXyNUh/iKDpM16sRrvuYa97SA== X-Received: by 2002:a05:6214:8088:b0:894:9d9b:84f9 with SMTP id 6a1803df08f44-89979c55249mr23184136d6.1.1771644786593; Fri, 20 Feb 2026 19:33:06 -0800 (PST) Received: from c7-smtp-2023.dev.purestorage.com ([208.88.159.128]) by smtp-relay.gmail.com with ESMTPS id 6a1803df08f44-8997c4887b7sm1385526d6.6.2026.02.20.19.33.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 20 Feb 2026 19:33:06 -0800 (PST) X-Relaying-Domain: purestorage.com Received: from dev-csander.dev.purestorage.com (dev-csander.dev.purestorage.com [10.112.29.101]) by c7-smtp-2023.dev.purestorage.com (Postfix) with ESMTP id EE4493409F2; Fri, 20 Feb 2026 20:33:05 -0700 (MST) Received: by dev-csander.dev.purestorage.com (Postfix, from userid 1557716354) id E4857E427CB; Fri, 20 Feb 2026 20:33:05 -0700 (MST) From: Caleb Sander Mateos To: Keith Busch , Jens Axboe , Christoph Hellwig , Sagi Grimberg , Chaitanya Kulkarni Cc: linux-nvme@lists.infradead.org, linux-kernel@vger.kernel.org, Caleb Sander Mateos Subject: [PATCH v2 5/7] nvme: set discard_granularity from NPDG/NPDA Date: Fri, 20 Feb 2026 20:33:00 -0700 Message-ID: <20260221033302.1451669-6-csander@purestorage.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20260221033302.1451669-1-csander@purestorage.com> References: <20260221033302.1451669-1-csander@purestorage.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Currently, nvme_config_discard() always sets the discard_granularity queue limit to the logical block size. However, NVMe namespaces can advertise a larger preferred discard granularity in the NPDG or NPDA field of the Identify Namespace structure or the NPDGL or NPDAL fields of the I/O Command Set Specific Identify Namespace structure. Use these fields to compute the discard_granularity limit. The logic is somewhat involved. First, the fields are optional. NPDG is only reported if the low bit of OPTPERF is set in NSFEAT. NPDA is reported if any bit of OPTPERF is set. And NPDGL and NPDAL are reported if the high bit of OPTPERF is set. NPDGL and NPDAL can also each be set to 0 to opt out of reporting a limit. I/O Command Set Specific Identify Namespace may also not be supported by older NVMe controllers. Another complication is that multiple values may be reported among NPDG, NPDGL, NPDA, and NPDAL. The spec says to prefer the values reported in the L variants. The spec says NPDG should be a multiple of NPDA and NPDGL should be a multiple of NPDAL, but it doesn't specify a relationship between NPDG and NPDAL or NPDGL and NPDA. So use the maximum of the reported NPDG(L) and NPDA(L) values as the discard_granularity. Signed-off-by: Caleb Sander Mateos --- drivers/nvme/host/core.c | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c index 2b433478f328..35309dec1334 100644 --- a/drivers/nvme/host/core.c +++ b/drivers/nvme/host/core.c @@ -2055,16 +2055,17 @@ static void nvme_set_ctrl_limits(struct nvme_ctrl *= ctrl, lim->max_segment_size =3D UINT_MAX; lim->dma_alignment =3D 3; } =20 static bool nvme_update_disk_info(struct nvme_ns *ns, struct nvme_id_ns *i= d, - struct queue_limits *lim) + struct nvme_id_ns_nvm *nvm, struct queue_limits *lim) { struct nvme_ns_head *head =3D ns->head; struct nvme_ctrl *ctrl =3D ns->ctrl; u32 bs =3D 1U << head->lba_shift; u32 atomic_bs, phys_bs, io_opt =3D 0; + u32 npdg =3D 1, npda =3D 1; bool valid =3D true; u8 optperf; =20 /* * The block layer can't support LBA sizes larger than the page size @@ -2113,11 +2114,27 @@ static bool nvme_update_disk_info(struct nvme_ns *n= s, struct nvme_id_ns *id, else if (ctrl->oncs & NVME_CTRL_ONCS_DSM) lim->max_hw_discard_sectors =3D UINT_MAX; else lim->max_hw_discard_sectors =3D 0; =20 - lim->discard_granularity =3D lim->logical_block_size; + if (ctrl->dmrsl && ctrl->dmrsl <=3D nvme_sect_to_lba(ns->head, UINT_MAX)) + lim->max_hw_discard_sectors =3D + nvme_lba_to_sect(ns->head, ctrl->dmrsl); + else if (ctrl->oncs & NVME_CTRL_ONCS_DSM) + lim->max_hw_discard_sectors =3D UINT_MAX; + else + lim->max_hw_discard_sectors =3D 0; + + if (optperf & 0x2 && nvm && nvm->npdgl) + npdg =3D le32_to_cpu(nvm->npdgl); + else if (optperf & 0x1) + npdg =3D (u32)le16_to_cpu(id->npdg) + 1; + if (optperf & 0x2 && nvm && nvm->npdal) + npda =3D le32_to_cpu(nvm->npdal); + else if (optperf) + npda =3D (u32)le16_to_cpu(id->npda) + 1; + lim->discard_granularity =3D max(npdg, npda) * lim->logical_block_size; =20 if (ctrl->dmrl) lim->max_discard_segments =3D ctrl->dmrl; else lim->max_discard_segments =3D NVME_DSM_MAX_RANGES; @@ -2380,11 +2397,11 @@ static int nvme_update_ns_info_block(struct nvme_ns= *ns, ns->head->nuse =3D le64_to_cpu(id->nuse); capacity =3D nvme_lba_to_sect(ns->head, le64_to_cpu(id->nsze)); nvme_set_ctrl_limits(ns->ctrl, &lim, false); nvme_configure_metadata(ns->ctrl, ns->head, id, nvm, info); nvme_set_chunk_sectors(ns, id, &lim); - if (!nvme_update_disk_info(ns, id, &lim)) + if (!nvme_update_disk_info(ns, id, nvm, &lim)) capacity =3D 0; =20 if (IS_ENABLED(CONFIG_BLK_DEV_ZONED) && ns->head->ids.csi =3D=3D NVME_CSI_ZNS) nvme_update_zone_info(ns, &lim, &zi); --=20 2.45.2 From nobody Fri Apr 17 10:35:54 2026 Received: from mail-oa1-f97.google.com (mail-oa1-f97.google.com [209.85.160.97]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D2BD32C1584 for ; Sat, 21 Feb 2026 03:33:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.97 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771644790; cv=none; b=ioMyO1lXalVRL2UPSE2ynM0YX/6ItDtICfSvDBckD5gwKDmKXq5Ebr7Wg6zobJ4aV+/ZSFAHjQVq2HZGm23N5qUq8SCCEXMDrX8KaGAYGnMxQ6xnoj35CBQlFMnHD8v+XammGkWscjbuRul1+HJ4pJRtMIRhKaad9akJG8rSapw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771644790; c=relaxed/simple; bh=pBiR297b8PXFueLy2tPMN9uZJGaoOz/0vV31TY2gEY8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=BwcovA/uyXiNYyPJTc/Wi1HMJDDk9O0Z0K6K4dCqCJLdCylDeVpxisU5sdYaoH2zZFWglMVcA3p20stXkCaFQEfcB9oOYz6wo5ydL4rTuh5KyCx/gyWWwVLWUT8RxcgX55GBLRGrEZRa/z0j8Syr9WnaaiKaALvWkwrs0v5YjNw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com; spf=fail smtp.mailfrom=purestorage.com; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b=dmO4al9S; arc=none smtp.client-ip=209.85.160.97 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=purestorage.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b="dmO4al9S" Received: by mail-oa1-f97.google.com with SMTP id 586e51a60fabf-40850555c56so249742fac.3 for ; Fri, 20 Feb 2026 19:33:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=purestorage.com; s=google2022; t=1771644787; x=1772249587; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=chF3cAD1j09EpR3bM9lUaumkQDJZpAeYYRmoTp9QLII=; b=dmO4al9SgfOyjwqu0/iOj7Le/SawTajJR+/c4GoUvuveQUvjVL44o8uoXcEKDuV3tx bA5ACL7NCDjozXD0XR8BBjE1bJk33Qkt18ZCtidvUVuIyqAXz4v6H97fZNSae9eY8a7P ZN6LL0zcEtMSzkdU5b1Tsqw43TvrGhvHQY1EiIW/1Aq7BKDYkVyndTezNKOZOddp6KHw MHxF2828klSMH+g1C7eXM5oWTu+oPEWxBTdi6+/CrnwuSBsbJWBmoR0LpcP0Ha8i5F7W N0FbBQZhOBOS4SqNXaOsgP1GEailoeTzY4/bM7YUDu1i7jA4AkToF3EmgKmd2Ji4DZ6S pxGw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771644787; x=1772249587; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=chF3cAD1j09EpR3bM9lUaumkQDJZpAeYYRmoTp9QLII=; b=ewQfiAQeDoKFPVCtucCG1DrkkLoYoxI95R1tIKoovjWq0ywPpo9mVynT94ffK62sDC KgpWT1rfvUQP0amP2tJ9hs2vtvFZwaCPGgkXLT4vnH5FTt8hoTL6CFi54x+/sh2mjQ2B UPV6QBqAiE4ZKBI0SgYdPoSNu+Ag+RQ2wUdZrnwZixNlPD3HT5HC278/BPpWHREMfkA+ 7PuomdE1R4gMVq7DBSJngJY61sHKglXv2+9bbtvXB3GegvwVl94YOnd6UWTHbjs7bFXJ 5uv0GzNQGQCP339gyHR10lY89EUhU7CIK+/sE8n+7+h0pWr+i340I0Cba8suWy4+zhjz QySg== X-Forwarded-Encrypted: i=1; AJvYcCU7BXtLNyeozcQ5vwvqitcmEW64s/PlgBSdlNEAFqq9kms8UGTAePNVX9cbci8dQDukEnqd+9LSUS0zhpw=@vger.kernel.org X-Gm-Message-State: AOJu0YyUD/KOaGVQCiuHDNtrV+VVeDJ89YTQ71U4e6W90IR4DKkpwcZT pryX7/yYJUOrwzmIH8OsyHZq59vQcjUDhYamWPTv/i9/UoCC3uXF02I3Tirp+FYwRNz5FA82VgL hvn3PrXuPr4lrn4/KT+8YmAfN9aOPEyybB0i+yVYWFS1egqaVZqI5 X-Gm-Gg: AZuq6aKeBTTgc+iJQe4Nj2zpTFR1zzNRtq0i7KBckMkF/zQFTa6R2QOoPdkugO/kh3L CeKx52is7GPY8OnL0gBltsR30qJicmwjxr2QhQnXx4VQVKJTXzhwkBwirx6qmg16AdzXmRWRLrE BVQkv7GxajYAhO7pQ8IK/AJn2vJGBOFDotoh4Rd4nvNvwwAfAhOx6+bJT8Dqzp91Uey9WrB0UOM NJGmpykK0qO8U7jMKvQoZt+XK1Lm/+q+HITsgJadesXtaz0O6C9i9JWa/BZBgjJSAWJG4vKGBE3 Sxu/NmHE/7OhAX6acGePZlXoEEx1Op/QSghk0iqteuwISD5JRlUz+91CqXNgOmBpxZtJYFX9DGN PV/8zbyI71ylN6zHtYWQWrQkUnig3y6tXbyoxJoI= X-Received: by 2002:a05:6870:41cd:b0:3e8:304e:b0eb with SMTP id 586e51a60fabf-4157b135a66mr921056fac.5.1771644787385; Fri, 20 Feb 2026 19:33:07 -0800 (PST) Received: from c7-smtp-2023.dev.purestorage.com ([2620:125:9017:12:36:3:5:0]) by smtp-relay.gmail.com with ESMTPS id 586e51a60fabf-4157cd86b54sm189672fac.7.2026.02.20.19.33.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 20 Feb 2026 19:33:07 -0800 (PST) X-Relaying-Domain: purestorage.com Received: from dev-csander.dev.purestorage.com (dev-csander.dev.purestorage.com [10.112.29.101]) by c7-smtp-2023.dev.purestorage.com (Postfix) with ESMTP id 2A58F342181; Fri, 20 Feb 2026 20:33:06 -0700 (MST) Received: by dev-csander.dev.purestorage.com (Postfix, from userid 1557716354) id 203BFE427CB; Fri, 20 Feb 2026 20:33:06 -0700 (MST) From: Caleb Sander Mateos To: Keith Busch , Jens Axboe , Christoph Hellwig , Sagi Grimberg , Chaitanya Kulkarni Cc: linux-nvme@lists.infradead.org, linux-kernel@vger.kernel.org, Caleb Sander Mateos Subject: [PATCH v2 6/7] nvmet: use NVME_NS_FEAT_OPTPERF_SHIFT Date: Fri, 20 Feb 2026 20:33:01 -0700 Message-ID: <20260221033302.1451669-7-csander@purestorage.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20260221033302.1451669-1-csander@purestorage.com> References: <20260221033302.1451669-1-csander@purestorage.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Use the NVME_NS_FEAT_OPTPERF_SHIFT constant in nvmet_bdev_set_limits() to set the OPTPERF bits of the nvme_id_ns NSFEAT field instead of the magic number 4. Signed-off-by: Caleb Sander Mateos Reviewed-by: Christoph Hellwig --- drivers/nvme/target/io-cmd-bdev.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/nvme/target/io-cmd-bdev.c b/drivers/nvme/target/io-cmd= -bdev.c index 8d246b8ca604..d94f885a56d9 100644 --- a/drivers/nvme/target/io-cmd-bdev.c +++ b/drivers/nvme/target/io-cmd-bdev.c @@ -28,15 +28,15 @@ void nvmet_bdev_set_limits(struct block_device *bdev, s= truct nvme_id_ns *id) id->nawun =3D lpp0b; id->nawupf =3D lpp0b; id->nacwu =3D lpp0b; =20 /* - * Bit 4 indicates that the fields NPWG, NPWA, NPDG, NPDA, and + * OPTPERF =3D 01b indicates that the fields NPWG, NPWA, NPDG, NPDA, and * NOWS are defined for this namespace and should be used by * the host for I/O optimization. */ - id->nsfeat |=3D 1 << 4; + id->nsfeat |=3D 0x1 << NVME_NS_FEAT_OPTPERF_SHIFT; /* NPWG =3D Namespace Preferred Write Granularity. 0's based */ id->npwg =3D to0based(bdev_io_min(bdev) / bdev_logical_block_size(bdev)); /* NPWA =3D Namespace Preferred Write Alignment. 0's based */ id->npwa =3D id->npwg; /* NPDG =3D Namespace Preferred Deallocate Granularity. 0's based */ --=20 2.45.2 From nobody Fri Apr 17 10:35:54 2026 Received: from mail-pf1-f228.google.com (mail-pf1-f228.google.com [209.85.210.228]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BA7D025CC74 for ; Sat, 21 Feb 2026 03:33:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.228 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771644789; cv=none; b=FkczXAFM/huGTEruR/44n9VA2gftTx35BuDZU431EdkKot2iw5ckIXkvQPiEkEuGVBX5ScH62j2u0B5zyqJagK9fVfI/JfZmibohlZXCjx+qID7H/6nLXW83JG3IkAnMk9LL3byITH9A2DWT2P0W+hKfWZPvytjwlxsxvp3koyE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771644789; c=relaxed/simple; bh=LV5733WF2Amrq7TZbrAkujCFMKLuo+5jXT+GVMP94K0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Oz/YkI7VMWrE1rHiv2sgC+zmw/JjpQjlhgTAstxZavNiBC7Sj3rvpj7KtIBD0F2kdFn1BhNl2EFX5aBzuVlZs543kRI5vSsEOgO4zmaR5K4mlVHwbZd1HtWjaSr0LZfgX//Z9uMxeYvLaKkYQ8P/AcogERyp7lt5xRfPvjiQCSU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com; spf=fail smtp.mailfrom=purestorage.com; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b=B+ACL0Yc; arc=none smtp.client-ip=209.85.210.228 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=purestorage.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b="B+ACL0Yc" Received: by mail-pf1-f228.google.com with SMTP id d2e1a72fcca58-824a8039d9fso257270b3a.0 for ; Fri, 20 Feb 2026 19:33:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=purestorage.com; s=google2022; t=1771644787; x=1772249587; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=0AEEfE6xiusQnEvNeZM84fhKgvDhfLyCCrKC1bZTQl0=; b=B+ACL0Yc+MxH0H9WiLx8RVcDfzbzRgRzJXxF63gGOVfQC8vcHGwV1+F8Oy3mYSEJMO lsPdBcYNtgi9ehu3XMXmaeCNe6IHL6esEOKczyr7ke63m588z7ZeAbGPR0J9XbgeL2xu 2DuIjdMZt2Yv13xYo4TZpBIMaoxh23d5rbulnJfRio+CwF724TyVIeKGN1fEAPP0ESdl zawqoWHiXep+APfoHIYzxYAUGUX1VDz1LBPnfZtL5nNiwmCrxLwYkve5ZEO/rFU5tT0D 1vPa99Z2t4msaY+lEb5TdNCLUDhF3CcGZvN7tFl+YDjc5+06hmEksSElufWi17EWaIgk C7RQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771644787; x=1772249587; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=0AEEfE6xiusQnEvNeZM84fhKgvDhfLyCCrKC1bZTQl0=; b=CjngfmAumQxkU2Yep4Cyo1tjlJ+Wuw7aDuVWHvd/wnOebB3BYDDcWDe1F81gSxNIMj puOWpKfuy/ev6F4Z0BCU4TdE1M4rT3WYVYLaMHuQNk/zk5adrFYWMlpL7oNjrnl8jvMu 2Jg7URPIX9Kf9UK+HqvQE7ns9YCY9060uc8RjSfsMPi7Y9sa/Yp+f47G9GdEK19e0Odg vgemOBKuH2umZjY46JpqOcYu67kukcLNQk5HVekNm6yqtjaWi7t419NqrMmFjI606aES G1r4OAj6vzGYv10X8neIyFmzLe40bL9+NdqKUYHBcV3ehNhIAAA2xM9X3zPt+/K5Mkvu nlXA== X-Forwarded-Encrypted: i=1; AJvYcCVg4NUVttVz/lFmHz1l3KGMixnmLqsnr3nYDv9LI9l/MhA7OuIsXxixDOLAh8AJq46c2KcWaKlSEif3qGI=@vger.kernel.org X-Gm-Message-State: AOJu0YzRTRjPzVf2tdenL5dnCXGzAfeqzkwYXSLFDm4OOHaaAXXkATcu 8+GQ34uJ9xQIgdrPFIMA2V4uCivzih17qbBFTEev6rTkE42ZyxTQUlA1OqX1RH7HXQtHsDTDvwU XGRSdXp53Q8v5ygCi3FhsChc8QzbgZhWtWzqE5ZageUe8r9FUaCLm X-Gm-Gg: AZuq6aIcPVrogLv0BRJJVO9kB6YhNlUxcwQhHPcMPw0aVMyp0b4kfHsctle1yJP0qM7 EIZKNQyq5C8ZmsTiLSL/wMw18ZlUjLzgv6LBelwT3RxPOQnIciMasnehLk0rdCAVKm/0uoIeTcd WZSDZOA8h/+UBbzjhjoVsuZMW2ikiVhnSjsWfWIr52Oh8LHpFDUbU/VybSotJ1T/EGUvt+uU+Db tbKEIvZLeY/T4AWEG3TF+gtuVjBUi1jDmaQBA/nRsCA+hyxHa5gEAqLnsKFrwelf0bLZ3z64fAf B38lgOyrJgLMK6tZihXM6WKG2KGd6cu4ZiUGC3F/VQHx54C7tI8YwfRgPlzgCqXgxLMakJ+VLw3 Yt9A86TA5BpPp9k/7sBVYfLVq99zL+kkh1vUyyoA= X-Received: by 2002:a05:6a00:1993:b0:7b7:90de:e18d with SMTP id d2e1a72fcca58-826daaf4226mr1064232b3a.6.1771644787098; Fri, 20 Feb 2026 19:33:07 -0800 (PST) Received: from c7-smtp-2023.dev.purestorage.com ([2620:125:9017:12:36:3:5:0]) by smtp-relay.gmail.com with ESMTPS id d2e1a72fcca58-826dd844942sm164449b3a.7.2026.02.20.19.33.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 20 Feb 2026 19:33:07 -0800 (PST) X-Relaying-Domain: purestorage.com Received: from dev-csander.dev.purestorage.com (dev-csander.dev.purestorage.com [10.112.29.101]) by c7-smtp-2023.dev.purestorage.com (Postfix) with ESMTP id 55EEC340648; Fri, 20 Feb 2026 20:33:06 -0700 (MST) Received: by dev-csander.dev.purestorage.com (Postfix, from userid 1557716354) id 51094E427CB; Fri, 20 Feb 2026 20:33:06 -0700 (MST) From: Caleb Sander Mateos To: Keith Busch , Jens Axboe , Christoph Hellwig , Sagi Grimberg , Chaitanya Kulkarni Cc: linux-nvme@lists.infradead.org, linux-kernel@vger.kernel.org, Caleb Sander Mateos Subject: [PATCH v2 7/7] nvmet: report NPDGL and NPDAL Date: Fri, 20 Feb 2026 20:33:02 -0700 Message-ID: <20260221033302.1451669-8-csander@purestorage.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20260221033302.1451669-1-csander@purestorage.com> References: <20260221033302.1451669-1-csander@purestorage.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" A block device with a very large discard_granularity queue limit may not be able to report it in the 16-bit NPDG and NPDA fields in the Identify Namespace data structure. For this reason, version 2.1 of the NVMe specs added 32-bit fields NPDGL and NPDAL to the NVM Command Set Specific Identify Namespace structure. So report the discard_granularity there too and set OPTPERF to 11b to indicate those fields are supported. Signed-off-by: Caleb Sander Mateos Reviewed-by: Christoph Hellwig --- drivers/nvme/target/admin-cmd.c | 2 ++ drivers/nvme/target/io-cmd-bdev.c | 19 +++++++++++++++---- drivers/nvme/target/nvmet.h | 2 ++ 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/drivers/nvme/target/admin-cmd.c b/drivers/nvme/target/admin-cm= d.c index 3da31bb1183e..72e733b62a2c 100644 --- a/drivers/nvme/target/admin-cmd.c +++ b/drivers/nvme/target/admin-cmd.c @@ -1056,10 +1056,12 @@ static void nvme_execute_identify_ns_nvm(struct nvm= et_req *req) id =3D kzalloc(sizeof(*id), GFP_KERNEL); if (!id) { status =3D NVME_SC_INTERNAL; goto out; } + if (req->ns->bdev) + nvmet_bdev_set_nvm_limits(req->ns->bdev, id); status =3D nvmet_copy_to_sgl(req, 0, id, sizeof(*id)); kfree(id); out: nvmet_req_complete(req, status); } diff --git a/drivers/nvme/target/io-cmd-bdev.c b/drivers/nvme/target/io-cmd= -bdev.c index d94f885a56d9..485b5cd42e4f 100644 --- a/drivers/nvme/target/io-cmd-bdev.c +++ b/drivers/nvme/target/io-cmd-bdev.c @@ -28,15 +28,15 @@ void nvmet_bdev_set_limits(struct block_device *bdev, s= truct nvme_id_ns *id) id->nawun =3D lpp0b; id->nawupf =3D lpp0b; id->nacwu =3D lpp0b; =20 /* - * OPTPERF =3D 01b indicates that the fields NPWG, NPWA, NPDG, NPDA, and - * NOWS are defined for this namespace and should be used by - * the host for I/O optimization. + * OPTPERF =3D 11b indicates that the fields NPWG, NPWA, NPDG, NPDA, + * NPDGL, NPDAL, and NOWS are defined for this namespace and should be + * used by the host for I/O optimization. */ - id->nsfeat |=3D 0x1 << NVME_NS_FEAT_OPTPERF_SHIFT; + id->nsfeat |=3D 0x3 << NVME_NS_FEAT_OPTPERF_SHIFT; /* NPWG =3D Namespace Preferred Write Granularity. 0's based */ id->npwg =3D to0based(bdev_io_min(bdev) / bdev_logical_block_size(bdev)); /* NPWA =3D Namespace Preferred Write Alignment. 0's based */ id->npwa =3D id->npwg; /* NPDG =3D Namespace Preferred Deallocate Granularity. 0's based */ @@ -50,10 +50,21 @@ void nvmet_bdev_set_limits(struct block_device *bdev, s= truct nvme_id_ns *id) /* Set WZDS and DRB if device supports unmapped write zeroes */ if (bdev_write_zeroes_unmap_sectors(bdev)) id->dlfeat =3D (1 << 3) | 0x1; } =20 +void nvmet_bdev_set_nvm_limits(struct block_device *bdev, + struct nvme_id_ns_nvm *id) +{ + /* + * NPDGL =3D Namespace Preferred Deallocate Granularity Large + * NPDAL =3D Namespace Preferred Deallocate Alignment Large + */ + id->npdgl =3D id->npdal =3D cpu_to_le32(bdev_discard_granularity(bdev) / + bdev_logical_block_size(bdev)); +} + void nvmet_bdev_ns_disable(struct nvmet_ns *ns) { if (ns->bdev_file) { fput(ns->bdev_file); ns->bdev =3D NULL; diff --git a/drivers/nvme/target/nvmet.h b/drivers/nvme/target/nvmet.h index b664b584fdc8..3a7efd9cb81a 100644 --- a/drivers/nvme/target/nvmet.h +++ b/drivers/nvme/target/nvmet.h @@ -547,10 +547,12 @@ void nvmet_start_keep_alive_timer(struct nvmet_ctrl *= ctrl); void nvmet_stop_keep_alive_timer(struct nvmet_ctrl *ctrl); =20 u16 nvmet_parse_connect_cmd(struct nvmet_req *req); u32 nvmet_connect_cmd_data_len(struct nvmet_req *req); void nvmet_bdev_set_limits(struct block_device *bdev, struct nvme_id_ns *i= d); +void nvmet_bdev_set_nvm_limits(struct block_device *bdev, + struct nvme_id_ns_nvm *id); u16 nvmet_bdev_parse_io_cmd(struct nvmet_req *req); u16 nvmet_file_parse_io_cmd(struct nvmet_req *req); u16 nvmet_bdev_zns_parse_io_cmd(struct nvmet_req *req); u32 nvmet_admin_cmd_data_len(struct nvmet_req *req); u16 nvmet_parse_admin_cmd(struct nvmet_req *req); --=20 2.45.2