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 <[email protected]> > --- > 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
