From owner-cvs-all@FreeBSD.ORG Wed Mar 15 13:48:20 2006 Return-Path: X-Original-To: cvs-all@FreeBSD.org Delivered-To: cvs-all@FreeBSD.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id EE63C16A400; Wed, 15 Mar 2006 13:48:20 +0000 (UTC) (envelope-from rwatson@FreeBSD.org) Received: from cyrus.watson.org (cyrus.watson.org [209.31.154.42]) by mx1.FreeBSD.org (Postfix) with ESMTP id 7210D43D46; Wed, 15 Mar 2006 13:48:20 +0000 (GMT) (envelope-from rwatson@FreeBSD.org) Received: from fledge.watson.org (fledge.watson.org [209.31.154.41]) by cyrus.watson.org (Postfix) with ESMTP id 9326946C05; Wed, 15 Mar 2006 08:47:55 -0500 (EST) Date: Wed, 15 Mar 2006 13:49:13 +0000 (GMT) From: Robert Watson X-X-Sender: robert@fledge.watson.org To: Alfred Perlstein In-Reply-To: <20060315130030.GG23971@elvis.mu.org> Message-ID: <20060315133630.H5861@fledge.watson.org> References: <200603151245.k2FCjawp043512@repoman.freebsd.org> <20060315130030.GG23971@elvis.mu.org> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed Cc: cvs-src@FreeBSD.org, src-committers@FreeBSD.org, cvs-all@FreeBSD.org Subject: Re: cvs commit: src/sys/kern uipc_socket.c X-BeenThere: cvs-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: CVS commit messages for the entire tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Mar 2006 13:48:21 -0000 On Wed, 15 Mar 2006, Alfred Perlstein wrote: >> Modified files: >> sys/kern uipc_socket.c >> Log: >> As with socket consumer references (so_count), make sofree() return >> without GC'ing the socket if a strong protocol reference to the socket >> is present (SS_PROTOREF). > > This stuff is no end of complexity in the vfs layer V_DOOMED/V_whatever, > can't you accomplish this by just adding an additional reference from the > protocol layer? Socket and PCB reference counting is currently Extraordinarily Complex and More Than A Little Broken. This is the first in a long series of steps to migrate the socket and protocol code from an ad hoc reference system to a more pure reference system. This includes: - Transitioning so_pcb to being a protocol-only field, instead of allowing the socket layer to use it. SS_PROTOREF is, in effect, replacing so_pcb as a reference visible to the socket layer. - Moving towards an invariant that so_pcb is non-NULL for the life time of a socket for most protocol, allowing us to remove the constant checking for a NULL so_pcb (and associated locking) throughout the protocols. This involves a significant rewrite of TCP's pcb use, as we currently discard the PCB long before the socket is freed, hence significant complexity in all the TCP protocol APIs exposed to the socket layer. - Guaranteeing that pru_detach() will only be called once per socket, and only if pru_attach() succeeded. - Eliminating unused failure modes, such as the failure of pru_detach() and pru_abort(). - Fixing a large number of race conditions and bugs in the TCP tcpcb and twpcb model. I would like to get to the point where so_count is the sole reference count on the socket, but it will take quite a bit of work to get there. You can find an outstanding, if somewhat dated, patch at: http://www.watson.org/~robert/freebsd/netperf/20060228-rwatson_sockref.diff Cleaning up and merging large parts of this is waiting on a couple of things, including updates to the bluetooth code (I've contacted emax already), and also on a determination of the future of netatm. I have changes in that patch to make netatm compile, but I'm unable to test it, and fairly sure there is more to be done there. Robert N M Watson