rmmod: Teach rmmod about builtin modules
authorJosh Boyer <jwboyer@redhat.com>
Fri, 15 Mar 2013 17:43:40 +0000 (13:43 -0400)
committerLucas De Marchi <lucas.de.marchi@gmail.com>
Mon, 18 Mar 2013 14:16:50 +0000 (11:16 -0300)
Currently modprobe -r will fail if a module is built in and report that it
is built in.  rmmod calls the same function to determine state but doesn't
handle the KMOD_MODULE_BUILTIN return code.  This leads to confusing errors
like this:

libkmod: kmod_module_get_holders: could not open '/sys/module/loop/holders': No such file or directory
Error: Module loop is in use

Fix this so that it actually reports the correct problem to the user.

tools/rmmod.c

index 7f2c2f6..bf5a408 100644 (file)
@@ -62,8 +62,14 @@ static void help(void)
 
 static int check_module_inuse(struct kmod_module *mod) {
        struct kmod_list *holders;
+       int state;
 
-       if (kmod_module_get_initstate(mod) == -ENOENT) {
+       state = kmod_module_get_initstate(mod);
+
+       if (state == KMOD_MODULE_BUILTIN) {
+               ERR("Module %s is builtin.\n", kmod_module_get_name(mod));
+               return -ENOENT;
+       } else if (state < 0) {
                ERR("Module %s is not currently loaded\n",
                                kmod_module_get_name(mod));
                return -ENOENT;