multipathd: lock vectors during initial configuration
authorHannes Reinecke <hare@suse.de>
Tue, 8 Jan 2013 13:54:19 +0000 (14:54 +0100)
committerChristophe Varoqui <christophe.varoqui@opensvc.com>
Tue, 8 Jan 2013 23:29:46 +0000 (00:29 +0100)
During initial configuration the CLI thread is already running,
so we need to lock the vectors here to not race with the
'reconfigure' CLI command.

Signed-off-by: Hannes Reinecke <hare@suse.de>
multipathd/main.c

index 395307e..8917499 100644 (file)
@@ -1389,7 +1389,6 @@ reconfigure (struct vectors * vecs)
        struct config * old = conf;
        int retval = 1;
 
        struct config * old = conf;
        int retval = 1;
 
-       lock(vecs->lock);
        /*
         * free old map and path vectors ... they use old conf state
         */
        /*
         * free old map and path vectors ... they use old conf state
         */
@@ -1410,7 +1409,6 @@ reconfigure (struct vectors * vecs)
                retval = 0;
        }
 
                retval = 0;
        }
 
-       unlock(vecs->lock);
        return retval;
 }
 
        return retval;
 }
 
@@ -1641,9 +1639,9 @@ child (void * param)
        /*
         * fetch and configure both paths and multipaths
         */
        /*
         * fetch and configure both paths and multipaths
         */
-       lock(vecs->lock);
        running_state = DAEMON_CONFIGURE;
 
        running_state = DAEMON_CONFIGURE;
 
+       lock(vecs->lock);
        if (configure(vecs, 1)) {
                unlock(vecs->lock);
                condlog(0, "failure during configuration");
        if (configure(vecs, 1)) {
                unlock(vecs->lock);
                condlog(0, "failure during configuration");