mirror of
https://github.com/torvalds/linux.git
synced 2026-09-22 12:44:03 +02:00
NTB: ntb_transport: Fail TX enqueue when the QP link is down
Commitf195a1a6fe("ntb: Drop packets when qp link is down") meant to make ntb_transport_tx_enqueue() drop packets submitted while the QP link is down, but it only returns 0 without consuming the packet. Zero means success by this function's contract, so ntb_netdev reports NETDEV_TX_OK and forgets the skb: nothing queued it, nothing frees it, and it leaks, one skb for every transmit racing a link-down. Return -ENOLINK instead, restoring the contract that a non-zero return leaves the buffer owned by the caller. With the preceding patch, ntb_netdev frees the skb on non-retryable enqueue failures and returns NETDEV_TX_OK, so a packet racing with link-down is dropped without leaking or entering a busy retry loop. Fixes:f195a1a6fe("ntb: Drop packets when qp link is down") Cc: stable@vger.kernel.org Signed-off-by: Koichiro Den <den@valinux.co.jp> Reviewed-by: Dave Jiang <dave.jiang@intel.com> Link: https://patch.msgid.link/20260817053519.4135287-4-den@valinux.co.jp Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
8aaa47351d
commit
873ce713fe
|
|
@ -2353,9 +2353,8 @@ int ntb_transport_tx_enqueue(struct ntb_transport_qp *qp, void *cb, void *data,
|
|||
if (!qp || !len)
|
||||
return -EINVAL;
|
||||
|
||||
/* If the qp link is down already, just ignore. */
|
||||
if (!qp->link_is_up)
|
||||
return 0;
|
||||
return -ENOLINK;
|
||||
|
||||
entry = ntb_list_rm(&qp->ntb_tx_free_q_lock, &qp->tx_free_q);
|
||||
if (!entry) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user