svn commit: r366066 - in head/stand: efi/libefi libsa/zfs

Toomas Soome tsoome at FreeBSD.org
Wed Sep 23 08:22:15 UTC 2020


Author: tsoome
Date: Wed Sep 23 08:22:14 2020
New Revision: 366066
URL: https://svnweb.freebsd.org/changeset/base/366066

Log:
  loader: zfs_probe_dev should pick first matching zfs pool
  
  During devswitch probe, we pick boot pool based on boot disk, if the boot
  disk happens to have multiple pools in freebsd-zfs partitions, the current
  code does pick last pool from boot disk as boot pool. While there is no
  way at that stage to test, the more logical approach would be to pick
  first matching pool.
  
  This patch is assuming we do pass pool guid pointer with guid value 0,
  this will help us to determine, if the guid value is already set or not.
  
  The general suggestion would be not to share disk between different pools.
  
  Reported by:	Alexander Leidinger

Modified:
  head/stand/efi/libefi/efizfs.c
  head/stand/libsa/zfs/zfs.c

Modified: head/stand/efi/libefi/efizfs.c
==============================================================================
--- head/stand/efi/libefi/efizfs.c	Wed Sep 23 07:27:12 2020	(r366065)
+++ head/stand/efi/libefi/efizfs.c	Wed Sep 23 08:22:14 2020	(r366066)
@@ -99,7 +99,7 @@ efi_zfs_probe(void)
 	pdinfo_list_t *hdi;
 	pdinfo_t *hd, *pd = NULL;
 	char devname[SPECNAMELEN + 1];
-        uint64_t guid;
+	uint64_t guid;
 
 	hdi = efiblk_get_pdinfo_list(&efipart_hddev);
 	STAILQ_INIT(&zfsinfo);
@@ -114,6 +114,7 @@ efi_zfs_probe(void)
 		STAILQ_FOREACH(pd, &hd->pd_part, pd_link) {
 			snprintf(devname, sizeof(devname), "%s%dp%d:",
 			    efipart_hddev.dv_name, hd->pd_unit, pd->pd_unit);
+			guid = 0;
 			if (zfs_probe_dev(devname, &guid) == 0) {
 				insert_zfs(pd->pd_handle, guid);
 				if (pd->pd_handle == boot_img->DeviceHandle)

Modified: head/stand/libsa/zfs/zfs.c
==============================================================================
--- head/stand/libsa/zfs/zfs.c	Wed Sep 23 07:27:12 2020	(r366065)
+++ head/stand/libsa/zfs/zfs.c	Wed Sep 23 08:22:14 2020	(r366066)
@@ -651,7 +651,8 @@ zfs_probe(int fd, uint64_t *pool_guid)
 	spa = NULL;
 	ret = vdev_probe(vdev_read, vdev_write, (void *)(uintptr_t)fd, &spa);
 	if (ret == 0 && pool_guid != NULL)
-		*pool_guid = spa->spa_guid;
+		if (*pool_guid == 0)
+			*pool_guid = spa->spa_guid;
 	return (ret);
 }
 


More information about the svn-src-head mailing list