Page MenuHomeFreeBSD

D29503.id86578.diff
No OneTemporary

D29503.id86578.diff

Index: sys/dev/cxgbe/tom/t4_cpl_io.c
===================================================================
--- sys/dev/cxgbe/tom/t4_cpl_io.c
+++ sys/dev/cxgbe/tom/t4_cpl_io.c
@@ -1260,6 +1260,7 @@
break;
case TCPS_FIN_WAIT_2:
+ restore_so_proto(so, inp->inp_vflag & INP_IPV6);
tcp_twstart(tp);
INP_UNLOCK_ASSERT(inp); /* safe, we have a ref on the inp */
NET_EPOCH_EXIT(et);
@@ -1320,6 +1321,7 @@
switch (tp->t_state) {
case TCPS_CLOSING: /* see TCPS_FIN_WAIT_2 in do_peer_close too */
+ restore_so_proto(so, inp->inp_vflag & INP_IPV6);
tcp_twstart(tp);
release:
INP_UNLOCK_ASSERT(inp); /* safe, we have a ref on the inp */
Index: sys/dev/cxgbe/tom/t4_tom.h
===================================================================
--- sys/dev/cxgbe/tom/t4_tom.h
+++ sys/dev/cxgbe/tom/t4_tom.h
@@ -352,6 +352,7 @@
struct toepcb *hold_toepcb(struct toepcb *);
void free_toepcb(struct toepcb *);
void offload_socket(struct socket *, struct toepcb *);
+void restore_so_proto(struct socket *, bool);
void undo_offload_socket(struct socket *);
void final_cpl_received(struct toepcb *);
void insert_tid(struct adapter *, int, void *, int);
Index: sys/dev/cxgbe/tom/t4_tom.c
===================================================================
--- sys/dev/cxgbe/tom/t4_tom.c
+++ sys/dev/cxgbe/tom/t4_tom.c
@@ -79,9 +79,11 @@
#include "tom/t4_tom.h"
#include "tom/t4_tls.h"
+static struct protosw *tcp_protosw;
static struct protosw toe_protosw;
static struct pr_usrreqs toe_usrreqs;
+static struct protosw *tcp6_protosw;
static struct protosw toe6_protosw;
static struct pr_usrreqs toe6_usrreqs;
@@ -263,6 +265,15 @@
mtx_unlock(&td->toep_list_lock);
}
+void
+restore_so_proto(struct socket *so, bool v6)
+{
+ if (v6)
+ so->so_proto = tcp6_protosw;
+ else
+ so->so_proto = tcp_protosw;
+}
+
/* This is _not_ the normal way to "unoffload" a socket. */
void
undo_offload_socket(struct socket *so)
@@ -282,6 +293,7 @@
sb = &so->so_rcv;
SOCKBUF_LOCK(sb);
sb->sb_flags &= ~SB_NOCOALESCE;
+ restore_so_proto(so, inp->inp_vflag & INP_IPV6);
SOCKBUF_UNLOCK(sb);
tp->tod = NULL;
@@ -1837,8 +1849,6 @@
static int
t4_tom_mod_load(void)
{
- struct protosw *tcp_protosw, *tcp6_protosw;
-
/* CPL handlers */
t4_register_cpl_handler(CPL_GET_TCB_RPL, do_get_tcb_rpl);
t4_register_shared_cpl_handler(CPL_L2T_WRITE_RPL, do_l2t_write_rpl2,

File Metadata

Mime Type
text/plain
Expires
Thu, Aug 6, 5:47 AM (18 h, 43 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
36084328
Default Alt Text
D29503.id86578.diff (2 KB)

Event Timeline