Print this page
usr/src/cmd/dlmgmtd/dlmgmt_door.c
*** 353,363 ****
free(linkp);
}
/*
* Set the DLMGMT_ACTIVE flag on the link to note that it is active.
! * When a link is active and is owned by an NGZ then it is added to
* that zone's datalink list.
*/
int
link_activate(dlmgmt_link_t *linkp)
{
--- 353,363 ----
free(linkp);
}
/*
* Set the DLMGMT_ACTIVE flag on the link to note that it is active.
! * When a link is active and owned by an NGZ then it is added to
* that zone's datalink list.
*/
int
link_activate(dlmgmt_link_t *linkp)
{
*** 382,391 ****
--- 382,392 ----
* under.
*/
if (zoneid != linkp->ll_zoneid) {
assert(linkp->ll_zoneid == 0);
assert(linkp->ll_onloan == B_FALSE);
+ assert(linkp->ll_transient == 0);
/*
* If dlmgmtd already has a link with this
* name under the NGZ then we have a problem.
*/
*** 420,434 ****
* and is needed here in the event of a
* dlmgmtd restart.
*/
if (linkp->ll_class == DATALINK_CLASS_VNIC &&
!(linkp->ll_flags & DLMGMT_PERSIST))
! linkp->ll_trans = B_TRUE;
}
} else if (linkp->ll_zoneid != GLOBAL_ZONEID) {
/*
! * In this case the link was not found under any NGZs
* but according to its ll_zoneid member it is owned
* by an NGZ. Add the datalink to the appropriate zone
* datalink list.
*/
err = zone_add_datalink(linkp->ll_zoneid, linkp->ll_linkid);
--- 421,435 ----
* and is needed here in the event of a
* dlmgmtd restart.
*/
if (linkp->ll_class == DATALINK_CLASS_VNIC &&
!(linkp->ll_flags & DLMGMT_PERSIST))
! linkp->ll_transient = B_TRUE;
}
} else if (linkp->ll_zoneid != GLOBAL_ZONEID) {
/*
! * In this case the link was not found under any NGZ
* but according to its ll_zoneid member it is owned
* by an NGZ. Add the datalink to the appropriate zone
* datalink list.
*/
err = zone_add_datalink(linkp->ll_zoneid, linkp->ll_linkid);
*** 488,499 ****
return (EINVAL);
if (dlmgmt_nextlinkid == DATALINK_INVALID_LINKID)
return (ENOSPC);
if (flags & ~(DLMGMT_ACTIVE | DLMGMT_PERSIST | DLMGMT_TRANSIENT) ||
((flags & DLMGMT_PERSIST) && (flags & DLMGMT_TRANSIENT)) ||
! flags == 0)
return (EINVAL);
if ((linkp = calloc(1, sizeof (dlmgmt_link_t))) == NULL) {
err = ENOMEM;
goto done;
}
--- 489,501 ----
return (EINVAL);
if (dlmgmt_nextlinkid == DATALINK_INVALID_LINKID)
return (ENOSPC);
if (flags & ~(DLMGMT_ACTIVE | DLMGMT_PERSIST | DLMGMT_TRANSIENT) ||
((flags & DLMGMT_PERSIST) && (flags & DLMGMT_TRANSIENT)) ||
! flags == 0) {
return (EINVAL);
+ }
if ((linkp = calloc(1, sizeof (dlmgmt_link_t))) == NULL) {
err = ENOMEM;
goto done;
}
*** 509,519 ****
* While DLMGMT_TRANSIENT starts off as a flag it is converted
* into a link field since it is really a substate of
* DLMGMT_ACTIVE -- it should not survive as a flag beyond
* this point.
*/
! linkp->ll_trans = (flags & DLMGMT_TRANSIENT) ? B_TRUE : B_FALSE;
flags &= ~DLMGMT_TRANSIENT;
if (avl_find(&dlmgmt_name_avl, linkp, &name_where) != NULL ||
avl_find(&dlmgmt_id_avl, linkp, &id_where) != NULL) {
err = EEXIST;
--- 511,521 ----
* While DLMGMT_TRANSIENT starts off as a flag it is converted
* into a link field since it is really a substate of
* DLMGMT_ACTIVE -- it should not survive as a flag beyond
* this point.
*/
! linkp->ll_transient = (flags & DLMGMT_TRANSIENT) ? B_TRUE : B_FALSE;
flags &= ~DLMGMT_TRANSIENT;
if (avl_find(&dlmgmt_name_avl, linkp, &name_where) != NULL ||
avl_find(&dlmgmt_id_avl, linkp, &id_where) != NULL) {
err = EEXIST;