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