Please avoid doing assignment in a conditional statement, can be error prone.
Surprised checkpatch doesn't complain about it.
Better as:
desc = reserve_and_fill(txq, mbuf, umem);
if (!desc) {
kick_tx(txq, cq);
desc = reserve_and_fill(txq, mbuf, umem);
if (!desc)
goto out;