Details
-
Bug
-
Resolution: Fixed
-
Minor
-
None
-
None
-
3
-
9223372036854775807
Description
There are some additional places where ping buffer reference will leak in lnet_peer_data_present(). These are error paths so they should be rare.
static int lnet_peer_data_present(struct lnet_peer *lp) __must_hold(&lp->lp_lock) { ... if (list_empty(&lp->lp_peer_list)) goto out; <<< Ref leak ... if (nid_is_lo0(&lp->lp_primary_nid)) { rc = lnet_peer_set_primary_nid(lp, nid, flags); if (!rc) <<< ref leak if rc is non-zero rc = lnet_peer_merge_data(lp, pbuf); ... if (!lpni || lp == lpni->lpni_peer_net->lpn_peer) { rc = lnet_peer_set_primary_nid(lp, nid, flags); if (rc) { CERROR("Primary NID error %s versus %s: %d\n", libcfs_nidstr(&lp->lp_primary_nid), libcfs_nid2str(nid), rc); <<< ref leak } else { rc = lnet_peer_merge_data(lp, pbuf); } ...