Subject: Re: [-next] system hangs likely due to "modules: Only return -EEXIST for modules that have finished loading"

From: Heiko Carstens <[email-masked]>
Date: Mon, 29 Apr 2019 07:55:20 +0200

On Sat, Apr 27, 2019 at 06:42:51AM -0400, Prarit Bhargava wrote:
> On 4/27/19 6:24 AM, Heiko Carstens wrote:
> 
> > 
> > diff --git a/kernel/module.c b/kernel/module.c
> > index 410eeb7e4f1d..48748cfec991 100644
> > --- a/kernel/module.c
> > +++ b/kernel/module.c
> > @@ -3585,6 +3585,7 @@ again:
> >  					       finished_loading(mod->name));
> >  			if (err)
> >  				goto out_unlocked;
> > +			cond_resched();
> Heiko, I'm testing on 2-cpu systems which appear to show the problem ~10% of the
> time.  On another system I backed out my original patch to set a baseline, and
> noticed that occasionally the time to boot the system doubles from ~4 seconds to
> 9 seconds.  Is this something you're also concerned with?

This _could_ be an issue, since I see the problem much more likely to
happen on systems with many devices (where many means only something
like 10 block devices). As far as I can tell it looks like
systemd/udevd tries to modprobe at the s390-trng module for each(!)
device.
I have no idea why it is doing that... however given that (failed)
module handling now sometimes takes more time, this might become a
real issue on system with several 1000s of block devices, which is a
realistic scenario at least on s390.