FreeBSD Bugzilla – Attachment 225416 Details for
Bug 256280
FreeBSD nfsd serving zfs pool, linux nfsclient, often hangs (not observed in 12-stable)
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
reverts commit r367492
r367492-revert.patch (text/plain), 8.74 KB, created by
Rick Macklem
on 2021-05-31 16:51:29 UTC
(
hide
)
Description:
reverts commit r367492
Filename:
MIME Type:
Creator:
Rick Macklem
Created:
2021-05-31 16:51:29 UTC
Size:
8.74 KB
patch
obsolete
>--- sys/netinet/tcp_stacks/bbr.c.orig 2021-04-09 08:24:05.364212000 -0700 >+++ sys/netinet/tcp_stacks/bbr.c 2021-04-09 08:33:49.799902000 -0700 >@@ -7876,8 +7876,7 @@ bbr_process_ack(struct mbuf *m, struct tcphdr *th, str > acked_amount = min(acked, (int)sbavail(&so->so_snd)); > tp->snd_wnd -= acked_amount; > mfree = sbcut_locked(&so->so_snd, acked_amount); >- SOCKBUF_UNLOCK(&so->so_snd); >- tp->t_flags |= TF_WAKESOW; >+ sowwakeup_locked(so); > m_freem(mfree); > if (SEQ_GT(th->th_ack, tp->snd_una)) { > bbr_collapse_rtt(tp, bbr, TCP_REXMTVAL(tp)); >@@ -8353,8 +8352,7 @@ bbr_process_data(struct mbuf *m, struct tcphdr *th, st > appended = > #endif > sbappendstream_locked(&so->so_rcv, m, 0); >- SOCKBUF_UNLOCK(&so->so_rcv); >- tp->t_flags |= TF_WAKESOR; >+ sorwakeup_locked(so); > #ifdef NETFLIX_SB_LIMITS > if (so->so_rcv.sb_shlim && appended != mcnt) > counter_fo_release(so->so_rcv.sb_shlim, >@@ -8414,8 +8412,6 @@ bbr_process_data(struct mbuf *m, struct tcphdr *th, st > if (thflags & TH_FIN) { > if (TCPS_HAVERCVDFIN(tp->t_state) == 0) { > socantrcvmore(so); >- /* The socket upcall is handled by socantrcvmore. */ >- tp->t_flags &= ~TF_WAKESOR; > /* > * If connection is half-synchronized (ie NEEDSYN > * flag on) then delay ACK, so it may be piggybacked >@@ -8606,8 +8602,7 @@ bbr_do_fastnewdata(struct mbuf *m, struct tcphdr *th, > sbappendstream_locked(&so->so_rcv, m, 0); > ctf_calc_rwin(so, tp); > } >- SOCKBUF_UNLOCK(&so->so_rcv); >- tp->t_flags |= TF_WAKESOR; >+ sorwakeup_locked(so); > #ifdef NETFLIX_SB_LIMITS > if (so->so_rcv.sb_shlim && mcnt != appended) > counter_fo_release(so->so_rcv.sb_shlim, mcnt - appended); >@@ -8798,7 +8793,7 @@ bbr_fastack(struct mbuf *m, struct tcphdr *th, struct > &tcp_savetcp, 0); > #endif > /* Wake up the socket if we have room to write more */ >- tp->t_flags |= TF_WAKESOW; >+ sowwakeup(so); > if (tp->snd_una == tp->snd_max) { > /* Nothing left outstanding */ > bbr_log_progress_event(bbr, tp, ticks, PROGRESS_CLEAR, __LINE__); >@@ -11754,10 +11749,8 @@ bbr_do_segment(struct mbuf *m, struct tcphdr *th, stru > } > retval = bbr_do_segment_nounlock(m, th, so, tp, > drop_hdrlen, tlen, iptos, 0, &tv); >- if (retval == 0) { >- tcp_handle_wakeup(tp, so); >+ if (retval == 0) > INP_WUNLOCK(tp->t_inpcb); >- } > } > > /* >--- sys/netinet/tcp_stacks/rack.c.orig 2021-04-09 08:36:23.622821000 -0700 >+++ sys/netinet/tcp_stacks/rack.c 2021-04-09 08:41:24.096687000 -0700 >@@ -8344,8 +8344,7 @@ rack_process_ack(struct mbuf *m, struct tcphdr *th, st > */ > ourfinisacked = 1; > } >- SOCKBUF_UNLOCK(&so->so_snd); >- tp->t_flags |= TF_WAKESOW; >+ sowwakeup_locked(so); > m_freem(mfree); > if (rack->r_ctl.rc_early_recovery == 0) { > if (IN_RECOVERY(tp->t_flags)) { >@@ -8665,8 +8664,7 @@ rack_process_data(struct mbuf *m, struct tcphdr *th, s > appended = > #endif > sbappendstream_locked(&so->so_rcv, m, 0); >- SOCKBUF_UNLOCK(&so->so_rcv); >- tp->t_flags |= TF_WAKESOR; >+ sorwakeup_locked(so); > #ifdef NETFLIX_SB_LIMITS > if (so->so_rcv.sb_shlim && appended != mcnt) > counter_fo_release(so->so_rcv.sb_shlim, >@@ -8731,8 +8729,6 @@ rack_process_data(struct mbuf *m, struct tcphdr *th, s > if (thflags & TH_FIN) { > if (TCPS_HAVERCVDFIN(tp->t_state) == 0) { > socantrcvmore(so); >- /* The socket upcall is handled by socantrcvmore. */ >- tp->t_flags &= ~TF_WAKESOR; > /* > * If connection is half-synchronized (ie NEEDSYN > * flag on) then delay ACK, so it may be piggybacked >@@ -8924,8 +8920,7 @@ rack_do_fastnewdata(struct mbuf *m, struct tcphdr *th, > sbappendstream_locked(&so->so_rcv, m, 0); > ctf_calc_rwin(so, tp); > } >- SOCKBUF_UNLOCK(&so->so_rcv); >- tp->t_flags |= TF_WAKESOR; >+ sorwakeup_locked(so); > #ifdef NETFLIX_SB_LIMITS > if (so->so_rcv.sb_shlim && mcnt != appended) > counter_fo_release(so->so_rcv.sb_shlim, mcnt - appended); >@@ -9142,7 +9137,7 @@ rack_fastack(struct mbuf *m, struct tcphdr *th, struct > rack_timer_cancel(tp, rack, rack->r_ctl.rc_rcvtime, __LINE__); > } > /* Wake up the socket if we have room to write more */ >- tp->t_flags |= TF_WAKESOW; >+ sowwakeup(so); > if (sbavail(&so->so_snd)) { > rack->r_wanted_output = 1; > } >@@ -11205,10 +11200,8 @@ rack_do_segment(struct mbuf *m, struct tcphdr *th, str > tcp_get_usecs(&tv); > } > if(rack_do_segment_nounlock(m, th, so, tp, >- drop_hdrlen, tlen, iptos, 0, &tv) == 0) { >- tcp_handle_wakeup(tp, so); >+ drop_hdrlen, tlen, iptos, 0, &tv) == 0) > INP_WUNLOCK(tp->t_inpcb); >- } > } > > struct rack_sendmap * >--- sys/netinet/tcp_stacks/rack_bbr_common.c.orig 2021-04-09 08:45:26.721521000 -0700 >+++ sys/netinet/tcp_stacks/rack_bbr_common.c 2021-04-09 08:46:58.580234000 -0700 >@@ -458,7 +458,6 @@ ctf_do_queued_segments(struct socket *so, struct tcpcb > /* We lost the tcpcb (maybe a RST came in)? */ > return(1); > } >- tcp_handle_wakeup(tp, so); > } > return (0); > } >--- sys/netinet/tcp_input.c.orig 2021-04-05 01:07:00.342559000 -0700 >+++ sys/netinet/tcp_input.c 2021-04-09 07:58:03.262815000 -0700 >@@ -1472,29 +1472,6 @@ tcp_autorcvbuf(struct mbuf *m, struct tcphdr *th, stru > } > > void >-tcp_handle_wakeup(struct tcpcb *tp, struct socket *so) >-{ >- /* >- * Since tp might be gone if the session entered >- * the TIME_WAIT state before coming here, we need >- * to check if the socket is still connected. >- */ >- if ((so->so_state & SS_ISCONNECTED) == 0) >- return; >- INP_LOCK_ASSERT(tp->t_inpcb); >- if (tp->t_flags & TF_WAKESOR) { >- tp->t_flags &= ~TF_WAKESOR; >- SOCKBUF_UNLOCK_ASSERT(&so->so_rcv); >- sorwakeup(so); >- } >- if (tp->t_flags & TF_WAKESOW) { >- tp->t_flags &= ~TF_WAKESOW; >- SOCKBUF_UNLOCK_ASSERT(&so->so_snd); >- sowwakeup(so); >- } >-} >- >-void > tcp_do_segment(struct mbuf *m, struct tcphdr *th, struct socket *so, > struct tcpcb *tp, int drop_hdrlen, int tlen, uint8_t iptos) > { >@@ -1863,7 +1840,7 @@ tcp_do_segment(struct mbuf *m, struct tcphdr *th, stru > else if (!tcp_timer_active(tp, TT_PERSIST)) > tcp_timer_activate(tp, TT_REXMT, > tp->t_rxtcur); >- tp->t_flags |= TF_WAKESOW; >+ sowwakeup(so); > if (sbavail(&so->so_snd)) > (void) tp->t_fb->tfb_tcp_output(tp); > goto check_delack; >@@ -1928,8 +1905,8 @@ tcp_do_segment(struct mbuf *m, struct tcphdr *th, stru > m_adj(m, drop_hdrlen); /* delayed header drop */ > sbappendstream_locked(&so->so_rcv, m, 0); > } >- SOCKBUF_UNLOCK(&so->so_rcv); >- tp->t_flags |= TF_WAKESOR; >+ /* NB: sorwakeup_locked() does an implicit unlock. */ >+ sorwakeup_locked(so); > if (DELAY_ACK(tp, tlen)) { > tp->t_flags |= TF_DELACK; > } else { >@@ -2925,8 +2902,8 @@ process_ACK: > tp->snd_wnd = 0; > ourfinisacked = 0; > } >- SOCKBUF_UNLOCK(&so->so_snd); >- tp->t_flags |= TF_WAKESOW; >+ /* NB: sowwakeup_locked() does an implicit unlock. */ >+ sowwakeup_locked(so); > m_freem(mfree); > /* Detect una wraparound. */ > if (!IN_RECOVERY(tp->t_flags) && >@@ -3147,8 +3124,8 @@ dodata: /* XXX */ > m_freem(m); > else > sbappendstream_locked(&so->so_rcv, m, 0); >- SOCKBUF_UNLOCK(&so->so_rcv); >- tp->t_flags |= TF_WAKESOR; >+ /* NB: sorwakeup_locked() does an implicit unlock. */ >+ sorwakeup_locked(so); > } else { > /* > * XXX: Due to the header drop above "th" is >@@ -3215,8 +3192,6 @@ dodata: /* XXX */ > if (thflags & TH_FIN) { > if (TCPS_HAVERCVDFIN(tp->t_state) == 0) { > socantrcvmore(so); >- /* The socket upcall is handled by socantrcvmore. */ >- tp->t_flags &= ~TF_WAKESOR; > /* > * If connection is half-synchronized > * (ie NEEDSYN flag on) then delay ACK, >@@ -3280,7 +3255,6 @@ check_delack: > tp->t_flags &= ~TF_DELACK; > tcp_timer_activate(tp, TT_DELACK, tcp_delacktime); > } >- tcp_handle_wakeup(tp, so); > INP_WUNLOCK(tp->t_inpcb); > return; > >@@ -3314,7 +3288,6 @@ dropafterack: > TCP_PROBE3(debug__input, tp, th, m); > tp->t_flags |= TF_ACKNOW; > (void) tp->t_fb->tfb_tcp_output(tp); >- tcp_handle_wakeup(tp, so); > INP_WUNLOCK(tp->t_inpcb); > m_freem(m); > return; >@@ -3322,7 +3295,6 @@ dropafterack: > dropwithreset: > if (tp != NULL) { > tcp_dropwithreset(m, th, tp, tlen, rstreason); >- tcp_handle_wakeup(tp, so); > INP_WUNLOCK(tp->t_inpcb); > } else > tcp_dropwithreset(m, th, NULL, tlen, rstreason); >@@ -3338,10 +3310,8 @@ drop: > &tcp_savetcp, 0); > #endif > TCP_PROBE3(debug__input, tp, th, m); >- if (tp != NULL) { >- tcp_handle_wakeup(tp, so); >+ if (tp != NULL) > INP_WUNLOCK(tp->t_inpcb); >- } > m_freem(m); > } > >--- sys/netinet/tcp_reass.c.orig 2021-04-09 08:18:10.599092000 -0700 >+++ sys/netinet/tcp_reass.c 2021-04-09 08:19:54.912378000 -0700 >@@ -959,8 +959,7 @@ new_entry: > } else { > sbappendstream_locked(&so->so_rcv, m, 0); > } >- SOCKBUF_UNLOCK(&so->so_rcv); >- tp->t_flags |= TF_WAKESOR; >+ sorwakeup_locked(so); > return (flags); > } > if (tcp_new_limits) { >@@ -1108,7 +1107,6 @@ present: > #ifdef TCP_REASS_LOGGING > tcp_reass_log_dump(tp); > #endif >- SOCKBUF_UNLOCK(&so->so_rcv); >- tp->t_flags |= TF_WAKESOR; >+ sorwakeup_locked(so); > return (flags); > }
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 256280
: 225416