#include "../../include/linux/lnet/lib-lnet.h"
 
+/** lnet message has credit and can be submitted to lnd for send/receive */
+#define LNET_CREDIT_OK         0
+/** lnet message is waiting for credit */
+#define LNET_CREDIT_WAIT       1
+
 static int local_nid_dist_zero = 1;
 module_param(local_nid_dist_zero, int, 0444);
 MODULE_PARM_DESC(local_nid_dist_zero, "Reserved");
  *       lnet_send() is going to lnet_net_unlock immediately after this, so
  *       it sets do_send FALSE and I don't do the unlock/send/lock bit.
  *
- * \retval 0 If \a msg sent or OK to send.
- * \retval EAGAIN If \a msg blocked for credit.
- * \retval EHOSTUNREACH If the next hop of the message appears dead.
- * \retval ECANCELED If the MD of the message has been unlinked.
+ * \retval LNET_CREDIT_OK If \a msg sent or OK to send.
+ * \retval LNET_CREDIT_WAIT If \a msg blocked for credit.
+ * \retval -EHOSTUNREACH If the next hop of the message appears dead.
+ * \retval -ECANCELED If the MD of the message has been unlinked.
  */
 static int
 lnet_post_send_locked(lnet_msg_t *msg, int do_send)
                        lnet_finalize(ni, msg, -EHOSTUNREACH);
 
                lnet_net_lock(cpt);
-               return EHOSTUNREACH;
+               return -EHOSTUNREACH;
        }
 
        if (msg->msg_md &&
                        lnet_finalize(ni, msg, -ECANCELED);
 
                lnet_net_lock(cpt);
-               return ECANCELED;
+               return -ECANCELED;
        }
 
        if (!msg->msg_peertxcredit) {
                if (lp->lp_txcredits < 0) {
                        msg->msg_tx_delayed = 1;
                        list_add_tail(&msg->msg_list, &lp->lp_txq);
-                       return EAGAIN;
+                       return LNET_CREDIT_WAIT;
                }
        }
 
                if (tq->tq_credits < 0) {
                        msg->msg_tx_delayed = 1;
                        list_add_tail(&msg->msg_list, &tq->tq_delayed);
-                       return EAGAIN;
+                       return LNET_CREDIT_WAIT;
                }
        }
 
                lnet_ni_send(ni, msg);
                lnet_net_lock(cpt);
        }
-       return 0;
+       return LNET_CREDIT_OK;
 }
 
 static lnet_rtrbufpool_t *
 {
        /*
         * lnet_parse is going to lnet_net_unlock immediately after this, so it
-        * sets do_recv FALSE and I don't do the unlock/send/lock bit.  I
-        * return EAGAIN if msg blocked and 0 if received or OK to receive
+        * sets do_recv FALSE and I don't do the unlock/send/lock bit.
+        * I return LNET_CREDIT_WAIT if msg blocked and LNET_CREDIT_OK if
+        * received or OK to receive
         */
        lnet_peer_t *lp = msg->msg_rxpeer;
        lnet_rtrbufpool_t *rbp;
                        LASSERT(msg->msg_rx_ready_delay);
                        msg->msg_rx_delayed = 1;
                        list_add_tail(&msg->msg_list, &lp->lp_rtrq);
-                       return EAGAIN;
+                       return LNET_CREDIT_WAIT;
                }
        }
 
                        LASSERT(msg->msg_rx_ready_delay);
                        msg->msg_rx_delayed = 1;
                        list_add_tail(&msg->msg_list, &rbp->rbp_msgs);
-                       return EAGAIN;
+                       return LNET_CREDIT_WAIT;
                }
        }
 
                             0, msg->msg_len, msg->msg_len);
                lnet_net_lock(cpt);
        }
-       return 0;
+       return LNET_CREDIT_OK;
 }
 
 void
        rc = lnet_post_send_locked(msg, 0);
        lnet_net_unlock(cpt);
 
-       if (rc == EHOSTUNREACH || rc == ECANCELED)
-               return -rc;
+       if (rc < 0)
+               return rc;
 
-       if (!rc)
+       if (rc == LNET_CREDIT_OK)
                lnet_ni_send(src_ni, msg);
 
-       return 0; /* !rc or EAGAIN */
+       return 0; /* rc == LNET_CREDIT_OK or LNET_CREDIT_WAIT */
 }
 
 static void
        return 0;
 }
 
+/**
+ * \retval LNET_CREDIT_OK      If \a msg is forwarded
+ * \retval LNET_CREDIT_WAIT    If \a msg is blocked because w/o buffer
+ * \retval -ve                 error code
+ */
 static int
 lnet_parse_forward_locked(lnet_ni_t *ni, lnet_msg_t *msg)
 {
 
                if (rc < 0)
                        goto free_drop;
-               if (!rc) {
+
+               if (rc == LNET_CREDIT_OK) {
                        lnet_ni_recv(ni, msg->msg_private, msg, 0,
                                     0, payload_length, payload_length);
                }