Changeset View
Changeset View
Standalone View
Standalone View
sys/netinet/tcp_usrreq.c
Context not available. | |||||
*/ | */ | ||||
(*tp->t_fb->tfb_tcp_fb_fini)(tp, 0); | (*tp->t_fb->tfb_tcp_fb_fini)(tp, 0); | ||||
} | } | ||||
#ifdef TCPHPTS | |||||
/* Assure that we are not on any hpts */ | |||||
tcp_hpts_remove(tp->t_inpcb, HPTS_REMOVE_ALL); | |||||
#endif | |||||
if (blk->tfb_tcp_fb_init) { | |||||
error = (*blk->tfb_tcp_fb_init)(tp); | |||||
if (error) { | |||||
refcount_release(&blk->tfb_refcnt); | |||||
if (tp->t_fb->tfb_tcp_fb_init) { | |||||
if((*tp->t_fb->tfb_tcp_fb_init)(tp) != 0) { | |||||
/* Fall back failed, drop the connection */ | |||||
INP_WUNLOCK(inp); | |||||
soabort(so); | |||||
return(error); | |||||
} | |||||
} | |||||
goto err_out; | |||||
} | |||||
} | |||||
refcount_release(&tp->t_fb->tfb_refcnt); | refcount_release(&tp->t_fb->tfb_refcnt); | ||||
tp->t_fb = blk; | tp->t_fb = blk; | ||||
if (tp->t_fb->tfb_tcp_fb_init) { | |||||
(*tp->t_fb->tfb_tcp_fb_init)(tp); | |||||
} | |||||
#ifdef TCP_OFFLOAD | #ifdef TCP_OFFLOAD | ||||
if (tp->t_flags & TF_TOE) { | if (tp->t_flags & TF_TOE) { | ||||
tcp_offload_ctloutput(tp, sopt->sopt_dir, | tcp_offload_ctloutput(tp, sopt->sopt_dir, | ||||
Context not available. | |||||
sopt->sopt_name); | sopt->sopt_name); | ||||
} | } | ||||
#endif | #endif | ||||
err_out: | |||||
INP_WUNLOCK(inp); | INP_WUNLOCK(inp); | ||||
return (error); | return (error); | ||||
} else if ((sopt->sopt_dir == SOPT_GET) && | } else if ((sopt->sopt_dir == SOPT_GET) && | ||||
Context not available. |