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. > > 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.lepennec@xxxxxxx> > > --- > > 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