qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] hw/block/nvme: conditionally enable DULBE for zoned namespaces
@ 2021-01-11 18:09 Klaus Jensen
  2021-01-14 23:39 ` Keith Busch
  0 siblings, 1 reply; 3+ messages in thread
From: Klaus Jensen @ 2021-01-11 18:09 UTC (permalink / raw)
  To: qemu-devel
  Cc: Kevin Wolf, qemu-block, Dmitry Fomichev, Klaus Jensen, Max Reitz,
	Keith Busch, Klaus Jensen

From: Klaus Jensen <k.jensen@samsung.com>

The device uses the BDRV_BLOCK_ZERO flag to determine the "deallocated"
status of logical blocks. Since the zoned namespaces command set
specification defines that logical blocks SHALL be marked as deallocated
when the zone is in the Empty or Offline states, DULBE can only be
supported if the zone size is a multiple of the calculated deallocation
granularity (reported in NPDG) which depends on the underlying block
device cluster size (if applicable) or the configured
discard_granularity.

Signed-off-by: Klaus Jensen <k.jensen@samsung.com>
---
 hw/block/nvme-ns.c | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/hw/block/nvme-ns.c b/hw/block/nvme-ns.c
index a4972ac23d8f..274eaf61b721 100644
--- a/hw/block/nvme-ns.c
+++ b/hw/block/nvme-ns.c
@@ -16,6 +16,7 @@
 #include "qemu/units.h"
 #include "qemu/cutils.h"
 #include "qemu/log.h"
+#include "qemu/error-report.h"
 #include "hw/block/block.h"
 #include "hw/pci/pci.h"
 #include "sysemu/sysemu.h"
@@ -226,6 +227,22 @@ static void nvme_ns_init_zoned(NvmeCtrl *n, NvmeNamespace *ns, int lba_index)
     ns->id_ns.ncap = ns->id_ns.nsze;
     ns->id_ns.nuse = ns->id_ns.ncap;
 
+    /*
+     * The device uses the BDRV_BLOCK_ZERO flag to determine the "deallocated"
+     * status of logical blocks. Since the spec defines that logical blocks
+     * SHALL be deallocated when then zone is in the Empty or Offline states,
+     * we can only support DULBE if the zone size is a multiple of the
+     * calculated NPDG.
+     */
+    if (ns->zone_size % (ns->id_ns.npdg + 1)) {
+        warn_report("the zone size (%"PRIu64" blocks) is not a multiple of "
+                    "the calculated deallocation granularity "
+                    "(%"PRIu16" blocks); DULBE support disabled",
+                    ns->zone_size, ns->id_ns.npdg + 1);
+
+        ns->id_ns.nsfeat &= ~0x4;
+    }
+
     ns->id_ns_zoned = id_ns_z;
 }
 
-- 
2.30.0



^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH] hw/block/nvme: conditionally enable DULBE for zoned namespaces
  2021-01-11 18:09 [PATCH] hw/block/nvme: conditionally enable DULBE for zoned namespaces Klaus Jensen
@ 2021-01-14 23:39 ` Keith Busch
  2021-01-15  7:10   ` Klaus Jensen
  0 siblings, 1 reply; 3+ messages in thread
From: Keith Busch @ 2021-01-14 23:39 UTC (permalink / raw)
  To: Klaus Jensen
  Cc: Kevin Wolf, qemu-block, Dmitry Fomichev, Klaus Jensen,
	qemu-devel, Max Reitz

On Mon, Jan 11, 2021 at 07:09:52PM +0100, Klaus Jensen wrote:
> From: Klaus Jensen <k.jensen@samsung.com>
> 
> The device uses the BDRV_BLOCK_ZERO flag to determine the "deallocated"
> status of logical blocks. Since the zoned namespaces command set
> specification defines that logical blocks SHALL be marked as deallocated
> when the zone is in the Empty or Offline states, DULBE can only be
> supported if the zone size is a multiple of the calculated deallocation
> granularity (reported in NPDG) which depends on the underlying block
> device cluster size (if applicable) or the configured
> discard_granularity.
> 
> Signed-off-by: Klaus Jensen <k.jensen@samsung.com>

Looks good.

Reviewed-by: Keith Busch <kbusch@kernel.org>


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] hw/block/nvme: conditionally enable DULBE for zoned namespaces
  2021-01-14 23:39 ` Keith Busch
@ 2021-01-15  7:10   ` Klaus Jensen
  0 siblings, 0 replies; 3+ messages in thread
From: Klaus Jensen @ 2021-01-15  7:10 UTC (permalink / raw)
  To: Keith Busch; +Cc: Kevin Wolf, Klaus Jensen, qemu-devel, qemu-block, Max Reitz

[-- Attachment #1: Type: text/plain, Size: 858 bytes --]

On Jan 14 15:39, Keith Busch wrote:
> On Mon, Jan 11, 2021 at 07:09:52PM +0100, Klaus Jensen wrote:
> > From: Klaus Jensen <k.jensen@samsung.com>
> > 
> > The device uses the BDRV_BLOCK_ZERO flag to determine the "deallocated"
> > status of logical blocks. Since the zoned namespaces command set
> > specification defines that logical blocks SHALL be marked as deallocated
> > when the zone is in the Empty or Offline states, DULBE can only be
> > supported if the zone size is a multiple of the calculated deallocation
> > granularity (reported in NPDG) which depends on the underlying block
> > device cluster size (if applicable) or the configured
> > discard_granularity.
> > 
> > Signed-off-by: Klaus Jensen <k.jensen@samsung.com>
> 
> Looks good.
> 
> Reviewed-by: Keith Busch <kbusch@kernel.org>
> 

Thanks! Applied to nvme-next.

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2021-01-15  7:17 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-01-11 18:09 [PATCH] hw/block/nvme: conditionally enable DULBE for zoned namespaces Klaus Jensen
2021-01-14 23:39 ` Keith Busch
2021-01-15  7:10   ` Klaus Jensen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).