On Wed, Jun 07, 2000 at 08:00:12PM +0200, kuznet@xxxxxxxxxxxxx wrote:
>
> > +/* REVIEWME: frag_expire() could be running on another CPU now, (if this
> > + * function is called from reasm_frag()). frag_expire() will be spinning
> > + * on ip6_frag_lock. Once this function returns to reasm_frag() and
> > + * reasm_frag releases the lock, frag_expire() will run and will
> > + * again call fq_free. Probably safe, but needs an expert eye :)
> > + */
> > + del_timer_async(&fq->timer);
>
> We have already discussed this. It is not safe, certainly,
> and needs refcounting.
What I think is a bigger problem is the unsafe use of the spinlock:
nothing prevents a timer on the same CPU from bumping into the spinlock,
causing a deadlock. Hmm, probably the locks need to be split (list lock,
frag queue lock protected with del_timer_async + refcount) or maybe even
irq save spinlocks (costly)
-Andi
--
This is like TV. I don't like TV.
|