]> git.ipfire.org Git - thirdparty/linux.git/commit - include/net/tls.h
net/tls: remove close callback sock unlock/lock around TX work flush
authorJohn Fastabend <john.fastabend@gmail.com>
Fri, 19 Jul 2019 17:29:16 +0000 (10:29 -0700)
committerDaniel Borkmann <daniel@iogearbox.net>
Mon, 22 Jul 2019 14:04:16 +0000 (16:04 +0200)
commitf87e62d45e51b12d48d2cb46b5cde8f83b866bc4
tree6170be1ff58cc6b2a88f9c14d3507fbc6969f963
parentac78fc148d8249dbf382c2127456dd08ec5b161c
net/tls: remove close callback sock unlock/lock around TX work flush

The tls close() callback currently drops the sock lock, makes a
cancel_delayed_work_sync() call, and then relocks the sock.

By restructuring the code we can avoid droping lock and then
reclaiming it. To simplify this we do the following,

 tls_sk_proto_close
 set_bit(CLOSING)
 set_bit(SCHEDULE)
 cancel_delay_work_sync() <- cancel workqueue
 lock_sock(sk)
 ...
 release_sock(sk)
 strp_done()

Setting the CLOSING bit prevents the SCHEDULE bit from being
cleared by any workqueue items e.g. if one happens to be
scheduled and run between when we set SCHEDULE bit and cancel
work. Then because SCHEDULE bit is set now no new work will
be scheduled.

Tested with net selftests and bpf selftests.

Signed-off-by: John Fastabend <john.fastabend@gmail.com>
Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
Reviewed-by: Dirk van der Merwe <dirk.vandermerwe@netronome.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
include/net/tls.h
net/tls/tls_main.c
net/tls/tls_sw.c