svn commit: r199227 - head/sys/kern
Attilio Rao
attilio at FreeBSD.org
Thu Nov 12 15:59:05 UTC 2009
Author: attilio
Date: Thu Nov 12 15:59:05 2009
New Revision: 199227
URL: http://svn.freebsd.org/changeset/base/199227
Log:
Add the possibility for vfs.root.mountfrom tunable to accept a list of
items rather than a single one. The list is a space separated collection
of items defined as the current one accepted.
While there fix also a nit in a comment.
Obtained from: Sandvine Incorporated
Reviewed by: emaste
Tested by: Giovanni Trematerra
<giovanni dot trematerra at gmail dot com>
Sponsored by: Sandvine Incorporated
MFC: 2 weeks
Modified:
head/sys/kern/vfs_mount.c
Modified: head/sys/kern/vfs_mount.c
==============================================================================
--- head/sys/kern/vfs_mount.c Thu Nov 12 15:19:09 2009 (r199226)
+++ head/sys/kern/vfs_mount.c Thu Nov 12 15:59:05 2009 (r199227)
@@ -104,13 +104,17 @@ struct vnode *rootvnode;
* The root filesystem is detailed in the kernel environment variable
* vfs.root.mountfrom, which is expected to be in the general format
*
- * <vfsname>:[<path>]
+ * <vfsname>:[<path>][ <vfsname>:[<path>] ...]
* vfsname := the name of a VFS known to the kernel and capable
* of being mounted as root
* path := disk device name or other data used by the filesystem
* to locate its physical store
*
- * The environment variable vfs.root.mountfrom options is a comma delimited
+ * If the environment variable vfs.root.mountfrom is a space separated list,
+ * each list element is tried in turn and the root filesystem will be mounted
+ * from the first one that suceeds.
+ *
+ * The environment variable vfs.root.mountfrom.options is a comma delimited
* set of string mount options. These mount options must be parseable
* by nmount() in the kernel.
*/
@@ -1643,7 +1647,7 @@ vfs_opterror(struct vfsoptlist *opts, co
void
vfs_mountroot(void)
{
- char *cp, *options;
+ char *cp, *cpt, *options, *tmpdev;
int error, i, asked = 0;
options = NULL;
@@ -1695,10 +1699,15 @@ vfs_mountroot(void)
*/
cp = getenv("vfs.root.mountfrom");
if (cp != NULL) {
- error = vfs_mountroot_try(cp, options);
+ cpt = cp;
+ while ((tmpdev = strsep(&cpt, " \t")) != NULL) {
+ error = vfs_mountroot_try(tmpdev, options);
+ if (error == 0) {
+ freeenv(cp);
+ goto mounted;
+ }
+ }
freeenv(cp);
- if (!error)
- goto mounted;
}
/*
More information about the svn-src-all
mailing list