From e01173df653af3def9133ea6710045775375e5f9 Mon Sep 17 00:00:00 2001 From: eeb Date: Sun, 9 Jan 2005 19:59:19 +0000 Subject: [PATCH] * propagated openibnal fix (deleting an idle persistent peer) to voltaire and infinicon NALs --- lnet/klnds/iiblnd/iiblnd.c | 16 +++++++++++----- lnet/klnds/viblnd/viblnd.c | 16 +++++++++++----- 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/lnet/klnds/iiblnd/iiblnd.c b/lnet/klnds/iiblnd/iiblnd.c index e59d066..5dc5192 100644 --- a/lnet/klnds/iiblnd/iiblnd.c +++ b/lnet/klnds/iiblnd/iiblnd.c @@ -518,13 +518,19 @@ kibnal_del_peer_locked (kib_peer_t *peer, int single_share) if (peer->ibp_persistence != 0) return; - list_for_each_safe (ctmp, cnxt, &peer->ibp_conns) { - conn = list_entry(ctmp, kib_conn_t, ibc_list); + if (list_empty(&peer->ibp_conns)) { + kibnal_unlink_peer_locked(peer); + } else { + list_for_each_safe (ctmp, cnxt, &peer->ibp_conns) { + conn = list_entry(ctmp, kib_conn_t, ibc_list); - kibnal_close_conn_locked (conn, 0); + kibnal_close_conn_locked (conn, 0); + } + /* NB peer is no longer persistent; closing its last conn + * unlinked it. */ } - - /* NB peer unlinks itself when last conn is closed */ + /* NB peer now unlinked; might even be freed if the peer table had the + * last ref on it. */ } int diff --git a/lnet/klnds/viblnd/viblnd.c b/lnet/klnds/viblnd/viblnd.c index 50e1149..1e1d2f4 100644 --- a/lnet/klnds/viblnd/viblnd.c +++ b/lnet/klnds/viblnd/viblnd.c @@ -496,13 +496,19 @@ kibnal_del_peer_locked (kib_peer_t *peer, int single_share) if (peer->ibp_persistence != 0) return; - list_for_each_safe (ctmp, cnxt, &peer->ibp_conns) { - conn = list_entry(ctmp, kib_conn_t, ibc_list); + if (list_empty(&peer->ibp_conns)) { + kibnal_unlink_peer_locked(peer); + } else { + list_for_each_safe (ctmp, cnxt, &peer->ibp_conns) { + conn = list_entry(ctmp, kib_conn_t, ibc_list); - kibnal_close_conn_locked (conn, 0); + kibnal_close_conn_locked (conn, 0); + } + /* NB peer is no longer persistent; closing its last conn + * unlinked it. */ } - - /* NB peer unlinks itself when last conn is closed */ + /* NB peer now unlinked; might even be freed if the peer table had the + * last ref on it. */ } int -- 1.8.3.1