tech-kern archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: biodone vs. BUFQ_PEEK



On Thu, Sep 11, 2008 at 10:46:20PM +0200, Manuel Bouyer wrote:
> On Thu, Sep 11, 2008 at 01:18:28PM +0200, Juergen Hannken-Illjes wrote:
> > While looking for something completely different I found this fragment of
> > biodone():
> > 
> >     if (cpu_intr_p()) {
> >             ...
> >             TAILQ_INSERT_TAIL(&curcpu()->ci_data.cpu_biodone, bp, b_actq);
> > 
> > This should lead to the corruption of b_actq if the buffer was dequeued with
> > BUFQ_PEEK() that leaves the buffer on the queue (using b_actq).
> > 
> > Confused,
> 
> I'm not sure you're supposed to call biodone on a buffer you got using
> BUFQ_PEEK(), without dequeuing it. Do you see some places that do it ?

The problem reported by Lars Nordlund on current-users (*) indicates there is
something wrong with bufq's.  I asked him to try a patch that uses an own
TAILQ for biodone and he reported:

    The patch seemed to do some good. I could write the DVD-RW several times
    without any crash. But then this happened:
    http://www.ludd.ltu.se/~nordlund/bufq_disksort_get.jpg

This crash looks like a corrupt b_actq field.
So there must be a lock problem with bufq's (at least with UDF file system).

(*) http://mail-index.netbsd.org/current-users/2008/09/11/msg004569.html
-- 
Juergen Hannken-Illjes - hannken%eis.cs.tu-bs.de@localhost - TU Braunschweig 
(Germany)


Home | Main Index | Thread Index | Old Index