]> git.ipfire.org Git - thirdparty/kmod.git/commitdiff
libkmod-module: probe: return -EEXIST if told to stop on already loaded
authorLucas De Marchi <lucas.demarchi@profusion.mobi>
Tue, 31 Jan 2012 13:29:06 +0000 (11:29 -0200)
committerLucas De Marchi <lucas.demarchi@profusion.mobi>
Tue, 31 Jan 2012 16:08:57 +0000 (14:08 -0200)
libkmod/libkmod-module.c
libkmod/libkmod.h

index d6d081092a62c3582f45abe7d75313b2d2155d38..948690a689ba5fd79e470e9e9e3382535af4dd88 100644 (file)
@@ -1186,7 +1186,7 @@ KMOD_EXPORT int kmod_module_probe_insert_module(struct kmod_module *mod,
                                        state == KMOD_MODULE_COMING ||
                                        state == KMOD_MODULE_BUILTIN) {
                                if (m == mod && (flags & KMOD_PROBE_STOP_ON_ALREADY_LOADED)) {
-                                       err = KMOD_PROBE_STOP_ON_ALREADY_LOADED;
+                                       err = -EEXIST;
                                        break;
                                }
 
@@ -1206,8 +1206,8 @@ KMOD_EXPORT int kmod_module_probe_insert_module(struct kmod_module *mod,
 
                /*
                 * Treat "already loaded" error. If we were told to stop on
-                * already loaded and the module being loaded is not a
-                * softdep, bail out. Otherwise, just ignore and continue.
+                * already loaded and the module being loaded is not a softdep
+                * or dep, bail out. Otherwise, just ignore and continue.
                 *
                 * We need to check here because of race conditions. We
                 * checked first if module was already loaded but it may have
@@ -1215,12 +1215,12 @@ KMOD_EXPORT int kmod_module_probe_insert_module(struct kmod_module *mod,
                 * insert it.
                 */
                if (err == -EEXIST && m == mod &&
-                               (flags & KMOD_PROBE_STOP_ON_ALREADY_LOADED)) {
-                       err = KMOD_PROBE_STOP_ON_ALREADY_LOADED;
+                               (flags & KMOD_PROBE_STOP_ON_ALREADY_LOADED))
                        break;
-               }
 
-               if (err < 0 && err != -EEXIST)
+               if (err == -EEXIST)
+                       err = 0;
+               else if (err < 0)
                        break;
        }
 
index 932279c0817730930cfc683a1a348e6c9adab3cf..a530a29707f3a43af85ca6daca8a7c38a8584d2b 100644 (file)
@@ -130,12 +130,12 @@ enum kmod_probe {
        KMOD_PROBE_IGNORE_COMMAND =             0x00004,
        KMOD_PROBE_IGNORE_LOADED =              0x00008,
        KMOD_PROBE_DRY_RUN =                    0x00010,
+       KMOD_PROBE_STOP_ON_ALREADY_LOADED =     0x00020,
 
        /* codes below can be used in return value, too */
        KMOD_PROBE_APPLY_BLACKLIST_ALL =        0x10000,
        KMOD_PROBE_APPLY_BLACKLIST =            0x20000,
        KMOD_PROBE_STOP_ON_COMMAND =            0x40000,
-       KMOD_PROBE_STOP_ON_ALREADY_LOADED =     0x80000,
 };
 
 /*