Print this page
OS-3342+co
OS-375 i_dls_mgmt_upcall()/dlmgmt_zfop() deadlock in dlmgmtd
OS-375-1
        
*** 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.
   */
  
  /*
   * Functions to maintain a table of datalink configuration information.
   */
*** 65,74 ****
--- 66,76 ----
          avl_node_t              ll_name_node;
          avl_node_t              ll_id_node;
          avl_node_t              ll_loan_node;
          uint32_t                ll_flags;
          uint32_t                ll_gen;         /* generation number */
+         boolean_t               ll_tomb;        /* tombstombed */
  } dlmgmt_link_t;
  
  /*
   * datalink configuration request structure
   */
*** 82,91 ****
--- 84,95 ----
          zoneid_t                ld_zoneid;
          uint32_t                ld_gen;
          avl_node_t              ld_node;
  } dlmgmt_dlconf_t;
  
+ #define ZONE_LOCK       "/etc/dladm/zone.lck"
+ 
  extern boolean_t        debug;
  extern const char       *progname;
  extern char             cachefile[];
  extern dladm_handle_t   dld_handle;
  extern datalink_id_t    dlmgmt_nextlinkid;
*** 136,146 ****
  int             dlmgmt_drop_privileges();
  void            dlmgmt_handler(void *, char *, size_t, door_desc_t *, uint_t);
  void            dlmgmt_log(int, const char *, ...);
  int             dlmgmt_write_db_entry(const char *, dlmgmt_link_t *, uint32_t);
  int             dlmgmt_delete_db_entry(dlmgmt_link_t *, uint32_t);
! int             dlmgmt_db_init(zoneid_t);
  void            dlmgmt_db_fini(zoneid_t);
  
  #ifdef  __cplusplus
  }
  #endif
--- 140,150 ----
  int             dlmgmt_drop_privileges();
  void            dlmgmt_handler(void *, char *, size_t, door_desc_t *, uint_t);
  void            dlmgmt_log(int, const char *, ...);
  int             dlmgmt_write_db_entry(const char *, dlmgmt_link_t *, uint32_t);
  int             dlmgmt_delete_db_entry(dlmgmt_link_t *, uint32_t);
! int             dlmgmt_db_init(zoneid_t, char *);
  void            dlmgmt_db_fini(zoneid_t);
  
  #ifdef  __cplusplus
  }
  #endif