git: 774c4c82ff72 - main - TOE: Use a read lock on the PCB for syncache_add().

John Baldwin jhb at FreeBSD.org
Tue Apr 13 23:32:00 UTC 2021


The branch main has been updated by jhb:

URL: https://cgit.FreeBSD.org/src/commit/?id=774c4c82ff72558182d14908d698bac8578adfaa

commit 774c4c82ff72558182d14908d698bac8578adfaa
Author:     John Baldwin <jhb at FreeBSD.org>
AuthorDate: 2021-04-13 23:31:04 +0000
Commit:     John Baldwin <jhb at FreeBSD.org>
CommitDate: 2021-04-13 23:31:04 +0000

    TOE: Use a read lock on the PCB for syncache_add().
    
    Reviewed by:    np, glebius
    Fixes:          08d9c9202755a30f97617758595214a530afcaea
    Sponsored by:   Chelsio Communications
    Differential Revision:  https://reviews.freebsd.org/D29739
---
 sys/dev/cxgbe/tom/t4_listen.c | 10 +++++-----
 sys/netinet/toecore.c         |  2 +-
 2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/sys/dev/cxgbe/tom/t4_listen.c b/sys/dev/cxgbe/tom/t4_listen.c
index 9cf527925fcc..0245acfe005b 100644
--- a/sys/dev/cxgbe/tom/t4_listen.c
+++ b/sys/dev/cxgbe/tom/t4_listen.c
@@ -643,7 +643,7 @@ alloc_synqe(struct adapter *sc __unused, struct listen_ctx *lctx, int flags)
 {
 	struct synq_entry *synqe;
 
-	INP_WLOCK_ASSERT(lctx->inp);
+	INP_RLOCK_ASSERT(lctx->inp);
 	MPASS(flags == M_WAITOK || flags == M_NOWAIT);
 
 	synqe = malloc(sizeof(*synqe), M_CXGBE, flags);
@@ -1323,11 +1323,11 @@ found:
 	}
 
 	inp = lctx->inp;		/* listening socket, not owned by TOE */
-	INP_WLOCK(inp);
+	INP_RLOCK(inp);
 
 	/* Don't offload if the listening socket has closed */
 	if (__predict_false(inp->inp_flags & INP_DROPPED)) {
-		INP_WUNLOCK(inp);
+		INP_RUNLOCK(inp);
 		NET_EPOCH_EXIT(et);
 		REJECT_PASS_ACCEPT_REQ(false);
 	}
@@ -1337,14 +1337,14 @@ found:
 	    EVL_MAKETAG(0xfff, 0, 0), inp);
 	rw_runlock(&sc->policy_lock);
 	if (!settings.offload) {
-		INP_WUNLOCK(inp);
+		INP_RUNLOCK(inp);
 		NET_EPOCH_EXIT(et);
 		REJECT_PASS_ACCEPT_REQ(true);	/* Rejected by COP. */
 	}
 
 	synqe = alloc_synqe(sc, lctx, M_NOWAIT);
 	if (synqe == NULL) {
-		INP_WUNLOCK(inp);
+		INP_RUNLOCK(inp);
 		NET_EPOCH_EXIT(et);
 		REJECT_PASS_ACCEPT_REQ(true);
 	}
diff --git a/sys/netinet/toecore.c b/sys/netinet/toecore.c
index f602319ef701..480aa64c1bf7 100644
--- a/sys/netinet/toecore.c
+++ b/sys/netinet/toecore.c
@@ -349,7 +349,7 @@ toe_syncache_add(struct in_conninfo *inc, struct tcpopt *to, struct tcphdr *th,
     struct inpcb *inp, void *tod, void *todctx, uint8_t iptos)
 {
 
-	INP_WLOCK_ASSERT(inp);
+	INP_RLOCK_ASSERT(inp);
 
 	(void )syncache_add(inc, to, th, inp, inp->inp_socket, NULL, tod,
 	    todctx, iptos);


More information about the dev-commits-src-all mailing list