]> git.baikalelectronics.ru Git - kernel.git/commit
net/smc: don't send CDC/LLC message if link not ready
authorDust Li <dust.li@linux.alibaba.com>
Tue, 28 Dec 2021 09:03:24 +0000 (17:03 +0800)
committerDavid S. Miller <davem@davemloft.net>
Tue, 28 Dec 2021 12:42:45 +0000 (12:42 +0000)
commit6a9a00b9d057f8236b80be22244367cf358f96ad
treebd949f7dcff078d5f1a839a41db8204e13e7205e
parente32010092a5b58abbf51c24ff1eb4e122b6865f5
net/smc: don't send CDC/LLC message if link not ready

We found smc_llc_send_link_delete_all() sometimes wait
for 2s timeout when testing with RDMA link up/down.
It is possible when a smc_link is in ACTIVATING state,
the underlaying QP is still in RESET or RTR state, which
cannot send any messages out.

smc_llc_send_link_delete_all() use smc_link_usable() to
checks whether the link is usable, if the QP is still in
RESET or RTR state, but the smc_link is in ACTIVATING, this
LLC message will always fail without any CQE entering the
CQ, and we will always wait 2s before timeout.

Since we cannot send any messages through the QP before
the QP enter RTS. I add a wrapper smc_link_sendable()
which checks the state of QP along with the link state.
And replace smc_link_usable() with smc_link_sendable()
in all LLC & CDC message sending routine.

Fixes: 910e504cee25 ("smc: connection data control (CDC)")
Signed-off-by: Dust Li <dust.li@linux.alibaba.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/smc/smc_core.c
net/smc/smc_core.h
net/smc/smc_llc.c
net/smc/smc_wr.c
net/smc/smc_wr.h