On Sep 14 07:14, 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.fomic...@wdc.com>
This doesn't build on mingw. > --- > hw/block/nvme.c | 370 +++++++++++++++++++++++++++++++++++++++++++++--- > hw/block/nvme.h | 37 +++++ > 2 files changed, 386 insertions(+), 21 deletions(-) > > diff --git a/hw/block/nvme.c b/hw/block/nvme.c > index b49ae83dd5..41f4c0dacd 100644 > --- a/hw/block/nvme.c > +++ b/hw/block/nvme.c > @@ -3429,7 +3557,188 @@ static int nvme_init_zone_meta(NvmeCtrl *n, > NvmeNamespace *ns, > return 0; > } > > -static void nvme_zoned_init_ctrl(NvmeCtrl *n, Error **errp) > +static int nvme_open_zone_file(NvmeCtrl *n, bool *init_meta) > +{ > + struct stat statbuf; > + size_t fsize; > + int ret; > + > + ret = stat(n->params.zone_file, &statbuf); > + if (ret && errno == ENOENT) { > + *init_meta = true; > + } else if (!S_ISREG(statbuf.st_mode)) { > + fprintf(stderr, "%s is not a regular file\n", strerror(errno)); > + return -1; > + } > + > + n->zone_file_fd = open(n->params.zone_file, > + O_RDWR | O_LARGEFILE | O_BINARY | O_CREAT, 644); mode is wrong - I think you meant for it to be octal.
signature.asc
Description: PGP signature