summaryrefslogtreecommitdiffstats
path: root/sys/geom/raid/md_sii.c
diff options
context:
space:
mode:
authormav <mav@FreeBSD.org>2014-12-19 01:13:41 +0000
committermav <mav@FreeBSD.org>2014-12-19 01:13:41 +0000
commiteac5956a91676b1404b6076db57f80d70eaef17e (patch)
treee8dee59a385f07f7c3ebb5e0737434eb7ca97e89 /sys/geom/raid/md_sii.c
parent3f663b8b407d2e2a58343fae3f875fea4e84fcff (diff)
downloadFreeBSD-src-eac5956a91676b1404b6076db57f80d70eaef17e.zip
FreeBSD-src-eac5956a91676b1404b6076db57f80d70eaef17e.tar.gz
MFC r275503:
Avoid unneeded malloc/memcpy/free if there is no metadata on disk. Submitted by: Dmitry Luhtionov <dmitryluhtionov@gmail.com>
Diffstat (limited to 'sys/geom/raid/md_sii.c')
-rw-r--r--sys/geom/raid/md_sii.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/sys/geom/raid/md_sii.c b/sys/geom/raid/md_sii.c
index 5012dc5..8a982a6 100644
--- a/sys/geom/raid/md_sii.c
+++ b/sys/geom/raid/md_sii.c
@@ -277,15 +277,13 @@ sii_meta_read(struct g_consumer *cp)
pp->name, error);
return (NULL);
}
- meta = malloc(sizeof(*meta), M_MD_SII, M_WAITOK);
- memcpy(meta, buf, min(sizeof(*meta), pp->sectorsize));
- g_free(buf);
+ meta = (struct sii_raid_conf *)buf;
/* Check vendor ID. */
if (meta->vendor_id != 0x1095) {
G_RAID_DEBUG(1, "SiI vendor ID check failed on %s (0x%04x)",
pp->name, meta->vendor_id);
- free(meta, M_MD_SII);
+ g_free(buf);
return (NULL);
}
@@ -293,9 +291,12 @@ sii_meta_read(struct g_consumer *cp)
if (meta->version_major != 2) {
G_RAID_DEBUG(1, "SiI version check failed on %s (%d.%d)",
pp->name, meta->version_major, meta->version_minor);
- free(meta, M_MD_SII);
+ g_free(buf);
return (NULL);
}
+ meta = malloc(sizeof(*meta), M_MD_SII, M_WAITOK);
+ memcpy(meta, buf, min(sizeof(*meta), pp->sectorsize));
+ g_free(buf);
/* Check metadata checksum. */
for (checksum = 0, ptr = (uint16_t *)meta, i = 0; i <= 159; i++)
OpenPOWER on IntegriCloud