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>
This commit is contained in:
Denys Vlasenko 2010-09-25 14:37:06 +02:00
parent 0f2e278a8a
commit 5b3151c201

View File

@ -18,10 +18,13 @@ extern int delete_module(const char *module, unsigned flags);
extern int query_module(const char *name, int which, void *buf, size_t bufsize, size_t *ret); extern int query_module(const char *name, int which, void *buf, size_t bufsize, size_t *ret);
#define dbg1_error_msg(...) ((void)0) #if 1
#define dbg2_error_msg(...) ((void)0) # define dbg1_error_msg(...) ((void)0)
//#define dbg1_error_msg(...) bb_error_msg(__VA_ARGS__) # define dbg2_error_msg(...) ((void)0)
//#define dbg2_error_msg(...) bb_error_msg(__VA_ARGS__) #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" #define DEPFILE_BB CONFIG_DEFAULT_DEPMOD_FILE".bb"
@ -579,9 +582,8 @@ static void process_module(char *name, const char *cmdline_options)
/* rmmod? unload it by name */ /* rmmod? unload it by name */
if (is_rmmod) { if (is_rmmod) {
if (delete_module(name, O_NONBLOCK | O_EXCL) != 0 if (delete_module(name, O_NONBLOCK | O_EXCL) != 0) {
&& !(option_mask32 & OPT_q) if (!(option_mask32 & OPT_q))
) {
bb_perror_msg("remove '%s'", name); bb_perror_msg("remove '%s'", name);
goto ret; goto ret;
} }
@ -594,9 +596,9 @@ static void process_module(char *name, const char *cmdline_options)
if (!info) { if (!info) {
/* both dirscan and find_alias found nothing */ /* 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); 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; goto ret;
} }
@ -811,8 +813,8 @@ int modprobe_main(int argc UNUSED_PARAM, char **argv)
/* Load/remove modules. /* Load/remove modules.
* Only rmmod loops here, modprobe has only argv[0] */ * Only rmmod loops here, modprobe has only argv[0] */
do { do {
process_module(*argv++, options); process_module(*argv, options);
} while (*argv); } while (*++argv);
if (ENABLE_FEATURE_CLEAN_UP) { if (ENABLE_FEATURE_CLEAN_UP) {
IF_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE(free(options);) IF_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE(free(options);)