On 08/02/2022 13:53, D. Wythe wrote: > +static struct workqueue_struct *smc_tcp_ls_wq; /* wq for tcp listen work */ > struct workqueue_struct *smc_hs_wq; /* wq for handshake work */ > struct workqueue_struct *smc_close_wq; /* wq for close work */ > > @@ -2227,7 +2228,7 @@ static void smc_clcsock_data_ready(struct sock *listen_clcsock) > lsmc->clcsk_data_ready(listen_clcsock); > if (lsmc->sk.sk_state == SMC_LISTEN) { > sock_hold(&lsmc->sk); /* sock_put in smc_tcp_listen_work() */ > - if (!queue_work(smc_hs_wq, &lsmc->tcp_listen_work)) > + if (!queue_work(smc_tcp_ls_wq, &lsmc->tcp_listen_work)) > sock_put(&lsmc->sk); It works well this way, but given the fact that there is one tcp_listen worker per listen socket and these workers finish relatively quickly, wouldn't it be okay to use the system_wq instead of using an own queue? But I have no strong opinion about that...