[ENBD] Doubled requests
Peter T. Breuer
ptb at it.uc3m.es
Tue Jan 13 12:14:36 MST 2004
"Also sprach Arne Wiebalck:"
> On Tue, 13 Jan 2004, Peter T. Breuer wrote:
> > > .. 22 23 24 25 25 26 27 ...
> > > ^^^^^
> > >
> > > or
> > >
> > > .. 22 23 24 25 26 27 28 ... 110 25 111 112 113 ...
> > > ^^ ^^
>
> It seems to be the first case, the writes to the same blocknr follow each
> other directly.
My first thoughts (but I *need* to see more data - the full request
structs) are:
What seems to be true is true - the same request goes out twice.
The driver has not notified a rollback, so no rollback has happened.
Can the same request be taken by two different daemons? In principle,
no - there are locks that guard against that. And on ack, one of the
acks would fail (but maybe silently, since that is not an error
condition). But maybe there is a bug in the code that allows a window
of opportunity for that.
You can test this initial hypothesis, even so little as it is.
It predicts that on a single processor machine, the problem will not
occur (if I am right in supposing that the problem is a spinlock
window, not a semaphore window - if it is a semaphore window, then
it can occur on UP too, but then we will know to look for a sleeping
function somewhere ...).
It also predicts that with one daemon running, the problem will not
occur, because there are no two daemons to take the same request.
I don't even see how it is possible for the same request to be treated
by two different daemons :-). The request is phisically moved from the
main queue to the daemon queue - not copied.
Peter
More information about the ENBD
mailing list