summaryrefslogtreecommitdiffstats
path: root/sys/geom/raid/md_nvidia.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/geom/raid/md_nvidia.c')
-rw-r--r--sys/geom/raid/md_nvidia.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/sys/geom/raid/md_nvidia.c b/sys/geom/raid/md_nvidia.c
index eb2e493..9a8397c 100644
--- a/sys/geom/raid/md_nvidia.c
+++ b/sys/geom/raid/md_nvidia.c
@@ -256,23 +256,24 @@ nvidia_meta_read(struct g_consumer *cp)
pp->name, error);
return (NULL);
}
- meta = malloc(sizeof(*meta), M_MD_NVIDIA, M_WAITOK);
- memcpy(meta, buf, min(sizeof(*meta), pp->sectorsize));
- g_free(buf);
+ meta = (struct nvidia_raid_conf *)buf;
/* Check if this is an NVIDIA RAID struct */
if (strncmp(meta->nvidia_id, NVIDIA_MAGIC, strlen(NVIDIA_MAGIC))) {
G_RAID_DEBUG(1, "NVIDIA signature check failed on %s", pp->name);
- free(meta, M_MD_NVIDIA);
+ g_free(buf);
return (NULL);
}
if (meta->config_size > 128 ||
meta->config_size < 30) {
G_RAID_DEBUG(1, "NVIDIA metadata size looks wrong: %d",
meta->config_size);
- free(meta, M_MD_NVIDIA);
+ g_free(buf);
return (NULL);
}
+ meta = malloc(sizeof(*meta), M_MD_NVIDIA, M_WAITOK);
+ memcpy(meta, buf, min(sizeof(*meta), pp->sectorsize));
+ g_free(buf);
/* Check metadata checksum. */
for (checksum = 0, ptr = (uint32_t *)meta,
OpenPOWER on IntegriCloud