# HG changeset patch # User Erik Nordmark # Date 1274728985 25200 # Node ID 3bda5bd65aa65a8880d13f371e3d2e8b73a9a9b4 # Parent a267bf553e0eae5d60900cc50b1bedb33310ab29 6953698 panic with "rw_enter: bad rwlock" in ire_dep_incr_generation w/excl-ip S10c zones diff -r a267bf553e0e -r 3bda5bd65aa6 usr/src/uts/common/inet/ip/ip.c --- a/usr/src/uts/common/inet/ip/ip.c Mon May 24 13:00:02 2010 -0600 +++ b/usr/src/uts/common/inet/ip/ip.c Mon May 24 12:23:05 2010 -0700 @@ -4356,11 +4356,7 @@ arp_hook_destroy(ipst); ip_net_destroy(ipst); - mutex_destroy(&ipst->ips_capab_taskq_lock); - cv_destroy(&ipst->ips_capab_taskq_cv); - ipmp_destroy(ipst); - rw_destroy(&ipst->ips_srcid_lock); ip_kstat_fini(stackid, ipst->ips_ip_mibkp); ipst->ips_ip_mibkp = NULL; @@ -4380,9 +4376,6 @@ dce_stack_destroy(ipst); ip_mrouter_stack_destroy(ipst); - mutex_destroy(&ipst->ips_ip_mi_lock); - rw_destroy(&ipst->ips_ill_g_usesrc_lock); - ret = untimeout(ipst->ips_igmp_timeout_id); if (ret == -1) { ASSERT(ipst->ips_igmp_timeout_id == 0); @@ -4412,13 +4405,6 @@ ipst->ips_mld_slowtimeout_id = 0; } - mutex_destroy(&ipst->ips_igmp_timer_lock); - mutex_destroy(&ipst->ips_mld_timer_lock); - mutex_destroy(&ipst->ips_igmp_slowtimeout_lock); - mutex_destroy(&ipst->ips_mld_slowtimeout_lock); - mutex_destroy(&ipst->ips_ip_addr_avail_lock); - rw_destroy(&ipst->ips_ill_g_lock); - ip_ire_fini(ipst); ip6_asp_free(ipst); conn_drain_fini(ipst); @@ -4436,6 +4422,21 @@ ipst->ips_loopback_ksp = NULL; } + mutex_destroy(&ipst->ips_capab_taskq_lock); + cv_destroy(&ipst->ips_capab_taskq_cv); + + rw_destroy(&ipst->ips_srcid_lock); + + mutex_destroy(&ipst->ips_ip_mi_lock); + rw_destroy(&ipst->ips_ill_g_usesrc_lock); + + mutex_destroy(&ipst->ips_igmp_timer_lock); + mutex_destroy(&ipst->ips_mld_timer_lock); + mutex_destroy(&ipst->ips_igmp_slowtimeout_lock); + mutex_destroy(&ipst->ips_mld_slowtimeout_lock); + mutex_destroy(&ipst->ips_ip_addr_avail_lock); + rw_destroy(&ipst->ips_ill_g_lock); + kmem_free(ipst->ips_phyint_g_list, sizeof (phyint_list_t)); ipst->ips_phyint_g_list = NULL; kmem_free(ipst->ips_ill_g_heads, sizeof (ill_g_head_t) * MAX_G_HEADS); diff -r a267bf553e0e -r 3bda5bd65aa6 usr/src/uts/common/inet/ip/ip_ire.c --- a/usr/src/uts/common/inet/ip/ip_ire.c Mon May 24 13:00:02 2010 -0600 +++ b/usr/src/uts/common/inet/ip/ip_ire.c Mon May 24 12:23:05 2010 -0700 @@ -2356,9 +2356,6 @@ { int i; - rw_destroy(&ipst->ips_ire_dep_lock); - rw_destroy(&ipst->ips_ip6_ire_head_lock); - ire_make_condemned(ipst->ips_ire_reject_v6); ire_refrele_notr(ipst->ips_ire_reject_v6); ipst->ips_ire_reject_v6 = NULL; @@ -2384,6 +2381,9 @@ rn_freehead(ipst->ips_ip_ftable); ipst->ips_ip_ftable = NULL; + rw_destroy(&ipst->ips_ire_dep_lock); + rw_destroy(&ipst->ips_ip6_ire_head_lock); + mutex_destroy(&ipst->ips_ire_ft_init_lock); for (i = 0; i < IP6_MASK_TABLE_SIZE; i++) {