Date: Tue, 16 Aug 2011 14:52:07 GMT From: Catalin Nicutar <cnicutar@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 197726 for review Message-ID: <201108161452.p7GEq74h097780@skunkworks.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://p4web.freebsd.org/@@197726?ac=10 Change 197726 by cnicutar@cnicutar_cronos on 2011/08/16 14:51:25 Add function that drops tcp connections using UTO. Affected files ... .. //depot/projects/soc2011/cnicutar_tcputo_9/src/sys/netinet/tcp_subr.c#3 edit .. //depot/projects/soc2011/cnicutar_tcputo_9/src/sys/netinet/tcp_var.h#4 edit Differences ... ==== //depot/projects/soc2011/cnicutar_tcputo_9/src/sys/netinet/tcp_subr.c#3 (text+ko) ==== @@ -1034,6 +1034,48 @@ } /* + * This function walks the list of TCP connections and attempts to free + * up space by dropping connections. + * + * XXX-CN This should be considered a work in progress. In particular + * it's not yet clear wether this should be merged with tcp_drain (which + * also iterates over TCP connections but uses a read lock for tcbinfo). + * + * In the future this function could be modified to drop more types of + * TCP connections. + */ +void +tcp_drop_uto(void) +{ + VNET_ITERATOR_DECL(vnet_iter); + VNET_LIST_RLOCK_NOSLEEP(); + VNET_FOREACH(vnet_iter) { + CURVNET_SET(vnet_iter); + struct inpcb *inp; + struct tcpcb *tp; + + /* + * Drop connections that wouldn't have survived without + * UTO. + * XXX-CN This negates the advantages of UTO for everyone + * instead of just dropping misbehaving connections. + */ + INP_INFO_WLOCK(&V_tcbinfo); + LIST_FOREACH(inp, V_tcbinfo.ipi_listhead, inp_list) { + INP_WLOCK(inp); + if ((tp = intotcpcb(inp)) != NULL) { + if (tp->t_rxtshift > TCP_MAXRXTSHIFT) + tcp_drop(tp, ETIMEDOUT); + } + INP_WUNLOCK(inp); + } + INP_INFO_WUNLOCK(&V_tcbinfo); + CURVNET_RESTORE(); + } + VNET_LIST_RUNLOCK_NOSLEEP(); +} + +/* * Notify a tcp user of an asynchronous error; * store error as soft error, but wake up user * (for now, won't do anything until can select for soft error). ==== //depot/projects/soc2011/cnicutar_tcputo_9/src/sys/netinet/tcp_var.h#4 (text+ko) ==== @@ -678,6 +678,7 @@ struct tcpcb * tcp_drop(struct tcpcb *, int); void tcp_drain(void); +void tcp_drop_uto(void); void tcp_init(void); #ifdef VIMAGE void tcp_destroy(void);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201108161452.p7GEq74h097780>