* [RFC][5/11][MANUX] Kernel compatibility : major/minor numbers @ 2014-04-15 13:42 Emmanuel Colbus 2014-04-15 15:02 ` Austin S Hemmelgarn 2014-04-15 15:06 ` One Thousand Gnomes 0 siblings, 2 replies; 8+ messages in thread From: Emmanuel Colbus @ 2014-04-15 13:42 UTC (permalink / raw) To: linux-kernel Now, back to the filesystem... In order to associate devices to their files, the Linux kernel uses their major and minor numbers. However, mine doesn't; instead, I've attributed myself a single group of values (major=0, minor=0, for both character-mode and block-mode special files), with the meaning (for the userspace) "you cannot identify the content of this file based on its major and minor numbers". As for my kernel, there is a syscall to associate such files with their proper peripherals (asper(2)), after which it internally identifies them using their inode and partition numbers; as for userspace, it has no choice but to use their names, as usual. Do you have any objection to my taking of these values? Emmanuel ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [RFC][5/11][MANUX] Kernel compatibility : major/minor numbers 2014-04-15 13:42 [RFC][5/11][MANUX] Kernel compatibility : major/minor numbers Emmanuel Colbus @ 2014-04-15 15:02 ` Austin S Hemmelgarn 2014-04-15 17:39 ` Emmanuel Colbus 2014-04-15 15:06 ` One Thousand Gnomes 1 sibling, 1 reply; 8+ messages in thread From: Austin S Hemmelgarn @ 2014-04-15 15:02 UTC (permalink / raw) To: Emmanuel Colbus, linux-kernel On 2014-04-15 09:42, Emmanuel Colbus wrote: > Now, back to the filesystem... > > In order to associate devices to their files, the Linux kernel uses > their major and minor numbers. However, mine doesn't; instead, I've > attributed myself a single group of values (major=0, minor=0, for both > character-mode and block-mode special files), with the meaning (for the > userspace) "you cannot identify the content of this file based on its > major and minor numbers". > > As for my kernel, there is a syscall to associate such files with their > proper peripherals (asper(2)), after which it internally identifies them > using their inode and partition numbers; as for userspace, it has no > choice but to use their names, as usual. > > Do you have any objection to my taking of these values? > According to Documentation/devices.txt: 0 Unnamed devices (e.g. non-device mounts) 0 = reserved as null device number Based on this, I would say that you are probably better off using one of the local use numbers (60-63 and 250-254 are reserved for local and experimental use) ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [RFC][5/11][MANUX] Kernel compatibility : major/minor numbers 2014-04-15 15:02 ` Austin S Hemmelgarn @ 2014-04-15 17:39 ` Emmanuel Colbus 0 siblings, 0 replies; 8+ messages in thread From: Emmanuel Colbus @ 2014-04-15 17:39 UTC (permalink / raw) To: Austin S Hemmelgarn; +Cc: linux-kernel Le 15/04/2014 17:02, Austin S Hemmelgarn a écrit : > On 2014-04-15 09:42, Emmanuel Colbus wrote: >> Now, back to the filesystem... >> >> In order to associate devices to their files, the Linux kernel uses >> their major and minor numbers. However, mine doesn't; instead, I've >> attributed myself a single group of values (major=0, minor=0, for both >> character-mode and block-mode special files), with the meaning (for the >> userspace) "you cannot identify the content of this file based on its >> major and minor numbers". >> >> As for my kernel, there is a syscall to associate such files with their >> proper peripherals (asper(2)), after which it internally identifies them >> using their inode and partition numbers; as for userspace, it has no >> choice but to use their names, as usual. >> >> Do you have any objection to my taking of these values? >> > > According to Documentation/devices.txt: > 0 Unnamed devices (e.g. non-device mounts) > 0 = reserved as null device number > > Based on this, I would say that you are probably better off using one of > the local use numbers (60-63 and 250-254 are reserved for local and > experimental use) > I see... Well, I think I'm going to take 254/0 for this then. Thank you! Emmanuel ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [RFC][5/11][MANUX] Kernel compatibility : major/minor numbers 2014-04-15 13:42 [RFC][5/11][MANUX] Kernel compatibility : major/minor numbers Emmanuel Colbus 2014-04-15 15:02 ` Austin S Hemmelgarn @ 2014-04-15 15:06 ` One Thousand Gnomes 2014-04-15 15:32 ` Emmanuel Colbus 1 sibling, 1 reply; 8+ messages in thread From: One Thousand Gnomes @ 2014-04-15 15:06 UTC (permalink / raw) To: Emmanuel Colbus; +Cc: linux-kernel > In order to associate devices to their files, the Linux kernel uses > their major and minor numbers. However, mine doesn't; instead, I've > attributed myself a single group of values (major=0, minor=0, for both > character-mode and block-mode special files), with the meaning (for the > userspace) "you cannot identify the content of this file based on its > major and minor numbers". If you are using the Linux ABI then you'll hit cases (in particular tty cases) where the ABI/API knows about major/minor numbers. In addition the standards and common sense together pretty much imply that you need each device to at least have a unique identifier. Finally you need major/minor numbers to NFS serve to a diskless client. Most Linux device numbering beyond that is basically dynamic so it probably does't matter that much for things you concoct - providing in som cases your /proc table of major numbers is right. ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [RFC][5/11][MANUX] Kernel compatibility : major/minor numbers 2014-04-15 15:06 ` One Thousand Gnomes @ 2014-04-15 15:32 ` Emmanuel Colbus 2014-04-15 15:40 ` One Thousand Gnomes 2014-04-15 20:19 ` Theodore Ts'o 0 siblings, 2 replies; 8+ messages in thread From: Emmanuel Colbus @ 2014-04-15 15:32 UTC (permalink / raw) To: One Thousand Gnomes; +Cc: linux-kernel Le 15/04/2014 17:06, One Thousand Gnomes a écrit : >> In order to associate devices to their files, the Linux kernel uses >> their major and minor numbers. However, mine doesn't; instead, I've >> attributed myself a single group of values (major=0, minor=0, for both >> character-mode and block-mode special files), with the meaning (for the >> userspace) "you cannot identify the content of this file based on its >> major and minor numbers". > > If you are using the Linux ABI then you'll hit cases (in particular tty > cases) where the ABI/API knows about major/minor numbers. Well, in fact, my kernel *can* handle major and minor numbers. That is, if you tell it "mknod /dev/efjkb c 8 6" , you'll actually get a device file with major/minor numbers 8/6. But then, the kernel simply disregards these values and waits for userspace to specify it what this device means. So it's completely possible to emulate Linux's behaviour with it. > In addition the > standards and common sense together pretty much imply that you need each > device to at least have a unique identifier. > Why is it? I mean, as far as userspace is concerned, they do have a unique identifier : their name. How would it be problematic that the software is unable to confirm that /dev/null is actually connected to the usual /dev/null kernel driver? I mean, it's supposed to trust the OS and its admin to have done their job properly, not second-guess them! (My idea behind this is to allow lying, for example by allowing the sysadmin to fake the content of, say, /dev/random, to an application he wants to test, or even deliberately sabotage. So, in my OS's logic, there's nothing wrong with emulating Linux's major/minor device identifiers, but of course, their reliability will be in the sysadmin's hands, so I thought I could simply make this clear by using explicitely unreliable identifiers.) > Finally you need major/minor numbers to NFS serve to a diskless client. Not a problem, but of course, the distant client will have the ability to connect anything it wants to any device it wants. > > Most Linux device numbering beyond that is basically dynamic so it > probably does't matter that much for things you concoct - providing in > som cases your /proc table of major numbers is right. > Ah... Uhhh... I've not implemented any such table, so I guess it's currently not. Whoops... Emmanuel ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [RFC][5/11][MANUX] Kernel compatibility : major/minor numbers 2014-04-15 15:32 ` Emmanuel Colbus @ 2014-04-15 15:40 ` One Thousand Gnomes 2014-04-15 20:19 ` Theodore Ts'o 1 sibling, 0 replies; 8+ messages in thread From: One Thousand Gnomes @ 2014-04-15 15:40 UTC (permalink / raw) To: Emmanuel Colbus; +Cc: linux-kernel > Why is it? I mean, as far as userspace is concerned, they do have a > unique identifier : their name. How would it be problematic that the No - a name is never a unique identifier in a Unix system. The fundamental object is the file handle. If I want to be able to answer the question "are these two file handles pointing to the same device" I need the major/minor to do so. Even if I know the name I don't know if two opens of the same name produced references to the same object, because another process may have changed it under me. Most code doesn't care. You can happily replace /dev/null with something else (or accidentally make it a file and then a year later wonder why your disk is full). Names are very much second class citizens. An object can have a file handle without a name, or with many names Alan ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [RFC][5/11][MANUX] Kernel compatibility : major/minor numbers 2014-04-15 15:32 ` Emmanuel Colbus 2014-04-15 15:40 ` One Thousand Gnomes @ 2014-04-15 20:19 ` Theodore Ts'o 2014-04-15 20:58 ` Emmanuel Colbus 1 sibling, 1 reply; 8+ messages in thread From: Theodore Ts'o @ 2014-04-15 20:19 UTC (permalink / raw) To: Emmanuel Colbus; +Cc: One Thousand Gnomes, linux-kernel On Tue, Apr 15, 2014 at 05:32:41PM +0200, Emmanuel Colbus wrote: > > In addition the > > standards and common sense together pretty much imply that you need each > > device to at least have a unique identifier. > > > > Why is it? I mean, as far as userspace is concerned, they do have a > unique identifier : their name. How would it be problematic that the > software is unable to confirm that /dev/null is actually connected to > the usual /dev/null kernel driver? I mean, it's supposed to trust the OS > and its admin to have done their job properly, not second-guess them! Backup programs will very often assume that if after two files, if stat(2)'ed, have the same st_ino and st_dev (which is a major/minor pair), then they are both hard links to the same underlying files. There are also programs that will relying on st_dev for the purpose of honoring find -xdev, and there are also programs that may try to do intelligent things by assuming that st_dev and st_ino togehter will uniquely name the same content. This gets tricky for remote file systems to get right, but file systems that don't at least try to get this right can end up triggering some very hard to debug userspace bugs. Transarc's Andrew File System (AFS) would occasionally break this property, back in the late 1990's, and it was the cause of Much Hilarity (except on the part of the programmers who had to figure out why certain programs were stuck looping forever while trying to analyze a long AFS pathname...) - Ted ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [RFC][5/11][MANUX] Kernel compatibility : major/minor numbers 2014-04-15 20:19 ` Theodore Ts'o @ 2014-04-15 20:58 ` Emmanuel Colbus 0 siblings, 0 replies; 8+ messages in thread From: Emmanuel Colbus @ 2014-04-15 20:58 UTC (permalink / raw) To: Theodore Ts'o, One Thousand Gnomes, linux-kernel Le 15/04/2014 22:19, Theodore Ts'o a écrit : > On Tue, Apr 15, 2014 at 05:32:41PM +0200, Emmanuel Colbus wrote: >>> In addition the >>> standards and common sense together pretty much imply that you need each >>> device to at least have a unique identifier. >>> >> >> Why is it? I mean, as far as userspace is concerned, they do have a >> unique identifier : their name. How would it be problematic that the >> software is unable to confirm that /dev/null is actually connected to >> the usual /dev/null kernel driver? I mean, it's supposed to trust the OS >> and its admin to have done their job properly, not second-guess them! > > Backup programs will very often assume that if after two files, if > stat(2)'ed, have the same st_ino and st_dev (which is a major/minor > pair), then they are both hard links to the same underlying files. > > There are also programs that will relying on st_dev for the purpose of > honoring find -xdev, and there are also programs that may try to do > intelligent things by assuming that st_dev and st_ino togehter will > uniquely name the same content. This gets tricky for remote file > systems to get right, but file systems that don't at least try to get > this right can end up triggering some very hard to debug userspace > bugs. Transarc's Andrew File System (AFS) would occasionally break > this property, back in the late 1990's, and it was the cause of Much > Hilarity (except on the part of the programmers who had to figure out > why certain programs were stuck looping forever while trying to > analyze a long AFS pathname...) Yes, in fact, I do respect the unicity of the st_dev field, so all these assumptions work. The only thing I'm doing is violating the assumption that, if a file has a certain major and minor numbers according to its st_dev field, then there is a special block file in /dev that has the same major and minor numbers and that corresponds to the storage peripheral where this file is stored. Emmanuel ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2014-04-15 20:58 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2014-04-15 13:42 [RFC][5/11][MANUX] Kernel compatibility : major/minor numbers Emmanuel Colbus 2014-04-15 15:02 ` Austin S Hemmelgarn 2014-04-15 17:39 ` Emmanuel Colbus 2014-04-15 15:06 ` One Thousand Gnomes 2014-04-15 15:32 ` Emmanuel Colbus 2014-04-15 15:40 ` One Thousand Gnomes 2014-04-15 20:19 ` Theodore Ts'o 2014-04-15 20:58 ` Emmanuel Colbus
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox