Diff below changes setroot() such that if bootduid is initialized (by
MD code) it tries to find a disk with a matching DUID.  If it finds
such a disk, it will use that disk as the root device.

Perhaps it should only do this if bootdv == NULL?

Thoughts?  ok?


Index: subr_disk.c
===================================================================
RCS file: /cvs/src/sys/kern/subr_disk.c,v
retrieving revision 1.223
diff -u -p -r1.223 subr_disk.c
--- subr_disk.c 8 Feb 2016 22:12:51 -0000       1.223
+++ subr_disk.c 19 May 2016 11:50:47 -0000
@@ -1455,6 +1455,13 @@ setroot(struct device *bootdv, int part,
                                break;
                if (dk && (dk->dk_flags & DKF_LABELVALID))
                        bcopy(dk->dk_label->d_uid, bootduid, sizeof(bootduid));
+       } else {
+               TAILQ_FOREACH(dk, &disklist, dk_link)
+                       if (memcmp(dk->dk_label->d_uid, bootduid,
+                           sizeof(bootduid)) == 0)
+                               break;
+               if (dk && (dk->dk_flags & DKF_LABELVALID))
+                       bootdv = dk->dk_device;
        }
        bcopy(bootduid, rootduid, sizeof(rootduid));
 

Reply via email to