diff options
author | Shantkumar Hiremath <Shantkumar.Hiremath@Sun.COM> | 2009-07-24 02:19:21 -0700 |
---|---|---|
committer | Shantkumar Hiremath <Shantkumar.Hiremath@Sun.COM> | 2009-07-24 02:19:21 -0700 |
commit | 23a9f846c20554daf41a34c0f67d0184f9bb792f (patch) | |
tree | a4fd1cc0367e2782b444a5d7e46c4296d37a97f2 /usr/src | |
parent | 6a43bfaaaaba55a521943dd30cfc899a84d8b3b2 (diff) | |
download | illumos-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.c | 17 | ||||
-rw-r--r-- | usr/src/uts/common/io/ib/mgt/ibcm/ibcm_arp_link.c | 8 |
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); |