summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/fs/zfs/zfs_vfsops.c
diff options
context:
space:
mode:
authortaylor <none@none>2008-07-21 15:39:58 -0700
committertaylor <none@none>2008-07-21 15:39:58 -0700
commit051aabe6136ff13e81542a427e9693ffe1503525 (patch)
treec0b2bb5ca6827d308ed9959f679e0d13174f3e55 /usr/src/uts/common/fs/zfs/zfs_vfsops.c
parent25435a6d77b7389d3ae547ac21b3010ac237277a (diff)
downloadillumos-gate-051aabe6136ff13e81542a427e9693ffe1503525.tar.gz
6704717 ZFS mirrored root doesn't live up to expectations
6710937 Boot failed information should be more friendly
Diffstat (limited to 'usr/src/uts/common/fs/zfs/zfs_vfsops.c')
-rw-r--r--usr/src/uts/common/fs/zfs/zfs_vfsops.c29
1 files changed, 16 insertions, 13 deletions
diff --git a/usr/src/uts/common/fs/zfs/zfs_vfsops.c b/usr/src/uts/common/fs/zfs/zfs_vfsops.c
index 82da3de07f..1b471c8c8a 100644
--- a/usr/src/uts/common/fs/zfs/zfs_vfsops.c
+++ b/usr/src/uts/common/fs/zfs/zfs_vfsops.c
@@ -866,6 +866,7 @@ zfs_mountroot(vfs_t *vfsp, enum whymountroot why)
znode_t *zp = NULL;
vnode_t *vp = NULL;
char *zfs_bootfs;
+ char *zfs_devid;
ASSERT(vfsp);
@@ -885,40 +886,42 @@ zfs_mountroot(vfs_t *vfsp, enum whymountroot why)
*/
clkset(-1);
- if ((zfs_bootfs = spa_get_bootfs()) == NULL) {
- cmn_err(CE_NOTE, "\nspa_get_bootfs: can not get "
- "bootfs name \n");
+ if ((zfs_bootfs = spa_get_bootprop("zfs-bootfs")) == NULL) {
+ cmn_err(CE_NOTE, "spa_get_bootfs: can not get "
+ "bootfs name");
return (EINVAL);
}
-
- if (error = spa_import_rootpool(rootfs.bo_name)) {
- spa_free_bootfs(zfs_bootfs);
- cmn_err(CE_NOTE, "\nspa_import_rootpool: error %d\n",
+ zfs_devid = spa_get_bootprop("diskdevid");
+ error = spa_import_rootpool(rootfs.bo_name, zfs_devid);
+ if (zfs_devid)
+ spa_free_bootprop(zfs_devid);
+ if (error) {
+ spa_free_bootprop(zfs_bootfs);
+ cmn_err(CE_NOTE, "spa_import_rootpool: error %d",
error);
return (error);
}
-
if (error = zfs_parse_bootfs(zfs_bootfs, rootfs.bo_name)) {
- spa_free_bootfs(zfs_bootfs);
- cmn_err(CE_NOTE, "\nzfs_parse_bootfs: error %d\n",
+ spa_free_bootprop(zfs_bootfs);
+ cmn_err(CE_NOTE, "zfs_parse_bootfs: error %d",
error);
return (error);
}
- spa_free_bootfs(zfs_bootfs);
+ spa_free_bootprop(zfs_bootfs);
if (error = vfs_lock(vfsp))
return (error);
if (error = zfs_domount(vfsp, rootfs.bo_name)) {
- cmn_err(CE_NOTE, "\nzfs_domount: error %d\n", error);
+ cmn_err(CE_NOTE, "zfs_domount: error %d", error);
goto out;
}
zfsvfs = (zfsvfs_t *)vfsp->vfs_data;
ASSERT(zfsvfs);
if (error = zfs_zget(zfsvfs, zfsvfs->z_root, &zp)) {
- cmn_err(CE_NOTE, "\nzfs_zget: error %d\n", error);
+ cmn_err(CE_NOTE, "zfs_zget: error %d", error);
goto out;
}