diff options
author | tn143363 <none@none> | 2006-06-01 13:34:15 -0700 |
---|---|---|
committer | tn143363 <none@none> | 2006-06-01 13:34:15 -0700 |
commit | b2178a54bfad47b786da1c125ad5c89bbffb0a03 (patch) | |
tree | de0a082384d03ed1853a95f523aee02569bd3883 /usr/src | |
parent | 05ef0b03d42f98bf57e813bdbeba2c8a2fa467fa (diff) | |
download | illumos-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.c | 24 | ||||
-rw-r--r-- | usr/src/cmd/lvm/rpc.metad/metad_svc_subr.c | 9 | ||||
-rw-r--r-- | usr/src/lib/lvm/libmeta/common/meta_hotspares.c | 7 | ||||
-rw-r--r-- | usr/src/lib/lvm/libmeta/common/meta_init.c | 5 | ||||
-rw-r--r-- | usr/src/lib/lvm/libmeta/common/meta_raid.c | 10 | ||||
-rw-r--r-- | usr/src/lib/lvm/libmeta/common/meta_stripe.c | 10 |
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, ¶ms, 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: |