6953698 panic with "rw_enter: bad rwlock" in ire_dep_incr_generation w/excl-ip S10c zones
--- 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);
--- 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++) {