linux-stable/net/smc
Karsten Graul a18cee4791 net/smc: fix 'workqueue leaked lock' in smc_conn_abort_work
The abort_work is scheduled when a connection was detected to be
out-of-sync after a link failure. The work calls smc_conn_kill(),
which calls smc_close_active_abort() and that might end up calling
smc_close_cancel_work().
smc_close_cancel_work() cancels any pending close_work and tx_work but
needs to release the sock_lock before and acquires the sock_lock again
afterwards. So when the sock_lock was NOT acquired before then it may
be held after the abort_work completes. Thats why the sock_lock is
acquired before the call to smc_conn_kill() in __smc_lgr_terminate(),
but this is missing in smc_conn_abort_work().

Fix that by acquiring the sock_lock first and release it after the
call to smc_conn_kill().

Fixes: b286a0651e ("net/smc: handle incoming CDC validation message")
Signed-off-by: Karsten Graul <kgraul@linux.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2021-09-21 10:54:16 +01:00
..
Kconfig treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
Makefile net/smc: Add SMC statistics support 2021-06-16 12:54:02 -07:00
af_smc.c net/smc: Correct smc link connection counter in case of smc client 2021-08-09 10:46:59 +01:00
smc.h net/smc: introduce CLC first contact extension 2020-09-28 15:19:03 -07:00
smc_cdc.c net: smc: convert tasklets to use new tasklet_setup() API 2020-11-07 10:41:15 -08:00
smc_cdc.h net/smc: pre-fetch send buffer outside of send_lock 2020-05-30 18:12:25 -07:00
smc_clc.c net/smc: add missing error check in smc_clc_prfx_set() 2021-09-21 10:54:16 +01:00
smc_clc.h net/smc: Add support for obtaining system information 2020-12-01 17:56:13 -08:00
smc_close.c net/smc: check variable before dereferencing in smc_close.c 2020-09-16 17:30:16 -07:00
smc_close.h net/smc: remove close abort worker 2019-10-22 11:23:44 -07:00
smc_core.c net/smc: fix 'workqueue leaked lock' in smc_conn_abort_work 2021-09-21 10:54:16 +01:00
smc_core.h net/smc: Correct smc link connection counter in case of smc client 2021-08-09 10:46:59 +01:00
smc_diag.c net/smc: Introduce SMCR get link command 2020-12-01 17:56:13 -08:00
smc_ib.c net: Remove redundant if statements 2021-08-05 13:27:50 +01:00
smc_ib.h net/smc: Add support for obtaining SMCR device list 2020-12-01 17:56:13 -08:00
smc_ism.c net/smc: no need to flush smcd_dev's event_wq before destroying it 2021-06-03 13:54:49 -07:00
smc_ism.h net/smc: Add support for obtaining SMCD device list 2020-12-01 17:56:13 -08:00
smc_llc.c net/smc: fix wait on already cleared link 2021-08-09 10:46:59 +01:00
smc_llc.h net/smc: move add link processing for new device into llc layer 2020-07-19 15:30:22 -07:00
smc_netlink.c net/smc: Add netlink support for SMC fallback statistics 2021-06-16 12:54:02 -07:00
smc_netlink.h net/smc: Add netlink support for SMC fallback statistics 2021-06-16 12:54:02 -07:00
smc_netns.h net/smc: introduce list of pnetids for Ethernet devices 2020-09-28 15:19:03 -07:00
smc_pnet.c net: Remove redundant if statements 2021-08-05 13:27:50 +01:00
smc_pnet.h net/smc: determine proposed ISM devices 2020-09-28 15:19:03 -07:00
smc_rx.c net/smc: Make SMC statistics network namespace aware 2021-06-16 12:54:02 -07:00
smc_rx.h smc: add support for splice() 2018-05-04 11:45:06 -04:00
smc_stats.c net/smc: Fix ENODATA tests in smc_nl_get_fback_stats() 2021-06-21 12:16:58 -07:00
smc_stats.h net/smc: Make SMC statistics network namespace aware 2021-06-16 12:54:02 -07:00
smc_tx.c net/smc: fix wait on already cleared link 2021-08-09 10:46:59 +01:00
smc_tx.h net/smc: eliminate cursor read and write calls 2018-07-23 10:57:14 -07:00
smc_wr.c net/smc: fix wait on already cleared link 2021-08-09 10:46:59 +01:00
smc_wr.h net/smc: wait for departure of an IB message 2020-05-04 10:54:39 -07:00