On Tue, Nov 01, 2022 at 09:34 PM -07, Cong Wang wrote: > From: Cong Wang <cong.wang@xxxxxxxxxxxxx> > > Stanislav reported a lockdep warning, which is caused by the > cancel_work_sync() called inside sock_map_close(), as analyzed > below by Jakub: > > psock->work.func = sk_psock_backlog() > ACQUIRE psock->work_mutex > sk_psock_handle_skb() > skb_send_sock() > __skb_send_sock() > sendpage_unlocked() > kernel_sendpage() > sock->ops->sendpage = inet_sendpage() > sk->sk_prot->sendpage = tcp_sendpage() > ACQUIRE sk->sk_lock > tcp_sendpage_locked() > RELEASE sk->sk_lock > RELEASE psock->work_mutex > > sock_map_close() > ACQUIRE sk->sk_lock > sk_psock_stop() > sk_psock_clear_state(psock, SK_PSOCK_TX_ENABLED) > cancel_work_sync() > __cancel_work_timer() > __flush_work() > // wait for psock->work to finish > RELEASE sk->sk_lock > > We can move the cancel_work_sync() out of the sock lock protection, > but still before saved_close() was called. > > Fixes: 799aa7f98d53 ("skmsg: Avoid lock_sock() in sk_psock_backlog()") > Reported-by: Stanislav Fomichev <sdf@xxxxxxxxxx> > Cc: John Fastabend <john.fastabend@xxxxxxxxx> > Cc: Jakub Sitnicki <jakub@xxxxxxxxxxxxxx> > Signed-off-by: Cong Wang <cong.wang@xxxxxxxxxxxxx> > --- [...] Thanks! Acked-by: Jakub Sitnicki <jakub@xxxxxxxxxxxxxx> Tested-by: Jakub Sitnicki <jakub@xxxxxxxxxxxxxx>