看板 FB_smp 關於我們 聯絡資訊
> tanimura 2002/05/19 22:41:09 PDT > Modified files: > (too many files) > Log: > Lock down a socket, milestone 1. > > Reviewed by: alfred This patch mechanically adds a lot of locks around uses of socket fields. For example, in tcp_output.c: @@ -889,8 +897,11 @@ send: #ifdef IPSEC ipsec_setsocket(m, so); #endif /*IPSEC*/ + SOCK_LOCK(so); + soopts = (so->so_options & SO_DONTROUTE); + SOCK_UNLOCK(so); error = ip_output(m, tp->t_inpcb->inp_options, &tp->t_inpcb->inp_route, - (so->so_options & SO_DONTROUTE), 0); + soopts, 0); } Locking and immediately unlocking accesses to a socket field doesn't accomplish anything. We want to lock the socket at the beginning of an operation and release it at the end. This leads to way fewer locks inserted into the networking code. Furthermore, these mechanical bottom-up socket locks don't respect lock ordering with respect to the top-down inpcb locks. Fortunately, cvs update only resulted in a few conflicts with the inpcb locking code and I can just turn off the socket lock macros in my tree. We should coordiante better on working to lock up the networking code so we're not working at cross-purposes. Jeffrey To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-smp" in the body of the message