summaryrefslogtreecommitdiff
path: root/usr/src
diff options
context:
space:
mode:
authortn143363 <none@none>2006-06-01 13:34:15 -0700
committertn143363 <none@none>2006-06-01 13:34:15 -0700
commitb2178a54bfad47b786da1c125ad5c89bbffb0a03 (patch)
treede0a082384d03ed1853a95f523aee02569bd3883 /usr/src
parent05ef0b03d42f98bf57e813bdbeba2c8a2fa467fa (diff)
downloadillumos-gate-b2178a54bfad47b786da1c125ad5c89bbffb0a03.tar.gz
6388384 With friendly-name putback, metainit -n returns incorrect return value or error message
6395425 zone support of SVM metasets broken
Diffstat (limited to 'usr/src')
-rw-r--r--usr/src/cmd/devfsadm/md_link.c24
-rw-r--r--usr/src/cmd/lvm/rpc.metad/metad_svc_subr.c9
-rw-r--r--usr/src/lib/lvm/libmeta/common/meta_hotspares.c7
-rw-r--r--usr/src/lib/lvm/libmeta/common/meta_init.c5
-rw-r--r--usr/src/lib/lvm/libmeta/common/meta_raid.c10
-rw-r--r--usr/src/lib/lvm/libmeta/common/meta_stripe.c10
6 files changed, 55 insertions, 10 deletions
diff --git a/usr/src/cmd/devfsadm/md_link.c b/usr/src/cmd/devfsadm/md_link.c
index 669286126f..cd09a385c7 100644
--- a/usr/src/cmd/devfsadm/md_link.c
+++ b/usr/src/cmd/devfsadm/md_link.c
@@ -90,11 +90,14 @@ md_create(di_minor_t minor, di_node_t node)
{
char mn[MAXNAMELEN + 1];
char path[PATH_MAX + 1];
+ char set_path[PATH_MAX +1];
+ char sym_path[PATH_MAX + 1];
int set = -1, ret;
char *type, *dir;
char *device_name;
dev_t minor_devt = di_minor_devt(minor);
int key;
+ mdsetname_t *sp = NULL;
md_error_t ep;
(void) strcpy(mn, di_minor_name(minor));
@@ -147,9 +150,30 @@ md_create(di_minor_t minor, di_node_t node)
(void) snprintf(path, sizeof (path),
"md/shared/%d/%s/%s", set, dir,
basename(device_name));
+
+ /*
+ * flush the caches so the next call to
+ * metasetnosetname will get us the
+ * updated cache.
+ */
+ metaflushnames(0);
+ if ((sp = metasetnosetname(set, &ep))
+ != NULL) {
+ (void) snprintf(set_path,
+ sizeof (set_path), "md/shared/%d",
+ sp->setno);
+ (void) snprintf(sym_path,
+ sizeof (sym_path), "md/%s",
+ sp->setname);
+ }
}
(void) devfsadm_mklink(path, node, minor, 0);
Free(device_name);
+
+ if (sp != NULL) {
+ (void) devfsadm_secondary_link(sym_path,
+ set_path, 0);
+ }
}
}
diff --git a/usr/src/cmd/lvm/rpc.metad/metad_svc_subr.c b/usr/src/cmd/lvm/rpc.metad/metad_svc_subr.c
index 0d92faf3e2..2ad33ff1d4 100644
--- a/usr/src/cmd/lvm/rpc.metad/metad_svc_subr.c
+++ b/usr/src/cmd/lvm/rpc.metad/metad_svc_subr.c
@@ -1481,10 +1481,6 @@ mdrpc_createset_common(
if (! mdisok(ep))
return (TRUE);
- /* create the symlink */
- if (symlink(stringbuf1, stringbuf2) == -1)
- (void) mdsyserror(ep, errno, stringbuf2);
-
err = svc_fini(ep);
return (TRUE);
@@ -1563,11 +1559,6 @@ mdrpc_mncreateset_common(
if (! mdisok(ep)) {
return (TRUE);
}
-
- /* create the symlink */
- if (symlink(stringbuf1, stringbuf2) == -1)
- (void) mdsyserror(ep, errno, stringbuf2);
-
err = svc_fini(ep);
return (TRUE);
diff --git a/usr/src/lib/lvm/libmeta/common/meta_hotspares.c b/usr/src/lib/lvm/libmeta/common/meta_hotspares.c
index 5ba8c84866..b90b7e525c 100644
--- a/usr/src/lib/lvm/libmeta/common/meta_hotspares.c
+++ b/usr/src/lib/lvm/libmeta/common/meta_hotspares.c
@@ -1830,6 +1830,13 @@ meta_init_hsp(
}
/* see if it exists already */
+ if (is_existing_metadevice(*spp, uname)) {
+ mdname_t *np;
+ if ((np = metaname(spp, uname, META_DEVICE, ep)) != NULL)
+ if ((meta_get_unit(*spp, np, ep)) != NULL)
+ return (mderror(ep, MDE_NAME_IN_USE, uname));
+ }
+
if (meta_get_hsp(*spp, hspnp, ep) != NULL) {
(void) mdhsperror(ep, MDE_HSP_ALREADY_SETUP,
hspnp->hsp, uname);
diff --git a/usr/src/lib/lvm/libmeta/common/meta_init.c b/usr/src/lib/lvm/libmeta/common/meta_init.c
index 61035f75d6..156b972db0 100644
--- a/usr/src/lib/lvm/libmeta/common/meta_init.c
+++ b/usr/src/lib/lvm/libmeta/common/meta_init.c
@@ -241,7 +241,10 @@ meta_init_make_device(
* and return the key
*/
if ((rval = add_self_name(*spp, uname, &params, ep)) <= 0) {
- return (mderror(ep, MDE_UNIT_NOT_FOUND, NULL));
+ if (mdisok(ep))
+ (void) mderror(ep, MDE_UNIT_NOT_FOUND, NULL);
+
+ return (-1);
}
/*
diff --git a/usr/src/lib/lvm/libmeta/common/meta_raid.c b/usr/src/lib/lvm/libmeta/common/meta_raid.c
index bc61f0bd68..41013fdf00 100644
--- a/usr/src/lib/lvm/libmeta/common/meta_raid.c
+++ b/usr/src/lib/lvm/libmeta/common/meta_raid.c
@@ -2524,6 +2524,16 @@ meta_init_raid(
ep)) == NULL) {
goto out;
}
+
+ /*
+ * Get out if the specified hotspare pool really
+ * doesn't exist.
+ */
+ if (raidp->hspnamep->hsp == MD_HSP_NONE) {
+ (void) mdhsperror(ep, MDE_INVAL_HSP,
+ raidp->hspnamep->hsp, optarg);
+ goto out;
+ }
break;
case 'i':
diff --git a/usr/src/lib/lvm/libmeta/common/meta_stripe.c b/usr/src/lib/lvm/libmeta/common/meta_stripe.c
index ec7f20a0d2..cff45a3b52 100644
--- a/usr/src/lib/lvm/libmeta/common/meta_stripe.c
+++ b/usr/src/lib/lvm/libmeta/common/meta_stripe.c
@@ -2300,6 +2300,16 @@ done_row_opts:
ep)) == NULL) {
goto out;
}
+
+ /*
+ * Get out if the specified hotspare pool really
+ * doesn't exist.
+ */
+ if (stripep->hspnamep->hsp == MD_HSP_NONE) {
+ (void) mdhsperror(ep, MDE_INVAL_HSP,
+ stripep->hspnamep->hsp, optarg);
+ goto out;
+ }
break;
default: