[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v5 13/14] hw/block/nvme: Use zone metadata file for persisten
From: |
Klaus Jensen |
Subject: |
Re: [PATCH v5 13/14] hw/block/nvme: Use zone metadata file for persistence |
Date: |
Mon, 28 Sep 2020 09:51:40 +0200 |
On Sep 28 11:35, Dmitry Fomichev wrote:
> A ZNS drive that is emulated by this module is currently initialized
> with all zones Empty upon startup. However, actual ZNS SSDs save the
> state and condition of all zones in their internal NVRAM in the event
> of power loss. When such a drive is powered up again, it closes or
> finishes all zones that were open at the moment of shutdown. Besides
> that, the write pointer position as well as the state and condition
> of all zones is preserved across power-downs.
>
> This commit adds the capability to have a persistent zone metadata
> to the device. The new optional module property, "zone_file",
> is introduced. If added to the command line, this property specifies
> the name of the file that stores the zone metadata. If "zone_file" is
> omitted, the device will be initialized with all zones empty, the same
> as before.
>
> If zone metadata is configured to be persistent, then zone descriptor
> extensions also persist across controller shutdowns.
>
> Signed-off-by: Dmitry Fomichev <dmitry.fomichev@wdc.com>
> ---
> hw/block/nvme-ns.c | 341 ++++++++++++++++++++++++++++++++++++++++--
> hw/block/nvme-ns.h | 33 ++++
> hw/block/nvme.c | 2 +
> hw/block/trace-events | 1 +
> 4 files changed, 362 insertions(+), 15 deletions(-)
>
> diff --git a/hw/block/nvme-ns.c b/hw/block/nvme-ns.c
> index 47751f2d54..a94021da81 100644
> --- a/hw/block/nvme-ns.c
> +++ b/hw/block/nvme-ns.c
> @@ -293,12 +421,180 @@ static void nvme_init_zone_meta(NvmeNamespace *ns)
> i--;
> }
> }
> +
> + if (ns->params.zone_file) {
> + nvme_set_zone_meta_dirty(ns);
> + }
> +}
> +
> +static int nvme_open_zone_file(NvmeNamespace *ns, bool *init_meta,
> + Error **errp)
> +{
> + Object *file_be;
> + HostMemoryBackend *fb;
> + struct stat statbuf;
> + int ret;
> +
> + ret = stat(ns->params.zone_file, &statbuf);
> + if (ret && errno == ENOENT) {
> + *init_meta = true;
> + } else if (!S_ISREG(statbuf.st_mode)) {
> + error_setg(errp, "\"%s\" is not a regular file",
> + ns->params.zone_file);
> + return -1;
> + }
> +
> + file_be = object_new(TYPE_MEMORY_BACKEND_FILE);
> + object_property_set_str(file_be, "mem-path", ns->params.zone_file,
> + &error_abort);
> + object_property_set_int(file_be, "size", ns->meta_size, &error_abort);
> + object_property_set_bool(file_be, "share", true, &error_abort);
> + object_property_set_bool(file_be, "discard-data", false, &error_abort);
> + if (!user_creatable_complete(USER_CREATABLE(file_be), errp)) {
> + object_unref(file_be);
> + return -1;
> + }
> + object_property_add_child(OBJECT(ns), "_fb", file_be);
> + object_unref(file_be);
> +
> + fb = MEMORY_BACKEND(file_be);
> + ns->zone_mr = host_memory_backend_get_memory(fb);
> +
> + return 0;
> +}
> +
> +static int nvme_map_zone_file(NvmeNamespace *ns, bool *init_meta)
> +{
> + ns->zone_meta = (void *)memory_region_get_ram_ptr(ns->zone_mr);
I forgot that the HostMemoryBackend doesn't magically make the memory
available to the device, so of course this is still needed.
Anyway.
No reason for me to keep complaining about this. I do not like it, I
will not ACK it and I think I made my reasons pretty clear.
signature.asc
Description: PGP signature
- [PATCH v5 11/14] hw/block/nvme: Support Zone Descriptor Extensions, (continued)
- [PATCH v5 11/14] hw/block/nvme: Support Zone Descriptor Extensions, Dmitry Fomichev, 2020/09/27
- [PATCH v5 09/14] hw/block/nvme: Support Zoned Namespace Command Set, Dmitry Fomichev, 2020/09/27
- Re: [PATCH v5 09/14] hw/block/nvme: Support Zoned Namespace Command Set, Klaus Jensen, 2020/09/28
- Re: [PATCH v5 09/14] hw/block/nvme: Support Zoned Namespace Command Set, Klaus Jensen, 2020/09/28
- Re: [PATCH v5 09/14] hw/block/nvme: Support Zoned Namespace Command Set, Klaus Jensen, 2020/09/30
- Re: [PATCH v5 09/14] hw/block/nvme: Support Zoned Namespace Command Set, Niklas Cassel, 2020/09/30
- Re: [PATCH v5 09/14] hw/block/nvme: Support Zoned Namespace Command Set, Niklas Cassel, 2020/09/30
- [PATCH v5 12/14] hw/block/nvme: Add injection of Offline/Read-Only zones, Dmitry Fomichev, 2020/09/27
- [PATCH v5 13/14] hw/block/nvme: Use zone metadata file for persistence, Dmitry Fomichev, 2020/09/27
- Re: [PATCH v5 13/14] hw/block/nvme: Use zone metadata file for persistence,
Klaus Jensen <=
- [PATCH v5 14/14] hw/block/nvme: Document zoned parameters in usage text, Dmitry Fomichev, 2020/09/27