/* Is there space at the tail? */
        tail_room = __i2400m_tx_tail_room(i2400m);
        if (tail_room < needed_size) {
-               if (i2400m->tx_out % I2400M_TX_BUF_SIZE
-                   < i2400m->tx_in % I2400M_TX_BUF_SIZE) {
+               /*
+                * If the tail room space is not enough to push the message
+                * in the TX FIFO, then there are two possibilities:
+                * 1. There is enough head room space to accommodate
+                * this message in the TX FIFO.
+                * 2. There is not enough space in the head room and
+                * in tail room of the TX FIFO to accommodate the message.
+                * In the case (1), return TAIL_FULL so that the caller
+                * can figure out, if the caller wants to push the message
+                * into the head room space.
+                * In the case (2), return NULL, indicating that the TX FIFO
+                * cannot accommodate the message.
+                */
+               if (room - tail_room >= needed_size) {
                        d_printf(2, dev, "fifo push %zu/%zu: tail full\n",
                                 size, padding);
                        return TAIL_FULL;       /* There might be head space */