On Sun, Sep 29, 2013 at 12:36:43AM +0200, Alan McKinnon wrote > The actual problem is better stated something like this: > > In the early stages of user-land setup (around the time when udev is > getting it's act together), arbitrary code can run and that code can be > in any arbitrary place, but there is no guarantee that that code is even > accessible at the point when it is needed. The actual cause of this mess > is the lack of standards on where to put stuff on Linux systems, and it > forms a classic bootstrap problem. > > There has only ever been one way around that problem - define an exact > entry point that is guaranteed to be in a specific state. For current > userland this effectively means that everything that has traditionally > been in bin, sbin and lib in / and /usr must be available as step 1. > Technically, you could include /var/lib/ and maybe even /opt in there. > but we can safely exclude those at this time as only a brain-dead moron > would ever put init-critical code there.
Separate /usr worked for many years, even with udev. The question I have is why is udev *NOW* monkeying around with a whole bunch of additional stuff before mounting partitions? If you have an NFS-mounted /usr, I can see needing to have network services running first. Ditto for /usr being in an LVM or encrypted partition, you need LVM and/or decryption running first. There is no excuse for anything else breaking a separate /usr. Then again, separate /usr isn't the first thing Kay Sievers has broken since he took over udev, and I wouldn't be surprised if he one day "just happens to break openrc"... https://lkml.org/lkml/2012/10/2/303 > From Linus Torvalds <> > Date Tue, 2 Oct 2012 09:33:03 -0700 > Subject Re: udev breakages - was: Re: Need of an ".async_probe()" > type of callback at driver's core - Was: Re: [PATCH] [media] drxk: > change it to use request_firmware_nowait() > On Tue, Oct 2, 2012 at 6:03 AM, Mauro Carvalho Chehab > <mche...@redhat.com> wrote: > > > I basically tried a few different approaches, including deferred > > probe(), as you suggested, and request_firmware_async(), as Kay > > suggested. > > Stop this crazy. FIX UDEV ALREADY, DAMMIT. > > Who maintains udev these days? Is it Lennart/Kai, as part of systemd? > > Lennart/Kai, fix the udev regression already. Lennart was the one > who brought up kernel ABI regressions at some conference, and if > you now you have the *gall* to break udev in an incompatible manner > that requires basically impossible kernel changes for the kernel to > "fix" the udev interface, I don't know what to say. > > "Two-faced lying weasel" would be the most polite thing I could say. > But it almost certainly will involve a lot of cursing. > > > However, for 3.7 or 3.8, I think that the better is to revert > > changeset 177bc7dade38b5 and to stop with udev's insanity of > > requiring asynchronous firmware load during device driver > > initialization. If udev's developers are not willing to do that, > > we'll likely need to add something at the drivers core to trick > > udev for it to think that the modules got probed before the probe > > actually happens. > > The fact is, udev made new - and insane - rules that are simply > *invalid*. Modern udev is broken, and needs to be fixed. > > I don't know where the problem started in udev, but the report I > saw was that udev175 was fine, and udev182 was broken, and would > deadlock if module_init() did a request_firmware(). That kind of > nested behavior is absolutely *required* to work, in order to not > cause idiotic problems for the kernel for no good reason. > > What kind of insane udev maintainership do we have? And can we fix it? -- Walter Dnes <waltd...@waltdnes.org> I don't run "desktop environments"; I run useful applications