summaryrefslogtreecommitdiff
path: root/net/smc/smc_close.c
diff options
context:
space:
mode:
authorWen Gu <guwen@linux.alibaba.com>2022-04-22 15:56:18 +0800
committerJakub Kicinski <kuba@kernel.org>2022-04-25 11:03:48 -0700
commit97b9af7a70936e331170c79040cc9bf20071b566 (patch)
tree1a0b5bc5054b231e1cc9d87353b1c2b9629372f0 /net/smc/smc_close.c
parentba5a4fdd63ae0c575707030db0b634b160baddd7 (diff)
net/smc: Only save the original clcsock callback functions
Both listen and fallback process will save the current clcsock callback functions and establish new ones. But if both of them happen, the saved callback functions will be overwritten. So this patch introduces some helpers to ensure that only save the original callback functions of clcsock. Fixes: 341adeec9ada ("net/smc: Forward wakeup to smc socket waitqueue after fallback") Signed-off-by: Wen Gu <guwen@linux.alibaba.com> Acked-by: Karsten Graul <kgraul@linux.ibm.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to 'net/smc/smc_close.c')
-rw-r--r--net/smc/smc_close.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/net/smc/smc_close.c b/net/smc/smc_close.c
index 676cb2333d3c..7bd1ef55b9df 100644
--- a/net/smc/smc_close.c
+++ b/net/smc/smc_close.c
@@ -214,7 +214,8 @@ again:
sk->sk_state = SMC_CLOSED;
sk->sk_state_change(sk); /* wake up accept */
if (smc->clcsock && smc->clcsock->sk) {
- smc->clcsock->sk->sk_data_ready = smc->clcsk_data_ready;
+ smc_clcsock_restore_cb(&smc->clcsock->sk->sk_data_ready,
+ &smc->clcsk_data_ready);
smc->clcsock->sk->sk_user_data = NULL;
rc = kernel_sock_shutdown(smc->clcsock, SHUT_RDWR);
}