On Tue, Feb 20 2001, Rajagopal Ananthanarayanan wrote:
> One reason for these problems could be that
> XFS pages are not balanced properly in memory.
> I've been experimenting with attaching buffers
> to all XFS pages & then let the flush_dirty_buffers
> methods take care of the write-outs. Attached is
> an experimental patch that might improve the situation.
> Please note that this code is work-in-progress so use
> it only on a test system.
Another reason could be that because xfs ships kio writes,
the elevator is effectively a noop. You don't do the merge
check of course, but then the insertion scan is also skipped.
So xfs ends up being a fifo request queueing.
> +#ifdef REQ_DEBUG
> +#define CHECK_REQ(req, i) \
> + do { \
> + if ((req->bh == req->bhtail && req->bh->b_reqnext) || \
> + (req->bh != req->bhtail && !req->bh->b_reqnext)) \
> + req_foo(req, el_ret, 1); \
> + } while (0);
> +
> +void
> +req_foo(struct request *req, int el_ret, int i)
> +{
> + printk("reqest 0x%p inconsistent (elret %d i %d)\n", req, el_ret, i);
> +}
To be honest, this looks very worthless. If we get the above wrong,
the machine will very quickly corrupt data and go down.
end_that_request_first would also complain about destroyed buffer
list, which is enough of a checkup.
--
Jens Axboe
|