diff options
author | hsu <hsu@FreeBSD.org> | 2003-02-15 02:37:57 +0000 |
---|---|---|
committer | hsu <hsu@FreeBSD.org> | 2003-02-15 02:37:57 +0000 |
commit | b9cd8d8951aa733eb624c5f9a4218393f0403a72 (patch) | |
tree | 26fbf367f08970d5dc04f53922342ae379ba2006 /sys/netinet/tcp_timewait.c | |
parent | 61e9b13e6af56c4888ce628791cd8ac61c46a4c4 (diff) | |
download | FreeBSD-src-b9cd8d8951aa733eb624c5f9a4218393f0403a72.zip FreeBSD-src-b9cd8d8951aa733eb624c5f9a4218393f0403a72.tar.gz |
Take advantage of pre-existing lock-free synchronization and type stable memory
to avoid acquiring SMP locks during expensive copyout process.
Diffstat (limited to 'sys/netinet/tcp_timewait.c')
-rw-r--r-- | sys/netinet/tcp_timewait.c | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/sys/netinet/tcp_timewait.c b/sys/netinet/tcp_timewait.c index cb9682d..d12c899 100644 --- a/sys/netinet/tcp_timewait.c +++ b/sys/netinet/tcp_timewait.c @@ -840,8 +840,8 @@ tcp_notify(inp, error) * can never complete. */ if (tp->t_state == TCPS_ESTABLISHED && - (error == EHOSTUNREACH || error == ENETUNREACH || - error == EHOSTDOWN)) { + (error == EHOSTUNREACH || error == ENETUNREACH || + error == EHOSTDOWN)) { return inp; } else if (tp->t_state < TCPS_ESTABLISHED && tp->t_rxtshift > 3 && tp->t_softerror) { @@ -922,7 +922,6 @@ tcp_pcblist(SYSCTL_HANDLER_ARGS) error = 0; for (i = 0; i < n; i++) { inp = inp_list[i]; - INP_LOCK(inp); if (inp->inp_gencnt <= gencnt) { struct xtcpcb xt; caddr_t inp_ppcb; @@ -936,9 +935,9 @@ tcp_pcblist(SYSCTL_HANDLER_ARGS) bzero((char *) &xt.xt_tp, sizeof xt.xt_tp); if (inp->inp_socket) sotoxsocket(inp->inp_socket, &xt.xt_socket); + xt.xt_inp.inp_gencnt = inp->inp_gencnt; error = SYSCTL_OUT(req, &xt, sizeof xt); } - INP_UNLOCK(inp); } if (!error) { /* |