Print this page
OS-3342+co
OS-249
        
*** 19,28 ****
--- 19,29 ----
   * CDDL HEADER END
   */
  
  /*
   * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
+  * Copyright (c) 2011, Joyent Inc. All rights reserved.
   */
  
  /*
   * Utility functions used by the dlmgmtd daemon.
   */
*** 43,59 ****
  #include "dlmgmt_impl.h"
  
  /*
   * There are three datalink AVL tables.  The dlmgmt_name_avl tree contains all
   * datalinks and is keyed by zoneid and link name.  The dlmgmt_id_avl also
!  * contains all datalinks, and it is keyed by link ID.  The dlmgmt_loan_avl is
!  * keyed by link name, and contains the set of global-zone links that are
!  * currently on loan to non-global zones.
   */
  avl_tree_t      dlmgmt_name_avl;
  avl_tree_t      dlmgmt_id_avl;
- avl_tree_t      dlmgmt_loan_avl;
  
  avl_tree_t      dlmgmt_dlconf_avl;
  
  static pthread_rwlock_t dlmgmt_avl_lock = PTHREAD_RWLOCK_INITIALIZER;
  static pthread_mutex_t  dlmgmt_avl_mutex = PTHREAD_MUTEX_INITIALIZER;
--- 44,57 ----
  #include "dlmgmt_impl.h"
  
  /*
   * There are three datalink AVL tables.  The dlmgmt_name_avl tree contains all
   * datalinks and is keyed by zoneid and link name.  The dlmgmt_id_avl also
!  * contains all datalinks, and it is keyed by link ID.
   */
  avl_tree_t      dlmgmt_name_avl;
  avl_tree_t      dlmgmt_id_avl;
  
  avl_tree_t      dlmgmt_dlconf_avl;
  
  static pthread_rwlock_t dlmgmt_avl_lock = PTHREAD_RWLOCK_INITIALIZER;
  static pthread_mutex_t  dlmgmt_avl_mutex = PTHREAD_MUTEX_INITIALIZER;
*** 160,171 ****
  
          avl_create(&dlmgmt_name_avl, cmp_link_by_zname, sizeof (dlmgmt_link_t),
              offsetof(dlmgmt_link_t, ll_name_node));
          avl_create(&dlmgmt_id_avl, cmp_link_by_id, sizeof (dlmgmt_link_t),
              offsetof(dlmgmt_link_t, ll_id_node));
-         avl_create(&dlmgmt_loan_avl, cmp_link_by_name, sizeof (dlmgmt_link_t),
-             offsetof(dlmgmt_link_t, ll_loan_node));
          avl_create(&dlmgmt_dlconf_avl, cmp_dlconf_by_id,
              sizeof (dlmgmt_dlconf_t), offsetof(dlmgmt_dlconf_t, ld_node));
          dlmgmt_nextlinkid = 1;
  }
  
--- 158,167 ----
*** 179,189 ****
                  free(lpp);
          }
  
          avl_destroy(&dlmgmt_dlconf_avl);
          avl_destroy(&dlmgmt_name_avl);
-         avl_destroy(&dlmgmt_loan_avl);
          avl_destroy(&dlmgmt_id_avl);
  }
  
  static void
  linkattr_add(dlmgmt_linkattr_t **headp, dlmgmt_linkattr_t *attrp)
--- 175,184 ----
*** 383,393 ****
                          if (avl_find(&dlmgmt_name_avl, linkp, NULL) != NULL)
                                  avl_remove(&dlmgmt_name_avl, linkp);
  
                          linkp->ll_zoneid = zoneid;
                          avl_add(&dlmgmt_name_avl, linkp);
-                         avl_add(&dlmgmt_loan_avl, linkp);
                          linkp->ll_onloan = B_TRUE;
                  }
          } else if (linkp->ll_zoneid != GLOBAL_ZONEID) {
                  err = zone_add_datalink(linkp->ll_zoneid, linkp->ll_linkid);
          }
--- 378,387 ----
*** 428,441 ****
          dlmgmt_link_t   link, *linkp;
  
          (void) strlcpy(link.ll_link, name, MAXLINKNAMELEN);
          link.ll_zoneid = zoneid;
          linkp = avl_find(&dlmgmt_name_avl, &link, NULL);
-         if (linkp == NULL && zoneid == GLOBAL_ZONEID) {
-                 /* The link could be on loan to a non-global zone? */
-                 linkp = avl_find(&dlmgmt_loan_avl, &link, NULL);
-         }
          return (linkp);
  }
  
  int
  dlmgmt_create_common(const char *name, datalink_class_t class, uint32_t media,
--- 422,431 ----
*** 459,468 ****
--- 449,459 ----
          linkp->ll_class = class;
          linkp->ll_media = media;
          linkp->ll_linkid = dlmgmt_nextlinkid;
          linkp->ll_zoneid = zoneid;
          linkp->ll_gen = 0;
+         linkp->ll_tomb = B_FALSE;
  
          if (avl_find(&dlmgmt_name_avl, linkp, &name_where) != NULL ||
              avl_find(&dlmgmt_id_avl, linkp, &id_where) != NULL) {
                  err = EEXIST;
                  goto done;
*** 509,520 ****
                  linkp->ll_head = NULL;
          }
  
          if ((flags & DLMGMT_ACTIVE) && linkp->ll_zoneid != GLOBAL_ZONEID) {
                  (void) zone_remove_datalink(linkp->ll_zoneid, linkp->ll_linkid);
-                 if (linkp->ll_onloan)
-                         avl_remove(&dlmgmt_loan_avl, linkp);
          }
  
          if (linkp->ll_flags == 0) {
                  avl_remove(&dlmgmt_id_avl, linkp);
                  avl_remove(&dlmgmt_name_avl, linkp);
--- 500,509 ----