[dm-devel] release 0.4.4 ?

christophe varoqui christophe.varoqui at free.fr
Wed Apr 20 22:34:25 UTC 2005


On jeu, 2005-04-21 at 00:04 +0200, christophe varoqui wrote:
> On mer, 2005-04-20 at 23:52 +0200, Lars Marowsky-Bree wrote:
> > On 2005-04-20T23:38:39, christophe varoqui <christophe.varoqui at free.fr> wrote:
> > 
> > > I can't reproduce that at OSDL :
> > > 
> > > * no config file
> > > * IBM 3542 (tur/group_by_serial/no hwh/no feature)
> > > * mp-tools 0.4.4-pre17
> > 
> > That means you're not using a priority callout, which is what the bug is
> > about, right?
> > 
> > Anyway, I'll try -pre17 (or maybe -pre18 by then ;-) tomorrow.
> > 
> oh, so you use the group_by_prio pgpolicy ?
> Indeed, the fallback prio to 1 is annoying in that scenario.
> 
> I'll see how to propagate the error to prevent a map reloading in case
> of prio callout error.
> 
> Regards,

That should do the trick :

* errors on prio callout are stored as a negative prio value
* multipath/main.c:coalesce_path() marks maps untouchable if they
contain a path with negative prio

diff -urN multipath-tools-0.4.4-pre17/libmultipath/discovery.c
multipath-tools-0.4.4-pre18/libmultipath/discovery.c
--- multipath-tools-0.4.4-pre17/libmultipath/discovery.c
2005-04-20 12:57:10.000000000 -0700
+++ multipath-tools-0.4.4-pre18/libmultipath/discovery.c
2005-04-20 15:35:29.676340096 -0700
@@ -481,10 +481,11 @@
                select_getprio(pp);

                if (apply_format(pp->getprio, &buff[0], pp)) {
-                       pp->priority = 1;
+                       condlog(0, "error formatting prio callout
command");
+                       pp->priority = -1;
                } else if (execute_program(buff, prio, 16)) {
-                       condlog(3, "error calling out %s", buff);
-                       pp->priority = 1;
+                       condlog(0, "error calling out %s", buff);
+                       pp->priority = -1;
                } else
                        pp->priority = atoi(prio);

@@ -498,9 +499,10 @@
                select_getuid(pp);

                if (apply_format(pp->getuid, &buff[0], pp)) {
+                       condlog(0, "error formatting uid callout
command");
                        memset(pp->wwid, 0, WWID_SIZE);
                } else if (execute_program(buff, pp->wwid, WWID_SIZE)) {
-                       condlog(3, "error calling out %s", buff);
+                       condlog(0, "error calling out %s", buff);
                        memset(pp->wwid, 0, WWID_SIZE);
                }
                condlog(3, "uid = %s (callout)", pp->wwid);
diff -urN multipath-tools-0.4.4-pre17/multipath/main.c
multipath-tools-0.4.4-pre18/multipath/main.c
--- multipath-tools-0.4.4-pre17/multipath/main.c        2005-04-20
13:36:44.000000000 -0700
+++ multipath-tools-0.4.4-pre18/multipath/main.c        2005-04-20
15:41:35.135781816 -0700
@@ -710,6 +710,9 @@
                mpp->size = pp1->size;
                mpp->paths = vector_alloc();

+               if (pp1->priority < 0)
+                       mpp->action = ACT_NOTHING;
+
                if (!mpp->paths)
                        return 1;

@@ -732,6 +735,9 @@
                                     mpp->wwid);
                                mpp->action = ACT_NOTHING;
                        }
+                       if (pp2->priority < 0)
+                               mpp->action = ACT_NOTHING;
+
                        if (store_path(mpp->paths, pp2))
                                return 1;
                }

-- 
christophe varoqui <christophe.varoqui at free.fr>





More information about the dm-devel mailing list