Re: [PATCH v2 06/14] NTB: ntb_transport: Clear link state before QP cleanup

From: Dave Jiang

Date: Thu Sep 24 2026 - 12:17:32 EST




On 9/9/26 9:08 PM, Koichiro Den wrote:
> Cleanup leaves the transport link marked up after releasing its MWs.
> A subsequent client link-up request can therefore start QP link work
> before the transport has been set up again.
>
> Clear link_is_up before cancelling QP work and releasing the MWs.
> Have QP link work return if the transport went down after it was
> queued.
>
> Fixes: e26a5843f7f5 ("NTB: Split ntb_hw_intel and ntb_transport drivers")
> Cc: stable@xxxxxxxxxxxxxxx
> Signed-off-by: Koichiro Den <den@xxxxxxxxxxxxx>

Reviewed-by: Dave Jiang <dave.jiang@xxxxxxxxx>

> ---
> Changes in v2:
> - No changes.
>
> Note: this is a reworked version of my earlier, withdrawn patch:
> https://lore.kernel.org/r/20260717061223.2203863-1-den@xxxxxxxxxxxxx/
>
> drivers/ntb/ntb_transport.c | 6 +++++-
> 1 file changed, 5 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/ntb/ntb_transport.c b/drivers/ntb/ntb_transport.c
> index 1332d53bcfe7..8dd1770aaaf1 100644
> --- a/drivers/ntb/ntb_transport.c
> +++ b/drivers/ntb/ntb_transport.c
> @@ -977,6 +977,8 @@ static void ntb_transport_link_cleanup(struct ntb_transport_ctx *nt)
>
> guard(mutex)(&nt->link_event_lock);
>
> + WRITE_ONCE(nt->link_is_up, false);
> +
> qp_bitmap_alloc = nt->qp_bitmap & ~nt->qp_bitmap_free;
>
> /* Pass along the info to any clients */
> @@ -1142,7 +1144,9 @@ static void ntb_qp_link_work(struct work_struct *work)
> struct ntb_transport_ctx *nt = qp->transport;
> int val;
>
> - WARN_ON(!nt->link_is_up);
> + /* Pair with the link publication in ntb_transport_link_work(). */
> + if (!smp_load_acquire(&nt->link_is_up))
> + return;
>
> val = ntb_spad_read(nt->ndev, QP_LINKS);
>