summaryrefslogtreecommitdiff
path: root/usr/src
diff options
context:
space:
mode:
authorRamesh Kumar Katla <Ramesh.K@Sun.COM>2010-06-21 16:16:00 -0700
committerRamesh Kumar Katla <Ramesh.K@Sun.COM>2010-06-21 16:16:00 -0700
commita5628610b3cb18335f49944f353e3be7b9e669f4 (patch)
tree3e8e2927a3a02b6da4a216b37bb190745a0cd3bd /usr/src
parentf970887035084ffc66d633763104257174c8c502 (diff)
downloadillumos-gate-a5628610b3cb18335f49944f353e3be7b9e669f4.tar.gz
6960474 assertion failed: (connp)->conn_ioctlref != 0, file: ../../common/inet/ip/ip.c, line: 12588
Diffstat (limited to 'usr/src')
-rw-r--r--usr/src/uts/common/inet/ip/ip_if.c11
-rw-r--r--usr/src/uts/common/inet/ip/ip_rts.c4
-rw-r--r--usr/src/uts/common/inet/ip/ipclassifier.c1
3 files changed, 11 insertions, 5 deletions
diff --git a/usr/src/uts/common/inet/ip/ip_if.c b/usr/src/uts/common/inet/ip/ip_if.c
index c74a21173e..689c66d66a 100644
--- a/usr/src/uts/common/inet/ip/ip_if.c
+++ b/usr/src/uts/common/inet/ip/ip_if.c
@@ -8551,15 +8551,16 @@ ip_sioctl_plink(ipsq_t *ipsq, queue_t *q, mblk_t *mp, void *dummy_arg)
err = ip_sioctl_plink_ipmod(ipsq, q, mp, ioccmd, li);
if (err == EINPROGRESS)
return;
-done:
if (err == 0)
miocack(q, mp, 0, 0);
else
miocnak(q, mp, 0, err);
/* Conn was refheld in ip_sioctl_copyin_setup */
- if (CONN_Q(q))
+ if (CONN_Q(q)) {
+ CONN_DEC_IOCTLREF(Q_TO_CONN(q));
CONN_OPER_PENDING_DONE(Q_TO_CONN(q));
+ }
}
/*
@@ -9150,8 +9151,10 @@ ip_sioctl_copyin_setup(queue_t *q, mblk_t *mp)
* Request can be enqueued in the 'ipsq' while waiting
* to become exclusive. So bump up the conn ref.
*/
- if (CONN_Q(q))
+ if (CONN_Q(q)) {
CONN_INC_REF(Q_TO_CONN(q));
+ CONN_INC_IOCTLREF(Q_TO_CONN(q))
+ }
ip_sioctl_plink(NULL, q, mp, NULL);
return;
@@ -11690,6 +11693,7 @@ ip_wput_ioctl(queue_t *q, mblk_t *mp)
ASSERT(CONN_Q(q));
connp = Q_TO_CONN(q);
CONN_INC_REF(connp);
+ CONN_INC_IOCTLREF(connp);
if (ipft->ipft_pfi &&
((mp1->b_wptr - mp1->b_rptr) >= ipft->ipft_min_size ||
pullupmsg(mp1, ipft->ipft_min_size))) {
@@ -11704,6 +11708,7 @@ ip_wput_ioctl(queue_t *q, mblk_t *mp)
return;
}
+ CONN_DEC_IOCTLREF(connp);
CONN_OPER_PENDING_DONE(connp);
if (ipft->ipft_flags & IPFT_F_NO_REPLY) {
freemsg(mp);
diff --git a/usr/src/uts/common/inet/ip/ip_rts.c b/usr/src/uts/common/inet/ip/ip_rts.c
index a37ef9a754..dece7be29d 100644
--- a/usr/src/uts/common/inet/ip/ip_rts.c
+++ b/usr/src/uts/common/inet/ip/ip_rts.c
@@ -1,6 +1,5 @@
/*
- * Copyright 2010 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
+ * Copyright (c) 1994, 2010, Oracle and/or its affiliates. All rights reserved.
*/
/*
@@ -1206,6 +1205,7 @@ done:
(connp->conn_recv)(connp, ioc_mp, NULL, NULL);
/* conn was refheld in ip_wput_ioctl. */
+ CONN_DEC_IOCTLREF(connp);
CONN_OPER_PENDING_DONE(connp);
return (error);
diff --git a/usr/src/uts/common/inet/ip/ipclassifier.c b/usr/src/uts/common/inet/ip/ipclassifier.c
index 3d4cbd52ae..bc2173ff24 100644
--- a/usr/src/uts/common/inet/ip/ipclassifier.c
+++ b/usr/src/uts/common/inet/ip/ipclassifier.c
@@ -635,6 +635,7 @@ ipcl_conn_destroy(conn_t *connp)
ASSERT(!MUTEX_HELD(&connp->conn_lock));
ASSERT(connp->conn_ref == 0);
+ ASSERT(connp->conn_ioctlref == 0);
DTRACE_PROBE1(conn__destroy, conn_t *, connp);