Whamcloud - gitweb
LU-9918 lnet: decref on peer after use 22/28722/3
authorAmir Shehata <amir.shehata@intel.com>
Sat, 26 Aug 2017 04:26:00 +0000 (21:26 -0700)
committerOleg Drokin <oleg.drokin@intel.com>
Sun, 10 Sep 2017 04:55:28 +0000 (04:55 +0000)
After looking up the peer for both ping and discover
we need to decref the peer so we don't lose a reference
on it. This needs to be done while the mutex_lock is held
to ensure the peer list remains stable.

Signed-off-by: Amir Shehata <amir.shehata@intel.com>
Change-Id: Ic57e67d21b8afe17a239cc496621bc4abf681077
Reviewed-on: https://review.whamcloud.com/28722
Tested-by: Jenkins
Reviewed-by: John L. Hammond <john.hammond@intel.com>
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Sonia Sharma <sonia.sharma@intel.com>
Reviewed-by: Olaf Weber <olaf.weber@hpe.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
lnet/lnet/api-ni.c

index db67866..c725e6e 100644 (file)
@@ -3325,11 +3325,15 @@ LNetCtl(unsigned int cmd, void *arg)
                if (rc < 0)
                        return rc;
 
+               mutex_lock(&the_lnet.ln_api_mutex);
                lp = lnet_find_peer(ping->ping_id.nid);
                if (lp) {
                        ping->ping_id.nid = lp->lp_primary_nid;
                        ping->mr_info = lnet_peer_is_multi_rail(lp);
+                       lnet_peer_decref_locked(lp);
                }
+               mutex_unlock(&the_lnet.ln_api_mutex);
+
                ping->ping_count = rc;
                return 0;
        }
@@ -3343,11 +3347,15 @@ LNetCtl(unsigned int cmd, void *arg)
                                   discover->ping_count);
                if (rc < 0)
                        return rc;
+
+               mutex_lock(&the_lnet.ln_api_mutex);
                lp = lnet_find_peer(discover->ping_id.nid);
                if (lp) {
                        discover->ping_id.nid = lp->lp_primary_nid;
                        discover->mr_info = lnet_peer_is_multi_rail(lp);
+                       lnet_peer_decref_locked(lp);
                }
+               mutex_unlock(&the_lnet.ln_api_mutex);
 
                discover->ping_count = rc;
                return 0;