Whamcloud - gitweb
LU-10682 lnd: pending transmits dropped silently 74/31374/3
authorAmir Shehata <amir.shehata@intel.com>
Thu, 22 Feb 2018 00:21:02 +0000 (16:21 -0800)
committerOleg Drokin <oleg.drokin@intel.com>
Sat, 3 Mar 2018 04:28:48 +0000 (04:28 +0000)
list_add was being used erroneously. The logic should be to move
the txs on ibp_tx_queue on a local list which is then processed.
The code, however, did the reverse, which would result in the
pending txs not processed and thus dropped silently. This in turn
would lead to peers reference counts at the LNet layer not
decremented since lnet_finalize() might not be called for a message.

Initialize local list and use list_splice_init() to move
transmits on the ibp_tx_queue to the local list.

Signed-off-by: Amir Shehata <amir.shehata@intel.com>
Change-Id: I6b36f709db2c89e53e0b3354883a8a1b1052a1dd
Reviewed-on: https://review.whamcloud.com/31374
Tested-by: Jenkins
Reviewed-by: Doug Oucharek <dougso@me.com>
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Sonia Sharma <sonia.sharma@intel.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
lnet/klnds/o2iblnd/o2iblnd_cb.c

index f1ed1d9..3323741 100644 (file)
@@ -2219,8 +2219,8 @@ kiblnd_connreq_done(kib_conn_t *conn, int status)
         }
 
        /* grab pending txs while I have the lock */
         }
 
        /* grab pending txs while I have the lock */
-       list_add(&txs, &peer_ni->ibp_tx_queue);
-       list_del_init(&peer_ni->ibp_tx_queue);
+       INIT_LIST_HEAD(&txs);
+       list_splice_init(&peer_ni->ibp_tx_queue, &txs);
 
         if (!kiblnd_peer_active(peer_ni) ||        /* peer_ni has been deleted */
             conn->ibc_comms_error != 0) {       /* error has happened already */
 
         if (!kiblnd_peer_active(peer_ni) ||        /* peer_ni has been deleted */
             conn->ibc_comms_error != 0) {       /* error has happened already */