On 19/12/2012 2:31 PM, Vijay Singh wrote:
As it is today, a socket upcall on a listener socket is made with the
V_tcbinfo lock held. [tcp_input -> syncache_socket -> sonewconn ->
sowakeup].

I feel that the use of the V_tcbinfo is not consistent in the syncache code.

In syncache_add(), we drop the lock before doing the lookup:

         INP_WUNLOCK(inp);
         INP_INFO_WUNLOCK(&V_tcbinfo);
         [..snip..]
         sc = syncache_lookup(inc, &sch);        /* returns locked entry */

However, when going through syncache_expand() or syncache_chkrst() we
keep the V_tcbinfo lock.

Since the syncache has its own lock, do we need to hold the V_tcbinfo
lock when calling syncache_socket()?


Every time the list of TCP control blocks (tcbinfo) is manipulated, a write lock must be held to protect it. syncache_expand() is responsible for 'expanding' the listening socket into a full blown accepted socket, including creating its associated control block in the process.

By the way I don't think V_tcbinfo lock is held for syncache_chkrst() or needed for that matter but I could be wrong since I'm looking at 7.x code.

Karim.
_______________________________________________
freebsd-net@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "freebsd-net-unsubscr...@freebsd.org"

Reply via email to