summaryrefslogtreecommitdiff
path: root/usr/src
diff options
context:
space:
mode:
authorShantkumar Hiremath <Shantkumar.Hiremath@Sun.COM>2009-07-24 02:19:21 -0700
committerShantkumar Hiremath <Shantkumar.Hiremath@Sun.COM>2009-07-24 02:19:21 -0700
commit23a9f846c20554daf41a34c0f67d0184f9bb792f (patch)
treea4fd1cc0367e2782b444a5d7e46c4296d37a97f2 /usr/src
parent6a43bfaaaaba55a521943dd30cfc899a84d8b3b2 (diff)
downloadillumos-gate-23a9f846c20554daf41a34c0f67d0184f9bb792f.tar.gz
6691608 seeing some memory leaks at ibcm_arp_create_prwqn
6849686 NFS client panic at: ibcm:ibcm_arp_timeout
Diffstat (limited to 'usr/src')
-rw-r--r--usr/src/uts/common/io/ib/mgt/ibcm/ibcm_arp.c17
-rw-r--r--usr/src/uts/common/io/ib/mgt/ibcm/ibcm_arp_link.c8
2 files changed, 12 insertions, 13 deletions
diff --git a/usr/src/uts/common/io/ib/mgt/ibcm/ibcm_arp.c b/usr/src/uts/common/io/ib/mgt/ibcm/ibcm_arp.c
index 79cf4288f9..944e61a067 100644
--- a/usr/src/uts/common/io/ib/mgt/ibcm/ibcm_arp.c
+++ b/usr/src/uts/common/io/ib/mgt/ibcm/ibcm_arp.c
@@ -358,6 +358,7 @@ ibcm_arp_get_ibaddr(ibt_ip_addr_t srcaddr, ibt_ip_addr_t destaddr,
ib_gid_t *sgid, ib_gid_t *dgid)
{
ibcm_arp_streams_t *ib_s;
+ ibcm_arp_prwqn_t *wqnp;
int ret = 0;
IBTF_DPRINTF_L4(cmlog, "ibcm_arp_get_ibaddr(%p, %p, %p, %p)",
@@ -394,9 +395,8 @@ ibcm_arp_get_ibaddr(ibt_ip_addr_t srcaddr, ibt_ip_addr_t destaddr,
(void) ibcm_arp_unlink_drivers(ib_s);
mutex_enter(&ib_s->lock);
- ret = ib_s->status;
- if (ret == 0) {
- ibcm_arp_prwqn_t *wqnp = ib_s->wqnp;
+ wqnp = ib_s->wqnp;
+ if (ib_s->status == 0) {
if (sgid)
*sgid = ib_s->wqnp->sgid;
if (dgid)
@@ -407,10 +407,17 @@ ibcm_arp_get_ibaddr(ibt_ip_addr_t srcaddr, ibt_ip_addr_t destaddr,
ib_s->wqnp->sgid.gid_prefix, ib_s->wqnp->sgid.gid_guid,
ib_s->wqnp->dgid.gid_prefix, ib_s->wqnp->dgid.gid_guid);
- mutex_exit(&ib_s->lock);
ibcm_arp_prwqn_delete(wqnp);
- mutex_enter(&ib_s->lock);
+ } else if (ret == 0) {
+ /*
+ * We come here only when lookup has returned empty (failed)
+ * via callback routine - ibcm_arp_get_ibaddr_cb
+ * i.e. ib_s->status is non-zero, while ret is zero.
+ */
+ if (wqnp)
+ kmem_free(wqnp, sizeof (ibcm_arp_prwqn_t));
}
+ ret = ib_s->status;
mutex_exit(&ib_s->lock);
arp_ibaddr_error:
diff --git a/usr/src/uts/common/io/ib/mgt/ibcm/ibcm_arp_link.c b/usr/src/uts/common/io/ib/mgt/ibcm/ibcm_arp_link.c
index 130676779b..79d420d467 100644
--- a/usr/src/uts/common/io/ib/mgt/ibcm/ibcm_arp_link.c
+++ b/usr/src/uts/common/io/ib/mgt/ibcm/ibcm_arp_link.c
@@ -787,9 +787,6 @@ ibcm_ipv6_lookup(ibcm_arp_prwqn_t *wqnp, ill_t *ill, zoneid_t zoneid)
ip2m.ip2mac_ifindex = ill->ill_phyint->phyint_ifindex;
wqnp->flags |= IBCM_ARP_PR_RESOLVE_PENDING;
- wqnp->timeout_id = timeout(ibcm_arp_timeout, wqnp,
- drv_usectohz(IBCM_ARP_TIMEOUT * 1000));
-
/*
* XXX XTBD set the scopeid?
* issue the request to IP for Neighbor Discovery
@@ -837,11 +834,6 @@ ibcm_ipv6_resolver_ack(ip2mac_t *ip2macp, void *arg)
ib_s = (ibcm_arp_streams_t *)wqnp->arg;
mutex_enter(&ib_s->lock);
- /*
- * cancel the timeout for this request
- */
- (void) untimeout(wqnp->timeout_id);
-
if (ip2macp->ip2mac_err != 0) {
wqnp->flags &= ~IBCM_ARP_PR_RESOLVE_PENDING;
cv_broadcast(&ib_s->cv);