[dm-devel] 2.6.10-rc1-udm1: multipath work in progress
Alasdair G Kergon
agk at redhat.com
Mon Nov 8 21:43:31 UTC 2004
On Mon, Nov 08, 2004 at 05:56:14PM +0100, Lars Marowsky-Bree wrote:
> Probably doesn't need to be exported, but to avoid the potential
> infinite ping-pong between the PGs it's probably still needed as
> Alasdair pointed out.
Restating this:
A PG can be asked to initialise in two ways - say politely and rudely.
If you ask it politely it is allowed to respond saying "It would be best
if you asked the other PGs politely first - but ask me again rudely if
none of them take ownership and then I might be able to but with the
risk of a performance hit." [We record this response by setting
the 'bypass' flag against that PG.]
If you call it rudely, that response isn't allowed: it must either
initialise the path and start accepting I/O or else fail the path.
We ask each PG politely in priority order - then if necessary we ask
them all again rudely. If we still don't have a path, we either error
the I/O or we queue it and wait for guidance from userspace, depending
whether or not 'queue_if_no_path' is set. If userspace suspends the
table (e.g. to load a new one) any I/O queued in this way gets EIO.
But userspace can have it retried by reenabling paths. (NB The
order matters: the first path reenabled will get retried immediately,
implicitly switching to the first PG it's in.)
Once a PG is accepting I/O, all I/O continues going to that PG until:
all its paths fail; or
it asks to be bypassed in response to an error; or
userspace sends a 'switch_group' message to switch to another PG.
Alasdair
--
agk at redhat.com
More information about the dm-devel
mailing list