modprobe-simple; do not error out on "rmmod module" if module is unloaded ok

...even if it wasn't found in /lib/modules/VER/

Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
diff --git a/modutils/modprobe-small.c b/modutils/modprobe-small.c
index 05f2c34..e0d251e 100644
--- a/modutils/modprobe-small.c
+++ b/modutils/modprobe-small.c
@@ -18,10 +18,13 @@
 extern int query_module(const char *name, int which, void *buf, size_t bufsize, size_t *ret);
 
 
-#define dbg1_error_msg(...) ((void)0)
-#define dbg2_error_msg(...) ((void)0)
-//#define dbg1_error_msg(...) bb_error_msg(__VA_ARGS__)
-//#define dbg2_error_msg(...) bb_error_msg(__VA_ARGS__)
+#if 1
+# define dbg1_error_msg(...) ((void)0)
+# define dbg2_error_msg(...) ((void)0)
+#else
+# define dbg1_error_msg(...) bb_error_msg(__VA_ARGS__)
+# define dbg2_error_msg(...) bb_error_msg(__VA_ARGS__)
+#endif
 
 #define DEPFILE_BB CONFIG_DEFAULT_DEPMOD_FILE".bb"
 
@@ -579,10 +582,9 @@
 
 	/* rmmod? unload it by name */
 	if (is_rmmod) {
-		if (delete_module(name, O_NONBLOCK | O_EXCL) != 0
-		 && !(option_mask32 & OPT_q)
-		) {
-			bb_perror_msg("remove '%s'", name);
+		if (delete_module(name, O_NONBLOCK | O_EXCL) != 0) {
+			if (!(option_mask32 & OPT_q))
+				bb_perror_msg("remove '%s'", name);
 			goto ret;
 		}
 		/* N.B. we do not stop here -
@@ -594,9 +596,9 @@
 
 	if (!info) {
 		/* both dirscan and find_alias found nothing */
-		if (applet_name[0] != 'd') /* it wasn't depmod */
+		if (!is_rmmod && applet_name[0] != 'd') /* it wasn't rmmod or depmod */
 			bb_error_msg("module '%s' not found", name);
-//TODO: _and_die()?
+//TODO: _and_die()? or should we continue (un)loading modules listed on cmdline?
 		goto ret;
 	}
 
@@ -811,8 +813,8 @@
 	/* Load/remove modules.
 	 * Only rmmod loops here, modprobe has only argv[0] */
 	do {
-		process_module(*argv++, options);
-	} while (*argv);
+		process_module(*argv, options);
+	} while (*++argv);
 
 	if (ENABLE_FEATURE_CLEAN_UP) {
 		IF_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE(free(options);)