Subject: Re: 32 bit dev_t, Revision 2
To: Todd Vierling <tv@NetBSD.ORG>
From: Chris G. Demetriou <cgd@pa.dec.com>
List: tech-kern
Date: 01/11/1998 17:12:49
> : Could you explain what kernel ABIs you are preserving by this
> : mechanism? stat() already does 32 bit dev_t's, so there is no real
> : userland impact to what you are doing (no userland stuff interprets
> : dev_t numbers except for stuff like MAKEDEV which doesn't count).
>
> Programs who find their tty by fstat()ing stdin and searching /dev for the
> tty, stat()ing each file, and comparing the dev_t.
Except, those device nodea _are different_. I can point you to
programs that i'd like to have work, that do this kind of thing.
If you're updating your kernel to support the new-format of device
nodes, then you should soon after (as soon as you think it's safe)
update your device nodes. That's a law of system upgrades.
For a while, while you're not sure it's safe, you might encounter a
bit of lossage with the type of program you describe, but _that's_ the
law of running -current. 8-)
> Root device "mount -u" checking (making sure /dev/???a matches the dev_t of
> the boot-time root device).
This is done in-kernel, right? (Checking the sources to be sure, it
seems so.) If so, it doesn't count.
> Two examples; I'm sure there are more.
Actually, only one, that i'm not sure I buy that one as a good reason.
Care to try for more? 8-)
> : We want to be able to boot a new kernel on a machine with an old /dev,
> : but I don't see what else here is critical.
>
> I can lift just about all of that if we determine that the first thing a
> user must do after the committed changes is re-run MAKEDEV with a new
> MAKEDEV script and mknod binary. Without this, we have to ensure that
> binaries can do stat()-versus-fstat() checks.
"No conversion, ever." 'fstat' of your tty device should give the
real device node number, not a converted one.
> It boils down to: if something does a fstat*() and compares it with the
> dev_t in a stat(), it'll fail if we use the old device nodes,
'see above.'
> or new
> device nodes and a binary of 1.2 or earlier (or a COMPAT_<someOS> binary
> that uses dev_t's < 32 bits).
Emulations for environments which don't support 32-bit device nodes
have to do something special, regardless of what's done in the rest of
the kernel.
Why saddle the rest of the kernel with that brokenness?
> : > 14. mknod(8) will be introduced to a new command line option to create "old"
> : > style device nodes.
> :
> : Why?
>
> Netbooting older NetBSD machines, that users do not yet wish to upgrade. I
> gave the alternative, too, of specifying nbitsmajor and nbitsminor at will.
Do nbitsmajor + nbitsminor.
Do 32-bit opaque tokens.
Don't stuff unknowable amounts of converstion code into mknod.
cgd