Mercurial > illumos > illumos-gate
changeset 12630:e9b26c370c79
6822012 race between stat(2) and /dev creation when running metaimport or metaset -t on a set.
6932906 cstyle errors in usr/src/lib/lvm/libmeta/common/meta_set_tkr.c
author | Ray Hassan <Ray.Hassan@oracle.COM> |
---|---|
date | Wed, 16 Jun 2010 10:53:17 +0100 |
parents | 8a89ca2bbe3a |
children | 7312bbaa193c |
files | usr/src/lib/lvm/libmeta/common/meta_set_tkr.c |
diffstat | 1 files changed, 24 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- a/usr/src/lib/lvm/libmeta/common/meta_set_tkr.c Wed Jun 16 10:25:09 2010 +0100 +++ b/usr/src/lib/lvm/libmeta/common/meta_set_tkr.c Wed Jun 16 10:53:17 2010 +0100 @@ -19,11 +19,9 @@ * CDDL HEADER END */ /* - * Copyright 2006 Sun Microsystems, Inc. All rights reserved. - * Use is subject to license terms. + * Copyright (c) 1995, 2010, Oracle and/or its affiliates. All rights reserved. */ -#pragma ident "%Z%%M% %I% %E% SMI" /* * Metadevice diskset interfaces @@ -520,6 +518,7 @@ mddrivenamelist_t *dnlp = NULL; int retake_flag = 0; unsigned long node_active[BT_BITOUL(MD_MAXSIDES)]; + mdnamelist_t *nlp = NULL; bzero(node_active, sizeof (unsigned long) * BT_BITOUL(MD_MAXSIDES)); @@ -593,10 +592,10 @@ side = getnodeside(mynode(), sd); if (side == MD_SIDEWILD) { - (void) mddserror(ep, MDE_DS_HOSTNOSIDE, sp->setno, mynode(), - NULL, mynode()); - rval = -1; - goto out; + (void) mddserror(ep, MDE_DS_HOSTNOSIDE, sp->setno, mynode(), + NULL, mynode()); + rval = -1; + goto out; } /* @@ -697,10 +696,10 @@ if (sd->sd_flags & MD_SR_MB_DEVID) dd = metaget_drivedesc(sp, - MD_BASICNAME_OK | PRINT_FAST, ep); + MD_BASICNAME_OK | PRINT_FAST, ep); else dd = metaget_drivedesc(sp, - MD_BASICNAME_OK, ep); + MD_BASICNAME_OK, ep); /* If ep has error, then there was a failure, set rval */ if (!mdisok(ep)) { rval = -1; @@ -775,7 +774,7 @@ * namespace and the local set namespace. */ d->dd_flags |= (MD_DR_FIX_MB_DID | - MD_DR_FIX_LB_NM_DID); + MD_DR_FIX_LB_NM_DID); retake_flag = 1; } } @@ -842,7 +841,7 @@ */ newname = NULL; ret = meta_make_sidenmlist(sp, - d->dd_dnp, 0, NULL, ep); + d->dd_dnp, 0, NULL, ep); d->dd_dnp->side_names_key = side_names_key; if (ret == -1) { rval = -1; @@ -971,6 +970,20 @@ } + /* + * meta_getalldevs() will ultimately force devfsadmd to create + * the /dev links for all the configured metadevices if they + * do not already exist. This ensures that once the set is + * owned all the metadevices are accessible as opposed to waiting + * for devfsadmd to create them. + */ + if (meta_getalldevs(sp, &nlp, FALSE, ep) != 0) { + metafreenamelist(nlp); + goto rollback; + } + + metafreenamelist(nlp); + pathname_return = pathname_reload(&sp, sp->setno, ep); if ((pathname_return == METADEVADM_ERR) || (pathname_return == METADEVADM_DSKNAME_ERR)) {