Subject: Re: pool problems, TAILQ, and more...
To: None <bgrayson@netbsd.org>
From: Manuel Bouyer <bouyer@antioche.lip6.fr>
List: tech-kern
Date: 03/29/2000 21:24:26
On Sun, Mar 26, 2000 at 04:15:23AM -0600, Brian C. Grayson wrote:
>   I've got a little more info on my panics.  It looks like
> something is modifying the region after the pool_put.
> 
>   For example, after the put, but before returning from
> pool_put(), the item at 0xc06ab080 has distinct prev and next
> pointers.  At the next pool_get() call, at the time of entry, the
> prev pointer for that item points to _itself_.  Since it was on
> the free list, no one should have been modifying it between the
> put and get, of course.  Thus, in TAILQ_REMOVE(), when it
> updates the prev pointer, it's twiddling itself, and not the
> head.  So since the head still points at it, the next call to
> TAILQ_REMOVE() returns the same region.

Find at which offset in the pool item the data is modified. Then
translate this in the original structure (the one of the data this item
is used for), and check at which place(s) this is written. Then add a check
at these places to know if the pool item is already free or not (one way
would be to check for 0xdeadbeef at the begining of the pool item).

> 
>   Is there any difference between swapping to an FFS file versus
> an NFS file, as far as the functions called in uvm_swap, etc?

Timing ?

--
Manuel Bouyer <bouyer@antioche.eu.org>
     {Net,Free}BSD: 22 ans d'experience feront toujours la difference
--