Eliminate unneeded copying of vdev data, goto, etc. and add a note
that checksum of vdev label should be checked (which is not done currently). No functional change. While I'm there, raise WARNS to 2. Reviewed by: allanjude MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D3508
This commit is contained in:
parent
0a70ef0276
commit
4b43341dea
@ -11,7 +11,7 @@ SRCS += zfs.c
|
||||
|
||||
MAN= fstyp.8
|
||||
|
||||
WARNS?= 0
|
||||
WARNS?= 2
|
||||
|
||||
.include <src.opts.mk>
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
/*-
|
||||
* Copyright (c) 2015 Allan Jude <allanjude@FreeBSD.org>
|
||||
* Copyright (c) 2015 Xin LI <delphij@FreeBSD.org>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
@ -42,29 +43,33 @@ __FBSDID("$FreeBSD$");
|
||||
int
|
||||
fstyp_zfs(FILE *fp, char *label, size_t labelsize)
|
||||
{
|
||||
vdev_label_t *zpool_ptr = NULL;
|
||||
vdev_label_t zpool_label;
|
||||
char *buf = zpool_label.vl_vdev_phys.vp_nvlist;
|
||||
vdev_label_t *vdev_label = NULL;
|
||||
vdev_phys_t *vdev_phys;
|
||||
char *zpool_name = NULL;
|
||||
size_t buflen = sizeof (zpool_label.vl_vdev_phys.vp_nvlist);
|
||||
nvlist_t *config = NULL;
|
||||
int err = 0;
|
||||
|
||||
zpool_ptr = (vdev_label_t *)read_buf(fp, 0, sizeof(zpool_label));
|
||||
if (zpool_ptr == NULL)
|
||||
/*
|
||||
* Read in the first ZFS vdev label ("L0"), located at the beginning
|
||||
* of the vdev and extract the pool name from it.
|
||||
*
|
||||
* TODO: the checksum of label should be validated.
|
||||
*/
|
||||
vdev_label = (vdev_label_t *)read_buf(fp, 0, sizeof(*vdev_label));
|
||||
if (vdev_label == NULL)
|
||||
return (1);
|
||||
zpool_label = *zpool_ptr;
|
||||
if (nvlist_unpack(buf, buflen, &config, 0) != 0)
|
||||
goto zfserr;
|
||||
if (nvlist_lookup_string(config, "name", &zpool_name) != 0)
|
||||
goto zfserr;
|
||||
strlcpy(label, zpool_name, labelsize);
|
||||
nvlist_free(config);
|
||||
free(zpool_ptr);
|
||||
return (0);
|
||||
|
||||
zfserr:
|
||||
nvlist_free(config);
|
||||
free(zpool_ptr);
|
||||
vdev_phys = &(vdev_label->vl_vdev_phys);
|
||||
|
||||
return (1);
|
||||
if ((nvlist_unpack(vdev_phys->vp_nvlist, sizeof(vdev_phys->vp_nvlist),
|
||||
&config, 0)) == 0 &&
|
||||
(nvlist_lookup_string(config, "name", &zpool_name) == 0)) {
|
||||
strlcpy(label, zpool_name, labelsize);
|
||||
} else
|
||||
err = 1;
|
||||
|
||||
nvlist_free(config);
|
||||
free(vdev_label);
|
||||
|
||||
return (err);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user