Message ID | 20220419121039.1259477-2-its@irrelevant.dk |
---|---|
State | New |
Headers | show |
Series | hw/nvme: fix namespace identifiers | expand |
On Tue, Apr 19, 2022 at 02:10:35PM +0200, Klaus Jensen wrote: > From: Klaus Jensen <k.jensen@samsung.com> > > The Identify Controller Serial Number (SN) is the serial number for the > NVM subsystem and must be the same across all controller in the NVM > subsystem. > > Enforce this. > > Signed-off-by: Klaus Jensen <k.jensen@samsung.com> Looks good: Reviewed-by: Christoph Hellwig <hch@lst.de>
diff --git a/hw/nvme/nvme.h b/hw/nvme/nvme.h index 739c8b8f7962..7f2e8f1b6491 100644 --- a/hw/nvme/nvme.h +++ b/hw/nvme/nvme.h @@ -48,6 +48,7 @@ typedef struct NvmeSubsystem { DeviceState parent_obj; NvmeBus bus; uint8_t subnqn[256]; + char *serial; NvmeCtrl *ctrls[NVME_MAX_CONTROLLERS]; NvmeNamespace *namespaces[NVME_MAX_NAMESPACES + 1]; diff --git a/hw/nvme/subsys.c b/hw/nvme/subsys.c index fb58d639504e..691a90d20947 100644 --- a/hw/nvme/subsys.c +++ b/hw/nvme/subsys.c @@ -27,6 +27,13 @@ int nvme_subsys_register_ctrl(NvmeCtrl *n, Error **errp) return -1; } + if (!subsys->serial) { + subsys->serial = g_strdup(n->params.serial); + } else if (strcmp(subsys->serial, n->params.serial)) { + error_setg(errp, "invalid controller serial"); + return -1; + } + subsys->ctrls[cntlid] = n; for (nsid = 1; nsid < ARRAY_SIZE(subsys->namespaces); nsid++) {