2003-03-20 22:13:39

by Andries E. Brouwer

[permalink] [raw]
Subject: Re: major/minor split

> There is a point I'd like to get clear: where should the
> 16bit<->32bit dev_t conversion happen?

I am not sure I understand the question, but if I do
the answer is "nowhere", there is no conversion
(other than the lengthening that happens when one
casts an unsigned short to an unsigned int).

For dev_t (8,1) is 0x00000801, but (8,256) is 0x00080100.
(In case of a 16+16 split. Not that I advocate that,
it is just easy talking.)

For kdev_t (8,1) is 0x00080001 and (8,256) is 0x00080100.
So kdev_t allows simple fast composition and decomposition,
but is restricted to the kernel.
While dev_t requires a conditional, since it has to remain
compatible with the old 8+8 userspace.

> how can software create nodes for a specific device?

You do not mean using mknod?

Andries


2003-03-20 23:14:48

by Roman Zippel

[permalink] [raw]
Subject: Re: major/minor split

Hi,

On Thu, 20 Mar 2003 [email protected] wrote:

> > There is a point I'd like to get clear: where should the
> > 16bit<->32bit dev_t conversion happen?
>
> I am not sure I understand the question, but if I do
> the answer is "nowhere", there is no conversion
> (other than the lengthening that happens when one
> casts an unsigned short to an unsigned int).

Let's look at ext2:

if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode))
raw_inode->i_block[0] = cpu_to_le32(kdev_t_to_nr(inode->i_rdev));

Should the saved device number be a 16bit or a 32bit device number? Has
the user any control over it?

> > how can software create nodes for a specific device?
>
> You do not mean using mknod?

I mean via mknod, e.g. if the user has a major/minor number, how should it
be converted to a dev_t number?

bye, Roman