Re: [RFC PATCH 2/3] add statmnt(2) syscall

From: Andreas Dilger
Date: Mon Sep 18 2023 - 16:58:16 EST


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