Fixup some cases of "QM_MODULES: not implemented" for both
authorEric Andersen <andersen@codepoet.org>
Tue, 13 Jul 2004 00:09:34 +0000 (00:09 -0000)
committerEric Andersen <andersen@codepoet.org>
Tue, 13 Jul 2004 00:09:34 +0000 (00:09 -0000)
lsmod and rmmod when using 2.6.x module support
 -Erik

modutils/Config.in
modutils/rmmod.c

index 3b5c1e37a5f039d86f30f9ab3dbb61a35b822f9d..05ff8c9d271471e6f62f753017ac197104a6484c 100644 (file)
@@ -81,13 +81,7 @@ config CONFIG_LSMOD
          lsmod is used to display a list of loaded modules.
 
 config CONFIG_FEATURE_QUERY_MODULE_INTERFACE
-       bool "  Support lsmod query_module interface (add 638 bytes)"
-       default y
-       depends on CONFIG_LSMOD && ( CONFIG_FEATURE_2_4_MODULES || CONFIG_FEATURE_2_6_MODULES )
-       help
-         This will provide some extra information about each module when
-         running lsmod.  The fields provided are address, size, flags and
-         usage count.
+       depends on CONFIG_FEATURE_2_4_MODULES && !CONFIG_FEATURE_2_6_MODULES
 
 config CONFIG_MODPROBE
        bool "modprobe"
index c8390455158145e7deca3c47c36c15be2ed6aa5d..5576eb6a1fece7cb8acaf5b5f51cf03deceb7005 100644 (file)
@@ -34,9 +34,11 @@ extern int rmmod_main(int argc, char **argv)
        int n, ret = EXIT_SUCCESS;
        size_t nmod = 0; /* number of modules */
        size_t pnmod = -1; /* previous number of modules */
+       unsigned int flags = O_NONBLOCK|O_EXCL;
+#ifdef CONFIG_FEATURE_QUERY_MODULE_INTERFACE
        void *buf; /* hold the module names which we ignore but must get */
        size_t bufsize = 0;
-       unsigned int flags = O_NONBLOCK|O_EXCL;
+#endif
 
        /* Parse command line. */
        while ((n = getopt(argc, argv, "a")) != EOF) {
@@ -50,17 +52,24 @@ extern int rmmod_main(int argc, char **argv)
                        case 'a':
                                /* Unload _all_ unused modules via NULL delete_module() call */
                                /* until the number of modules does not change */
+#ifdef CONFIG_FEATURE_QUERY_MODULE_INTERFACE
                                buf = xmalloc(bufsize = 256);
+#endif
                                while (nmod != pnmod) {
-                                       if (syscall(__NR_delete_module, NULL, flags) < 0)
+                                       if (syscall(__NR_delete_module, NULL, flags) < 0) {
+                                               if (errno==EFAULT)
+                                                       return(ret);
                                                bb_perror_msg_and_die("rmmod");
+                                       }
                                        pnmod = nmod;
+#ifdef CONFIG_FEATURE_QUERY_MODULE_INTERFACE
                                        /* 1 == QM_MODULES */
                                        if (my_query_module(NULL, 1, &buf, &bufsize, &nmod)) {
                                                bb_perror_msg_and_die("QM_MODULES");
                                        }
+#endif
                                }
-#ifdef CONFIG_FEATURE_CLEAN_UP
+#if defined CONFIG_FEATURE_CLEAN_UP && CONFIG_FEATURE_QUERY_MODULE_INTERFACE
                                free(buf);
 #endif
                                return EXIT_SUCCESS;