On Fri, Mar 28, 2025 at 12:36:25PM +0100, Yannick Le Pennec wrote:
On Thu, 2025-03-27 at 23:13 -0500, Lucas De Marchi wrote:
On Mon, Mar 24, 2025 at 06:35:53PM +0100, Yannick Le Pennec wrote:
> a6f9cd0 ("tools/rmmod: consistently use ERR logging facility") fixed
> the split between syslog and stderr of various error message substrings
> by calling the ERR macro instead of writing directly to stderr, but in
> doing so also completely mangled the output because the ERR macro
> decorates its arguments:
>
> $ rmmod iwlwifi
> rmmod: ERROR: Module iwlwifi is in use by:rmmod: ERROR: iwlmvmrmmod:
ERROR:
>
> And in syslog:
>
> $ rmmod -s iwlwifi
> 2025-03-24T17:22:34.878318+01:00 mangolassi rmmod: ERROR: Module iwlwifi
is in use by:
> 2025-03-24T17:22:34.889145+01:00 mangolassi rmmod: ERROR: iwlmvm
> 2025-03-24T17:22:34.889224+01:00 mangolassi rmmod: ERROR:
>
> This commit fixes that by building the holder names list with a strbuf
> and then passes the whole thing at once to ERR.
doesn't that mean the syslog version will only have 1 ERROR now?
Yes indeed but I think that's the right behaviour. Prior to a6f9cd0 there was
only 1 error going to syslog (because the rest of the line was sent to stderr
erroneously). With a6f9cd0 N + 2 (with N = number of holders) error lines go to
syslog, which I don't think is what was intended? After all the stderr message
itself was always one line, and furthermore the lone ERR("\n") was odd.
oh... ok. I missed the fact that you dropped the newline and just added
a space as sep.
Applied, thanks.
Lucas De Marchi
anyway, queued for CI at https://github.com/kmod-project/kmod/pull/328
thanks
Lucas De Marchi
>
> Fixes: a6f9cd0 ("tools/rmmod: consistently use ERR logging facility")
> Signed-off-by: Yannick Le Pennec <yannick.lepen...@live.fr>
> ---
> tools/rmmod.c | 11 +++++++----
> 1 file changed, 7 insertions(+), 4 deletions(-)
>
> diff --git a/tools/rmmod.c b/tools/rmmod.c
> index 962d850..61f2e00 100644
> --- a/tools/rmmod.c
> +++ b/tools/rmmod.c
> @@ -15,6 +15,7 @@
> #include <sys/types.h>
>
> #include <shared/macro.h>
> +#include <shared/strbuf.h>
>
> #include <libkmod/libkmod.h>
>
> @@ -63,16 +64,18 @@ static int check_module_inuse(struct kmod_module *mod)
>
> holders = kmod_module_get_holders(mod);
> if (holders != NULL) {
> + DECLARE_STRBUF_WITH_STACK(buf, 128);
> struct kmod_list *itr;
>
> - ERR("Module %s is in use by:", kmod_module_get_name(mod));
> -
> kmod_list_foreach(itr, holders) {
> struct kmod_module *hm = kmod_module_get_module(itr);
> - ERR(" %s", kmod_module_get_name(hm));
> + strbuf_pushchar(&buf, ' ');
> + strbuf_pushchars(&buf, kmod_module_get_name(hm));
> kmod_module_unref(hm);
> }
> - ERR("\n");
> +
> + ERR("Module %s is in use by:%s\n", kmod_module_get_name(mod),
> + strbuf_str(&buf));
>
> kmod_module_unref_list(holders);
> return -EBUSY;
> --
> 2.49.0