Re: [PATCH kmod] tools/rmmod: fix garbled error message

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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





[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux