svn commit: r237768 - stable/8/sys/boot/common
Andriy Gapon
avg at FreeBSD.org
Fri Jun 29 10:22:36 UTC 2012
Author: avg
Date: Fri Jun 29 10:22:35 2012
New Revision: 237768
URL: http://svn.freebsd.org/changeset/base/237768
Log:
MFC r235330: zfs boot: try to set vfs.root.mountfrom from currdev as a
fallback
Modified:
stable/8/sys/boot/common/boot.c
Directory Properties:
stable/8/sys/ (props changed)
stable/8/sys/amd64/include/xen/ (props changed)
stable/8/sys/boot/ (props changed)
stable/8/sys/cddl/contrib/opensolaris/ (props changed)
stable/8/sys/contrib/dev/acpica/ (props changed)
stable/8/sys/contrib/pf/ (props changed)
stable/8/sys/dev/e1000/ (props changed)
Modified: stable/8/sys/boot/common/boot.c
==============================================================================
--- stable/8/sys/boot/common/boot.c Fri Jun 29 10:22:20 2012 (r237767)
+++ stable/8/sys/boot/common/boot.c Fri Jun 29 10:22:35 2012 (r237768)
@@ -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