VIMAGE UDP memory leak fix

Robert N. M. Watson rwatson at FreeBSD.org
Fri Nov 21 15:01:20 UTC 2014


On 21 Nov 2014, at 11:02, Marko Zec <zec at fer.hr> wrote:

>> I had convinced myself for UDP many years ago that it was ok to
>> remove it.  People have touched the code however so it’s definitively
>> worth re-checking again.
>> 
>> For TCP we clearly cannot do it (yet, and couldn’t back then).   But
>> TCP was the only of the few cases I had left unfixed back then.
>> Can’t remember what the others were (was like 3 or 4 of them;  could
>> also be some of the fixes were indeed committed back then.
> 
> Now that we've found ourselves in this discussion, I'm really
> becoming curious why exactly do we need UMA_ZONE_NOFREE for network
> stack zones at all?   Admittedly, I always thought that the primary
> purpose of UMA_ZONE_NOFREE was to prevent uma_reclaim() from paging out
> _used_ zone pages, but reviewing the uma code reveals that this might
> not be the case, i.e. that NOFREE only prevents _unused_ pages to be
> freed by uma_reclaim().
> 
> Moreover, all uma_zalloc() calls as far as I can see are flagged as
> M_NOWAIT and are followed by checks for allocation failures, so that
> part seems to be covered.
> 
> So, what's really the problem which UMA_ZONE_NOFREE flagging is supposed
> to solve these days? (you claim that we clearly need it for TCP - why)?

Bjoern and I chatted for the last twenty or so minutes about the code, and believe that as things stand, it is *not* safe to turn off UMA_ZONE_NOFREE for TCP due to a teardown race in TCP that has been known about and discussed for several years, but is some work to resolve and that we've not yet found time to do so. The XXXRW's in tcp_timer.c are related to this. We're pondering ways to fix it but think this is not something that can be rushed.

Robert


More information about the freebsd-net mailing list