From owner-cvs-src@FreeBSD.ORG Tue Oct 19 23:12:20 2004 Return-Path: Delivered-To: cvs-src@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id C21E416A4CE for ; Tue, 19 Oct 2004 23:12:20 +0000 (GMT) Received: from c00l3r.networx.ch (c00l3r.networx.ch [62.48.2.2]) by mx1.FreeBSD.org (Postfix) with ESMTP id 0861E43D53 for ; Tue, 19 Oct 2004 23:12:20 +0000 (GMT) (envelope-from andre@freebsd.org) Received: (qmail 63283 invoked from network); 19 Oct 2004 23:11:15 -0000 Received: from unknown (HELO freebsd.org) ([62.48.0.53]) (envelope-sender ) by c00l3r.networx.ch (qmail-ldap-1.03) with SMTP for ; 19 Oct 2004 23:11:15 -0000 Message-ID: <41759F58.F8E5D82F@freebsd.org> Date: Wed, 20 Oct 2004 01:12:24 +0200 From: Andre Oppermann X-Mailer: Mozilla 4.8 [en] (Windows NT 5.0; U) X-Accept-Language: en MIME-Version: 1.0 To: Robert Watson References: Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit cc: cvs-src@freebsd.org cc: src-committers@freebsd.org cc: cvs-all@freebsd.org Subject: Re: cvs commit: src/sys/netinet ip_divert.c X-BeenThere: cvs-src@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: CVS commit messages for the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 19 Oct 2004 23:12:20 -0000 Robert Watson wrote: > > On Wed, 20 Oct 2004, Andre Oppermann wrote: > > > Robert Watson wrote: > > > > > > On Wed, 20 Oct 2004, Andre Oppermann wrote: > > > > > > > Hmm... I'll take a look at those attempts and see what I can come up > > > > with to get some general solution for the protocol cases. The approach > > > > of callout_drain() looks promising though. > > > > > > BTW, it looks like the divert pcb zone uses UMA_ZONE_NOFREE so that the > > > memory is type-stable (presumably in particular for the sysctl), so all > > > memory allocated by the divert module for pcbs is likely leaked on unload. > > > I'm beginning to think we should just block unload for divert and solve > > > the unload problem another day for another protocol... > > > > It is indeed an oversight by me not to uma_zdestroy() the zone on > > unload. The sysctl handler uses normal malloc. > > If it's like other instances of type-stable storage, it's so that weak > consistency can be used by the monitoring sysctl in order to avoid > allocating lots of memory and/or suspending operation while monitoring > takes place. Other instances of type-stable storage in the socket code > and network stack rely on the "chain'o'pcbs" list pointers not being > cleared on allocation and free. Sigh... What a mess... In the IPDIVERT case the sysctl can be protected with a separate (non-adaptive) mutex. We only unload if there are no open sockets, the protocol is unloaded so there should be no cases where weak list pointers are used. I am out of the office tomorrow doing consulting work. I may have time to check into this discussion again tomorrow evening or otherwise on Thursday. -- Andre