From: Hannes Reinecke Date: Thu, 17 Jun 2021 07:17:59 +0000 (+0200) Subject: tree: error checking in nvme_ns_init() X-Git-Tag: v1.0-rc0~124^2~15 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=0618fede3210957eb7e184dcab2f6072645ff0a4;p=users%2Fsagi%2Flibnvme.git tree: error checking in nvme_ns_init() The call to 'nvme_ns_identify()' in nvme_ns_init() might fail, leading to a largely unusable namespace. So not continue here, but rather fail the call to nvme_ns_open(). Signed-off-by: Hannes Reinecke --- diff --git a/src/nvme/tree.c b/src/nvme/tree.c index ceda8198..653521da 100644 --- a/src/nvme/tree.c +++ b/src/nvme/tree.c @@ -1477,15 +1477,17 @@ static void nvme_ns_parse_descriptors(struct nvme_ns *n, } } -static void nvme_ns_init(struct nvme_ns *n) +static int nvme_ns_init(struct nvme_ns *n) { struct nvme_id_ns ns = { }; uint8_t buffer[NVME_IDENTIFY_DATA_SIZE] = { }; struct nvme_ns_id_desc *descs = (void *)buffer; int flbas; + int ret; - if (nvme_ns_identify(n, &ns) != 0) - return; + ret = nvme_ns_identify(n, &ns); + if (ret) + return ret; flbas = ns.flbas & NVME_NS_FLBAS_LBA_MASK; n->lba_shift = ns.lbaf[flbas].ds; @@ -1496,6 +1498,8 @@ static void nvme_ns_init(struct nvme_ns *n) if (!nvme_ns_identify_descs(n, descs)) nvme_ns_parse_descriptors(n, descs); + + return 0; } static nvme_ns_t nvme_ns_open(const char *name) @@ -1516,9 +1520,11 @@ static nvme_ns_t nvme_ns_open(const char *name) if (nvme_get_nsid(n->fd, &n->nsid) < 0) goto close_fd; + if (nvme_ns_init(n) != 0) + goto close_fd; + list_head_init(&n->paths); list_node_init(&n->entry); - nvme_ns_init(n); return n;