+ cfs_spin_unlock_irqrestore(&peer->peer_lock, flags);
+
+ if (error == 0)
+ return;
+
+ cfs_read_lock(&kptllnd_data.kptl_net_rw_lock);
+ cfs_list_for_each_entry (net, &kptllnd_data.kptl_nets, net_list)
+ nnets++;
+ cfs_read_unlock(&kptllnd_data.kptl_net_rw_lock);
+
+ if (nnets == 0) /* shutdown in progress */
+ return;
+
+ LIBCFS_ALLOC(nets, nnets * sizeof(*nets));
+ if (nets == NULL) {
+ CERROR("Failed to allocate nets[%d]\n", nnets);
+ return;
+ }
+ memset(nets, 0, nnets * sizeof(*nets));
+
+ cfs_read_lock(&kptllnd_data.kptl_net_rw_lock);
+ i = 0;
+ cfs_list_for_each_entry (net, &kptllnd_data.kptl_nets, net_list) {
+ LASSERT (i < nnets);
+ nets[i] = net;
+ kptllnd_net_addref(net);
+ i++;
+ }
+ cfs_read_unlock(&kptllnd_data.kptl_net_rw_lock);
+
+ for (i = 0; i < nnets; i++) {
+ lnet_nid_t peer_nid;
+
+ net = nets[i];
+ if (net == NULL)
+ break;
+
+ if (!net->net_shutdown) {
+ peer_nid = kptllnd_ptl2lnetnid(net->net_ni->ni_nid,
+ peer->peer_ptlid.nid);
+ lnet_notify(net->net_ni, peer_nid, 0, last_alive);
+ }
+
+ kptllnd_net_decref(net);
+ }
+
+ LIBCFS_FREE(nets, nnets * sizeof(*nets));