Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 17 Sep 2015 20:55:47 +0000 (UTC)
From:      Xin LI <delphij@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r287937 - head/usr.sbin/fstyp
Message-ID:  <201509172055.t8HKtlvp096235@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: delphij
Date: Thu Sep 17 20:55:47 2015
New Revision: 287937
URL: https://svnweb.freebsd.org/changeset/base/287937

Log:
  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

Modified:
  head/usr.sbin/fstyp/Makefile
  head/usr.sbin/fstyp/zfs.c

Modified: head/usr.sbin/fstyp/Makefile
==============================================================================
--- head/usr.sbin/fstyp/Makefile	Thu Sep 17 20:48:42 2015	(r287936)
+++ head/usr.sbin/fstyp/Makefile	Thu Sep 17 20:55:47 2015	(r287937)
@@ -11,7 +11,7 @@ SRCS +=	zfs.c
 
 MAN=	fstyp.8
 
-WARNS?=	0
+WARNS?=	2
 
 .include <src.opts.mk>
 

Modified: head/usr.sbin/fstyp/zfs.c
==============================================================================
--- head/usr.sbin/fstyp/zfs.c	Thu Sep 17 20:48:42 2015	(r287936)
+++ head/usr.sbin/fstyp/zfs.c	Thu Sep 17 20:55:47 2015	(r287937)
@@ -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:
+	vdev_phys = &(vdev_label->vl_vdev_phys);
+
+	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(zpool_ptr);
+	free(vdev_label);
 
-	return (1);
+	return (err);
 }



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201509172055.t8HKtlvp096235>