Morning all,
Jens Axboe did most of the work on this; I only stressed it a bit and fixed
some bugs in it. As he is currently on vacation, I would still like to present
it to you and solicit comments on it.
It compiles and passes my test script, so it can't be all wrong, I hope ;-) It
certainly isn't worse than the current code.
I've also done a small patch to mdadm to allow access to the new functionality
provided.
The enhancements include:
- Read & write balancing with front and tail merging of requests, otherwise
picks least used path. (Done by Jens)
- Paths can be set to either active or spare; a spare path will be used in
place of a failed active path but otherwise be disabled.
- A path can be manually "cleared" (marked non-faulty). This is explicitly
only implemented for multipathing because it makes no sense for the other
RAID levels where this is definetely the job of the recovery process.
Automatic reprobing of failed paths was deliberately not implemented; this
can be done in user space, and the kernel shouldn't use live requests to do
so.
- Some special cases in md.c for multipath were removed / fixed.
- md will now enable all paths it finds during autorun. This leads to "funny"
messages ("Device changed to [07:04] from [00:00]" etc), but they can be
safely ignored.
- Nested md devices are now also auto-detected; important for RAID1 on top of
multipath for example, required for a true disaster resilient configuration.
However, this isn't yet working perfectly and is subject to ongoing work
;-)
(If anyone has hints here, I would be grateful)
- Killed some code which made no sense for the multipath module; ie, code
related to the md recovery.
- The downside: We needed to add 3 additional ioctl()s for this.
Patch attached.
Of course, this is still subject to the general comments about the block
device error handling in 2.4.
Sincerely,
Lars Marowsky-Br?e <[email protected]>
--
Immortality is an adequate definition of high availability for me.
--- Gregory F. Pfister