svn commit: r235330 - head/sys/boot/common
Andriy Gapon
avg at FreeBSD.org
Sat May 12 09:07:42 UTC 2012
Author: avg
Date: Sat May 12 09:07:41 2012
New Revision: 235330
URL: http://svn.freebsd.org/changeset/base/235330
Log:
zfs boot: try to set vfs.root.mountfrom from currdev as a fallback
This way with the new zfsloader there is no need to explicitly set zfs
root filesystem either via vfs.root.mountfrom or fstab.
It should be automatically picked up from currdev which is by default
is set from bootfs.
Tested by: Florian Wagner <florian at wagner-flo.net> (x86)
MFC after: 1 month
Modified:
head/sys/boot/common/boot.c
Modified: head/sys/boot/common/boot.c
==============================================================================
--- head/sys/boot/common/boot.c Sat May 12 09:03:30 2012 (r235329)
+++ head/sys/boot/common/boot.c Sat May 12 09:07:41 2012 (r235330)
@@ -311,12 +311,12 @@ getrootmount(char *rootdev)
if (getenv("vfs.root.mountfrom") != NULL)
return(0);
+ error = 1;
sprintf(lbuf, "%s/etc/fstab", rootdev);
if ((fd = open(lbuf, O_RDONLY)) < 0)
- return(1);
+ goto notfound;
/* loop reading lines from /etc/fstab What was that about sscanf again? */
- error = 1;
while (fgetstr(lbuf, sizeof(lbuf), fd) >= 0) {
if ((lbuf[0] == 0) || (lbuf[0] == '#'))
continue;
@@ -377,6 +377,20 @@ getrootmount(char *rootdev)
break;
}
close(fd);
+
+notfound:
+ if (error) {
+ const char *currdev;
+
+ currdev = getenv("currdev");
+ if (currdev != NULL && strncmp("zfs:", currdev, 4) == 0) {
+ cp = strdup(currdev);
+ cp[strlen(cp) - 1] = '\0';
+ setenv("vfs.root.mountfrom", cp, 0);
+ error = 0;
+ }
+ }
+
return(error);
}
More information about the svn-src-all
mailing list