svn commit: r301955 - head/sys/boot/zfs

Andriy Gapon avg at FreeBSD.org
Thu Jun 16 07:45:58 UTC 2016


Author: avg
Date: Thu Jun 16 07:45:57 2016
New Revision: 301955
URL: https://svnweb.freebsd.org/changeset/base/301955

Log:
  fix a zfs boot regression introduced in r300117 by accident
  
  There is no reason to return non-zero value from zfs_probe_partition()
  as that causes following partitions to not be probed for ZFS vdevs.
  A particular scenario that I encountered is a GPT partitioned disk
  where several partitions have freebsd-zfs type.  A partition with a lower
  index is used as a cache (l2arc) vdev and in that case case zfs_probe()
  returned a non-zero status.  That status was returned to ptable_iterate()
  and caused it to abort the iteration.  Because of that the subsequent
  partitions were not probed and a root pool was not discovered resulting
  in a boot failure.
  
  While there fix the style for nearby return statements.
  
  Approved by:	re (kib)

Modified:
  head/sys/boot/zfs/zfs.c

Modified: head/sys/boot/zfs/zfs.c
==============================================================================
--- head/sys/boot/zfs/zfs.c	Thu Jun 16 06:34:12 2016	(r301954)
+++ head/sys/boot/zfs/zfs.c	Thu Jun 16 07:45:57 2016	(r301955)
@@ -450,7 +450,7 @@ zfs_probe_partition(void *arg, const cha
 	/* Probe only freebsd-zfs and freebsd partitions */
 	if (part->type != PART_FREEBSD &&
 	    part->type != PART_FREEBSD_ZFS)
-		return 0;
+		return (0);
 
 	ppa = (struct zfs_probe_args *)arg;
 	strncpy(devname, ppa->devname, strlen(ppa->devname) - 1);
@@ -458,10 +458,10 @@ zfs_probe_partition(void *arg, const cha
 	sprintf(devname, "%s%s:", devname, partname);
 	pa.fd = open(devname, O_RDONLY);
 	if (pa.fd == -1)
-		return 0;
+		return (0);
 	ret = zfs_probe(pa.fd, ppa->pool_guid);
 	if (ret == 0)
-		return 0;
+		return (0);
 	/* Do we have BSD label here? */
 	if (part->type == PART_FREEBSD) {
 		pa.devname = devname;
@@ -470,12 +470,12 @@ zfs_probe_partition(void *arg, const cha
 		table = ptable_open(&pa, part->end - part->start + 1,
 		    ppa->secsz, zfs_diskread);
 		if (table != NULL) {
-			ret = ptable_iterate(table, &pa, zfs_probe_partition);
+			ptable_iterate(table, &pa, zfs_probe_partition);
 			ptable_close(table);
 		}
 	}
 	close(pa.fd);
-	return (ret);
+	return (0);
 }
 
 int


More information about the svn-src-head mailing list