On Sep 18, 2023, at 7:51 AM, Christian Brauner <brauner@xxxxxxxxxx> wrote: > > >> The type and subtype are naturally limited to sane sizes, those are >> not an issue. > > What's the limit for fstype actually? I don't think there is one. > There's one by chance but not by design afaict? > > Maybe crazy idea: > That magic number thing that we do in include/uapi/linux/magic.h > is there a good reason for this or why don't we just add a proper, > simple enum: > > enum { > FS_TYPE_ADFS 1 > FS_TYPE_AFFS 2 > FS_TYPE_AFS 3 > FS_TYPE_AUTOFS 4 > FS_TYPE_EXT2 5 > FS_TYPE_EXT3 6 > FS_TYPE_EXT4 7 > . > . > . > FS_TYPE_MAX > } > > that we start returning from statmount(). We can still return both the > old and the new fstype? It always felt a bit odd that fs developers to > just select a magic number. Yes, there is a very good reason that there isn't an enum for filesystem type, which is because this API would be broken if it encounters any filesystem that is not listed there. Often a single filesystem driver in the kernel will have multiple different magic numbers to handle versions, endianness, etc. Having a 32-bit magic number allows decentralized development with low chance of collision, and using new filesystems without having to patch every kernel for this new API to work with that filesystem. Also, filesystems come and go (though more slowly) over time, and keeping the full list of every filesystem ever developed in the kernel enum would be a headache. The field in the statmnt() call would need to be at a fixed-size 32-bit value in any case, so having it return the existing magic will "just work" because userspace tools already know and understand these magic values, while introducing an in-kernel enum would be broken for multiple reasons. Cheers, Andreas
Attachment:
signature.asc
Description: Message signed with OpenPGP