Hello,

I warned you : this is too ugly to live ... well, you asked.
I left the "if(1) {}" to reverse the patch more easily :)

Do you think this is conceptualy correct ?

--- dm-mpath.c.orig     2004-01-20 23:05:25.000000000 +0100
+++ dm-mpath.c  2004-01-20 23:15:30.000000000 +0100
@@ -717,7 +717,15 @@
                r = __remap_io(m, bio);
                spin_unlock_irqrestore(&m->path_lock, flags);

-               if (!r) {
+               /*
+                * Queue all errored bio to kmpathd.
+                * Multipaths can have no valid path for a short
+                * failover period : process submitting IO should
+                * not die during the failover.
+                * FIXME : limit the failed_ios size and/or IO
+                * buffering duration
+                */
+               if (1) {
                        /* queue for the daemon to resubmit */
                        spin_lock_irqsave(&m->failed_lock, flags);
                        bio_list_add(&m->failed_ios, bio);

regards,
cvaroqui