summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/inet
diff options
context:
space:
mode:
authorSowmini Varadhan <Sowmini.Varadhan@Sun.COM>2010-05-19 19:36:15 -0400
committerSowmini Varadhan <Sowmini.Varadhan@Sun.COM>2010-05-19 19:36:15 -0400
commit783776811455d550a57536b20e93a0e306010126 (patch)
tree5d72721f96f43aaf938e190ecbcb767cb381d100 /usr/src/uts/common/inet
parentd2b539e744e90927cf7a57df3475145c279d68f9 (diff)
downloadillumos-gate-783776811455d550a57536b20e93a0e306010126.tar.gz
6951991 assertion failed: IRE_IS_CONDEMNED(child), file: ../../common/inet/ip/ip_ire.c, line: 3559
Diffstat (limited to 'usr/src/uts/common/inet')
-rw-r--r--usr/src/uts/common/inet/ip/ip6_ire.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/usr/src/uts/common/inet/ip/ip6_ire.c b/usr/src/uts/common/inet/ip/ip6_ire.c
index e22b5d17d4..4828b831fd 100644
--- a/usr/src/uts/common/inet/ip/ip6_ire.c
+++ b/usr/src/uts/common/inet/ip/ip6_ire.c
@@ -19,10 +19,7 @@
* CDDL HEADER END
*/
/*
- * Copyright 2010 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
- */
-/*
+ * Copyright (c) 1991, 2010, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1990 Mentat Inc.
*/
@@ -416,11 +413,19 @@ ire_add_v6(ire_t *ire)
* after adding, we return a held ire. This will
* avoid a lookup in the caller again. If the callers
* don't want to use it, they need to do a REFRELE.
+ *
+ * We only allow exactly one IRE_IF_CLONE for any dst,
+ * so, if the is an IF_CLONE, return the ire without
+ * an identical_ref, but with an ire_ref held.
*/
+ if (ire->ire_type != IRE_IF_CLONE) {
+ atomic_add_32(&ire1->ire_identical_ref, 1);
+ DTRACE_PROBE2(ire__add__exist, ire_t *, ire1,
+ ire_t *, ire);
+ }
ip1dbg(("found dup ire existing %p new %p",
(void *)ire1, (void *)ire));
ire_refhold(ire1);
- atomic_add_32(&ire1->ire_identical_ref, 1);
ire_atomic_end(irb_ptr, ire);
ire_delete(ire);
return (ire1);