]> git.ipfire.org Git - thirdparty/kmod.git/commitdiff
tools: Print a message if refcnt attribute is missing
authorEzequiel Garcia <ezequiel@collabora.com>
Fri, 8 Mar 2019 20:39:07 +0000 (17:39 -0300)
committerLucas De Marchi <lucas.demarchi@intel.com>
Fri, 8 Mar 2019 21:06:52 +0000 (13:06 -0800)
Currently, check_module_inuse returns a wrong user message
if the kernel is built without module unloading support.

Fix it by returning a more specific error, in case 'refcnt'
attribute is missing.

tools/remove.c
tools/rmmod.c

index 07e2cc0c83cdc9b57c91a04538b6258413d00d23..387ef0ed17ce04c1fec9d451fb6f674af67c6ff6 100644 (file)
@@ -44,7 +44,7 @@ static void help(void)
 
 static int check_module_inuse(struct kmod_module *mod) {
        struct kmod_list *holders;
-       int state;
+       int state, ret;
 
        state = kmod_module_get_initstate(mod);
 
@@ -74,12 +74,15 @@ static int check_module_inuse(struct kmod_module *mod) {
                return -EBUSY;
        }
 
-       if (kmod_module_get_refcnt(mod) != 0) {
+       ret = kmod_module_get_refcnt(mod);
+       if (ret > 0) {
                ERR("Module %s is in use\n", kmod_module_get_name(mod));
                return -EBUSY;
+       } else if (ret == -ENOENT) {
+               ERR("Module unloading is not supported\n");
        }
 
-       return 0;
+       return ret;
 }
 
 static int do_remove(int argc, char *argv[])
index bcdea4c572627ef58bb1a2e9333233a10f1068d2..3942e7b439bdaaf58d7bb649b0806ce298ebba2f 100644 (file)
@@ -63,7 +63,7 @@ static void help(void)
 
 static int check_module_inuse(struct kmod_module *mod) {
        struct kmod_list *holders;
-       int state;
+       int state, ret;
 
        state = kmod_module_get_initstate(mod);
 
@@ -93,12 +93,15 @@ static int check_module_inuse(struct kmod_module *mod) {
                return -EBUSY;
        }
 
-       if (kmod_module_get_refcnt(mod) != 0) {
+       ret = kmod_module_get_refcnt(mod);
+       if (ret > 0) {
                ERR("Module %s is in use\n", kmod_module_get_name(mod));
                return -EBUSY;
+       } else if (ret == -ENOENT) {
+               ERR("Module unloading is not supported\n");
        }
 
-       return 0;
+       return ret;
 }
 
 static int do_rmmod(int argc, char *argv[])