add f_flags to struct statfs(64)
Subsystems (4)
PATCH 2/2 add f_flags to struct statfs(64)
Add a flags field to help glibc implementing statvfs(3) efficiently.
We copy the flag values from glibc, and add a new ST_VALID flag to denote that f_flags is implemented.
arch/mips/include/asm/statfs.h +8 -4
@@ -33,7 +33,8 @@ struct statfs {/* Linux specials */ __kernel_fsid_t f_fsid;long f_namelen; -long f_spare[6 ]; +long f_flags; +long f_spare[5 ]; };#if (_MIPS_SIM == _MIPS_SIM_ABI32) || (_MIPS_SIM == _MIPS_SIM_NABI32)
@@ -53,7 +54,8 @@ struct statfs64 {__u64 f_bavail;__kernel_fsid_t f_fsid;__u32 f_namelen; - __u32 f_spare[6]; +__u32 f_flags; + __u32 f_spare[5]; };#endif /* _MIPS_SIM == _MIPS_SIM_ABI32 */
@@ -73,7 +75,8 @@ struct statfs64 { /* Same as struct st/* Linux specials */ __kernel_fsid_t f_fsid;long f_namelen; -long f_spare[6 ]; +long f_flags; +long f_spare[5 ]; };struct compat_statfs64 {
@@ -88,7 +91,8 @@ struct compat_statfs64 {__u64 f_bavail;__kernel_fsid_t f_fsid;__u32 f_namelen; - __u32 f_spare[6]; +__u32 f_flags; + __u32 f_spare[5]; };#endif /* _MIPS_SIM == _MIPS_SIM_ABI64 */
arch/s390/include/asm/statfs.h +6 -3
@@ -33,7 +33,8 @@ struct statfs {__kernel_fsid_t f_fsid;int f_namelen;int f_frsize; -int f_spare[5 ]; +int f_flags; +int f_spare[4 ]; };struct statfs64 {
@@ -47,7 +48,8 @@ struct statfs64 {__kernel_fsid_t f_fsid;int f_namelen;int f_frsize; -int f_spare[5 ]; +int f_flags; +int f_spare[4 ]; };struct compat_statfs64 {
@@ -61,7 +63,8 @@ struct compat_statfs64 {__kernel_fsid_t f_fsid;__u32 f_namelen;__u32 f_frsize; - __u32 f_spare[5]; +__u32 f_flags; + __u32 f_spare[4]; };#endif /* __s390x__ */
include/asm-generic/statfs.h +5 -2
@@ -33,7 +33,8 @@ struct statfs {__kernel_fsid_t f_fsid;__statfs_word f_namelen;__statfs_word f_frsize; -__statfs_word f_spare[5 ]; +__statfs_word f_flags; +__statfs_word f_spare[4 ]; };/*
@@ -55,7 +56,8 @@ struct statfs64 {__kernel_fsid_t f_fsid;__statfs_word f_namelen;__statfs_word f_frsize; -__statfs_word f_spare[5 ]; +__statfs_word f_flags; +__statfs_word f_spare[4 ]; }ARCH_PACK_STATFS64 ;/*
@@ -77,6 +79,7 @@ struct compat_statfs64 {__kernel_fsid_t f_fsid;__u32 f_namelen;__u32 f_frsize; +__u32 f_flags[5 ];__u32 f_spare[5 ]; }ARCH_PACK_COMPAT_STATFS64 ;
include/linux/statfs.h +23 -2
@@ -2,7 +2,6 @@#define _LINUX_STATFS_H#include <linux/types.h> -#include <asm/statfs.h> struct kstatfs {
@@ -16,7 +15,29 @@ struct kstatfs {__kernel_fsid_t f_fsid;long f_namelen;long f_frsize; - long f_spare[5]; +long f_flags; + long f_spare[4]; }; +/* +* Definitions for the flag in f_flag. +* +* Generally these flags are equivalent to the MS_ flags used in the mount +* ABI. The exception is ST_VALID which has the same value as MS_REMOUNT +* which doesn't make any sense for statfs. +*/ +#define ST_RDONLY 0x0001/* mount read-only */ +#define ST_NOSUID 0x0002/* ignore suid and sgid bits */ +#define ST_NODEV 0x0004/* disallow access to device special files */ +#define ST_NOEXEC 0x0008/* disallow program execution */ +#define ST_SYNCHRONOUS 0x0010/* writes are synced at once */ +#define ST_VALID 0x0020/* f_flags support is implemented */ +#define ST_MANDLOCK 0x0040/* allow mandatory locks on an FS */ +/* 0x0080 used for ST_WRITE in glibc */ +/* 0x0100 used for ST_APPEND in glibc */ +/* 0x0200 used for ST_IMMUTABLE in glibc */ +#define ST_NOATIME 0x0400/* do not update access times */ +#define ST_NODIRATIME 0x0800/* do not update directory access times */ +#define ST_RELATIME 0x1000/* update atime relative to mtime/ctime */ +#endif
fs/statfs.c +37 -1
@@ -2,11 +2,40 @@#include <linux/module.h> #include <linux/fs.h> #include <linux/file.h> +#include <linux/mount.h> #include <linux/namei.h> #include <linux/statfs.h> #include <linux/security.h> #include <linux/uaccess.h> +static int calculate_f_flags (struct vfsmount *mnt) +{ +struct super_block *sb = mnt->mnt_sb; +long flags =ST_VALID ; + +if (mnt->mnt_flags &MNT_READONLY ) + flags |=ST_RDONLY ; +if (mnt->mnt_flags &MNT_NOSUID ) + flags |=ST_NOSUID ; +if (mnt->mnt_flags &MNT_NODEV ) + flags |=ST_NODEV ; +if (mnt->mnt_flags &MNT_NOEXEC ) + flags |=ST_NOEXEC ; +if (mnt->mnt_flags &MNT_NOATIME ) + flags |=ST_NOATIME ; +if (mnt->mnt_flags &MNT_NODIRATIME ) + flags |=ST_NODIRATIME ; +if (mnt->mnt_flags &MNT_RELATIME ) + flags |=ST_RELATIME ; + +if (sb->s_flags &MS_SYNCHRONOUS ) + flags |=ST_SYNCHRONOUS ; +if (sb->s_flags &MS_MANDLOCK ) + flags |=ST_MANDLOCK ; + +return flags; +} +int statfs_by_dentry (struct dentry *dentry,struct kstatfs *buf) {int retval;
@@ -26,7 +55,12 @@ int statfs_by_dentry(struct dentry *dentint vfs_statfs (struct path *path,struct kstatfs *buf) { -return statfs_by_dentry (path->dentry, buf); +int error; + + error =statfs_by_dentry (path->dentry, buf); +if (!error) + buf->f_flags =calculate_f_flags (path->mnt); +return error; }EXPORT_SYMBOL (vfs_statfs);
@@ -69,6 +103,7 @@ static int do_statfs_native(struct path buf->f_fsid = st.f_fsid; buf->f_namelen = st.f_namelen; buf->f_frsize = st.f_frsize; + buf->f_flags = st.f_flags;memset (buf->f_spare,0 ,sizeof (buf->f_spare)); }return 0 ;
@@ -96,6 +131,7 @@ static int do_statfs64(struct path *path buf->f_fsid = st.f_fsid; buf->f_namelen = st.f_namelen; buf->f_frsize = st.f_frsize; + buf->f_flags = st.f_flags;memset (buf->f_spare,0 ,sizeof (buf->f_spare)); }return 0 ;
Quoted 4 lines · Christoph Hellwig
Add a flags field to help glibc implementing statvfs(3) efficiently.
We copy the flag values from glibc, and add a new
ST_VALIDflag to denote thatf_flagsis implemented.
Thanks.
Is f_favail important enough to add as well?
Quoted 1 line · Nick Piggin
Is
f_favailimportant enough to add as well?
As Uli if he needs it. Adding real support for it won't be quite as easy as adding f_flags, as the individual filesystems would need to support it. And those not derived from FFS generally don't have any different accounting of inodes allocates vs inodes allocated to non-root user. In fact faking up any kind of free inodes values is already difficult enough for modern filesystems.
Quoted 11 lines · Christoph Hellwig
Quoted 1 line · Nick Piggin
Is
f_favailimportant enough to add as well?As Uli if he needs it. Adding real support for it won't be quite as easy as adding
f_flags, as the individual filesystems would need to support it.And those not derived from FFS generally don't
have any different accounting of inodes allocates vs inodes allocated to non-root user. In fact faking up any kind of free inodes values is already difficult enough for modern filesystems.
Yeah, quite likely it is not worth using up another field for this, and instead the statvfs Linux man page should be updated instead.
Quoted 4 lines · On Sat, 26 Jun 2010 11:35:07 +0200 Christoph Hellwig <[email protected]> wrote:
Add a flags field to help glibc implementing statvfs(3) efficiently.
We copy the flag values from glibc, and add a new
ST_VALIDflag to denote thatf_flagsis implemented.
Hi Christoph,
while we are adding flags to statfs, I wonder if it might be possible to do something to make f_fsid more useful - particularly for nfs-utils.
Currently some filesystems (e.g. VFAT) set f_fsid based on the device that the filesystem is mounted from, while others (e.g. ext3) set f_fsid based on the filesystem itself (i.e. from the UUID stored in the superblock).
This makes f_fsid not generally usable to make the filesystem part of a filehandle, as we really don't want to based it in the device if at all
possible. This is particularly frustrating as for btrfs, f_fsid is the
only way to differentiate between subvolumes.
If we could have a flag "ST_FSID_STABLE" (or similar) which indicates that the f_fsid is known to be stable across device renames, then I could remove some special casing that was recently added to nfs-utils for btrfs (or at least deprecate it).
And if it was acceptable to use a couple more of the 'spares' to provide a full 128bit fsid rather than just a 64bit one, that would be even better. But I'm not sure it is worth it (64bits is still quite a lot).
Thanks,
NeilBrown
Quoted 235 lines
Signed-off-by Christoph Hellwig <[email protected]>Index:
linux-2.6/arch/mips/include/asm/statfs.h
===================================================================arch/mips/include/asm/statfs.h +8
-4@@ -33,7 +33,8 @@ struct statfs {/* Linux specials */ __kernel_fsid_t f_fsid;long f_namelen; -long f_spare[6 ]; +long f_flags; +long f_spare[5 ]; };#if (_MIPS_SIM == _MIPS_SIM_ABI32) || (_MIPS_SIM == _MIPS_SIM_NABI32)@@ -53,7 +54,8 @@ struct statfs64 {__u64 f_bavail;__kernel_fsid_t f_fsid;__u32 f_namelen; - __u32 f_spare[6]; +__u32 f_flags; + __u32 f_spare[5]; };#endif /* _MIPS_SIM == _MIPS_SIM_ABI32 */ @@ -73,7 +75,8 @@ struct statfs64 { /* Same as struct st/* Linux specials */ __kernel_fsid_t f_fsid;long f_namelen; -long f_spare[6 ]; +long f_flags; +long f_spare[5 ]; };struct compat_statfs64 {@@ -88,7 +91,8 @@ struct compat_statfs64 {__u64 f_bavail;__kernel_fsid_t f_fsid;__u32 f_namelen; - __u32 f_spare[6]; +__u32 f_flags; + __u32 f_spare[5]; };#endif /* _MIPS_SIM == _MIPS_SIM_ABI64 */ Index:
linux-2.6/arch/s390/include/asm/statfs.h
===================================================================arch/s390/include/asm/statfs.h +6
-3@@ -33,7 +33,8 @@ struct statfs {__kernel_fsid_t f_fsid;int f_namelen;int f_frsize; -int f_spare[5 ]; +int f_flags; +int f_spare[4 ]; };struct statfs64 {@@ -47,7 +48,8 @@ struct statfs64 {__kernel_fsid_t f_fsid;int f_namelen;int f_frsize; -int f_spare[5 ]; +int f_flags; +int f_spare[4 ]; };struct compat_statfs64 {@@ -61,7 +63,8 @@ struct compat_statfs64 {__kernel_fsid_t f_fsid;__u32 f_namelen;__u32 f_frsize; - __u32 f_spare[5]; +__u32 f_flags; + __u32 f_spare[4]; };#endif /* __s390x__ */ Index:
linux-2.6/include/asm-generic/statfs.h
===================================================================include/asm-generic/statfs.h +5
-2@@ -33,7 +33,8 @@ struct statfs {__kernel_fsid_t f_fsid;__statfs_word f_namelen;__statfs_word f_frsize; -__statfs_word f_spare[5 ]; +__statfs_word f_flags; +__statfs_word f_spare[4 ]; };/* @@ -55,7 +56,8 @@ struct statfs64 {__kernel_fsid_t f_fsid;__statfs_word f_namelen;__statfs_word f_frsize; -__statfs_word f_spare[5 ]; +__statfs_word f_flags; +__statfs_word f_spare[4 ]; }ARCH_PACK_STATFS64 ;/* @@ -77,6 +79,7 @@ struct compat_statfs64 {__kernel_fsid_t f_fsid;__u32 f_namelen;__u32 f_frsize; +__u32 f_flags[5 ];__u32 f_spare[5 ]; }ARCH_PACK_COMPAT_STATFS64 ;Index:
linux-2.6/include/linux/statfs.h
===================================================================include/linux/statfs.h +23
-2@@ -2,7 +2,6 @@#define _LINUX_STATFS_H#include <linux/types.h> -#include <asm/statfs.h> struct kstatfs {@@ -16,7 +15,29 @@ struct kstatfs {__kernel_fsid_t f_fsid;long f_namelen;long f_frsize; - long f_spare[5]; +long f_flags; + long f_spare[4]; }; +/* +* Definitions for the flag in f_flag. +* +* Generally these flags are equivalent to the MS_ flags used in the mount +* ABI. The exception is ST_VALID which has the same value as MS_REMOUNT +* which doesn't make any sense for statfs. +*/ +#define ST_RDONLY 0x0001/* mount read-only */ +#define ST_NOSUID 0x0002/* ignore suid and sgid bits */ +#define ST_NODEV 0x0004/* disallow access to device special files */ +#define ST_NOEXEC 0x0008/* disallow program execution */ +#define ST_SYNCHRONOUS 0x0010/* writes are synced at once */ +#define ST_VALID 0x0020/* f_flags support is implemented */ +#define ST_MANDLOCK 0x0040/* allow mandatory locks on an FS */ +/* 0x0080 used for ST_WRITE in glibc */ +/* 0x0100 used for ST_APPEND in glibc */ +/* 0x0200 used for ST_IMMUTABLE in glibc */ +#define ST_NOATIME 0x0400/* do not update access times */ +#define ST_NODIRATIME 0x0800/* do not update directory access times */ +#define ST_RELATIME 0x1000/* update atime relative to mtime/ctime */ +#endif Index:
linux-2.6/fs/statfs.c
===================================================================fs/statfs.c +37
-2@@ -2,11 +2,40 @@#include <linux/module.h> #include <linux/fs.h> #include <linux/file.h> +#include <linux/mount.h> #include <linux/namei.h> #include <linux/statfs.h> #include <linux/security.h> #include <linux/uaccess.h> +static int calculate_f_flags (struct vfsmount *mnt) +{ +struct super_block *sb = mnt->mnt_sb; +long flags =ST_VALID ; + +if (mnt->mnt_flags &MNT_READONLY ) + flags |=ST_RDONLY ; +if (mnt->mnt_flags &MNT_NOSUID ) + flags |=ST_NOSUID ; +if (mnt->mnt_flags &MNT_NODEV ) + flags |=ST_NODEV ; +if (mnt->mnt_flags &MNT_NOEXEC ) + flags |=ST_NOEXEC ; +if (mnt->mnt_flags &MNT_NOATIME ) + flags |=ST_NOATIME ; +if (mnt->mnt_flags &MNT_NODIRATIME ) + flags |=ST_NODIRATIME ; +if (mnt->mnt_flags &MNT_RELATIME ) + flags |=ST_RELATIME ; + +if (sb->s_flags &MS_SYNCHRONOUS ) + flags |=ST_SYNCHRONOUS ; +if (sb->s_flags &MS_MANDLOCK ) + flags |=ST_MANDLOCK ; + +return flags; +} +int statfs_by_dentry (struct dentry *dentry,struct kstatfs *buf) {int retval;@@ -26,7 +55,12 @@ int statfs_by_dentry(struct dentry *dentint vfs_statfs (struct path *path,struct kstatfs *buf) { -return statfs_by_dentry (path->dentry, buf); +int error; + + error =statfs_by_dentry (path->dentry, buf); +if (!error) + buf->f_flags =calculate_f_flags (path->mnt); +return error; }EXPORT_SYMBOL (vfs_statfs);@@ -69,6 +103,7 @@ static int do_statfs_native(struct path buf->f_fsid = st.f_fsid; buf->f_namelen = st.f_namelen; buf->f_frsize = st.f_frsize; + buf->f_flags = st.f_flags;memset (buf->f_spare,0 ,sizeof (buf->f_spare)); }return 0 ;@@ -96,6 +131,7 @@ static int do_statfs64(struct path *path buf->f_fsid = st.f_fsid; buf->f_namelen = st.f_namelen; buf->f_frsize = st.f_frsize; + buf->f_flags = st.f_flags;memset (buf->f_spare,0 ,sizeof (buf->f_spare)); }return 0 ; --To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Quoted 2 lines · Neil Brown
while we are adding flags to statfs, I wonder if it might be possible to do something to make
f_fsidmore useful - particularly for nfs-utils.
f_fsid really isn't suitable for that. Even filesystems that had UUIDs since the dawn of days don't always store it there, e.g. XFS. I wish people had left it with that, but the recent rush to stupidly overload it with an uuid light and using it in nfs-tools didn't help.
Having an API to expose a UUID to userspace would be useful, but f_fsid isn't it. If we'll have to add real statvfs syscalls we can add an f_uuid field, but I'd rather not use up the reamining space in the statfs structure for that.
Hi Christoph,
Quoted 7 lines · Christoph Hellwig
Add a flags field to help glibc implementing statvfs(3) efficiently.
We copy the flag values from glibc, and add a new
ST_VALIDflag to denote thatf_flagsis implemented.Signed-off-by Christoph Hellwig<[email protected]>
<snip>
Quoted 25 lines
Index:
linux-2.6/include/asm-generic/statfs.h
===================================================================include/asm-generic/statfs.h +4
-2@@ -33,7 +33,8 @@ struct statfs {__kernel_fsid_t f_fsid;__statfs_word f_namelen;__statfs_word f_frsize; -__statfs_word f_spare[5 ]; +__statfs_word f_flags; +__statfs_word f_spare[4 ]; };/* @@ -55,7 +56,8 @@ struct statfs64 {__kernel_fsid_t f_fsid;__statfs_word f_namelen;__statfs_word f_frsize; -__statfs_word f_spare[5 ]; +__statfs_word f_flags; +__statfs_word f_spare[4 ]; }ARCH_PACK_STATFS64 ;/*
include/asm-generic/statfs.h struct compat_statfs64 { · line 84
Quoted 6 lines
include/asm-generic/statfs.h +1
-0@@ -77,6 +79,7 @@ struct compat_statfs64 {__kernel_fsid_t f_fsid;__u32 f_namelen;__u32 f_frsize; +__u32 f_flags[5 ];__u32 f_spare[5 ]; }ARCH_PACK_COMPAT_STATFS64 ;
This is a typo?
Regards,
Tao
Quoted 4 lines · Tao Ma
include/asm-generic/statfs.h struct compat_statfs64 { · line 84
Quoted 3 lines
include/asm-generic/statfs.h +1
-0+__u32 f_flags[5 ];__u32 f_spare[5 ]; }ARCH_PACK_COMPAT_STATFS64 ;This is a typo?
Yes, it is.
Quoted 2 lines · Christoph Hellwig
We copy the flag values from glibc, and add a new
ST_VALIDflag to denote thatf_flagsis implemented.
Adding ST_VALID is only of marginal use, IMHO. If we are worried about this field being filled with garbage, then a single bit still has a 50% chance of being set.
When there was a transition to binary flags in the mount(2) API, we had a full 16-bit magic value (0xC0ED0000, IIRC) in the high bits to verify the validity of the low 16-bit flags. Then, a couple years later, when all of the tools and kernels were handling the binary flags properly the 16-bit magic was removed and we could use the full 32-bit value.
I would advocate at least an 8-bit magic value, if there is a concern about this field not always being 0-filled on older kernels, or not using any ST_VALID flag at all, if it was always zero-filled in the past.
Cheers, Andreas
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Quoted 4 lines · Andreas Dilger
I would advocate at least an 8-bit magic value, if there is a concern about this field not always being 0-filled on older kernels, or not using any
ST_VALIDflag at all, if it was always zero-filled in the past.
Did anyone go back and check which kernel versions didn't clear the spare fields (if any)?
Instead of using a magic number which doesn't provide 100% security in that case and steals a number of bits which might be needed in future I rather see a new syscall. The new {,f}statfs would be an alias for the old one, exactly the same implementation. With this it is much safer to check for the new kernel behavior. In future this isn't necessary since from point on it is guaranteed that the spare bits are zeroed.
- --
➧ Ulrich Drepper ➧ Red Hat, Inc. ➧ 444 Castro St ➧ Mountain View, CA ❖ -----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.14 (GNU/Linux)
iEYEARECAAYFAkwo/ZgACgkQ2ijCOnn/RHSdVQCgzgHQj5A3/MLSYMbxX2xotoye aPsAnRzGEK0pz7LYQ9mIYUHa/upoFuoS
=3oan
-----END PGP SIGNATURE-----
--
To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Quoted 2 lines · Ulrich Drepper
Did anyone go back and check which kernel versions didn't clear the spare fields (if any)?
I haven't had a chance to do so (out of town for the weekend), so before we talk of a new system call I'd prefer to check that it is actually needed.
Cheers, Andreas
Quoted 8 lines · Ulrich Drepper
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1Quoted 4 lines · Andreas Dilger
I would advocate at least an 8-bit magic value, if there is a concern about this field not always being 0-filled on older kernels, or not using any
ST_VALIDflag at all, if it was always zero-filled in the past.
ST_VALID is required to differentiate between no flags, and flags field unsupported of course.
Quoted 2 lines
Did anyone go back and check which kernel versions didn't clear the spare fields (if any)?
At least from 2.4.0 does memset it. 2.2.26 does not. Can you live with that?
Quoted 4 lines · Nick Piggin
Quoted 3 lines · Ulrich Drepper
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Quoted 8 lines
Quoted 5 lines · Andreas Dilger
Quoted 4 lines
I would advocate at least an 8-bit magic value, if there is a concern about this field not always being 0-filled on older kernels, or not using any
ST_VALIDflag at all, if it was always zero-filled in the past.
ST_VALIDis required to differentiate between no flags, and flags field unsupported of course.
Yes, that was my intention for it.
Quoted 5 lines
Quoted 2 lines
spare fields (if any)?
At least from 2.4.0 does memset it. 2.2.26 does not. Can you live with that?
The spare fields in struct statfs have been zeroed since 2.3.99pre3-8, before that they were set to a pattern of 0xff.
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Quoted 2 lines · Nick Piggin
ST_VALIDis required to differentiate between no flags, and flags field unsupported of course.
Not needed if a new syscall would be used.
Quoted 2 lines
At least from 2.4.0 does memset it. 2.2.26 does not. Can you live with that?
We still support building glibc for everything from linux 2.0 on, at least for x86. I really have no idea whether such old kernels are still in use and if yes, whether userland gets updated. I wouldn't have a problem with bumping the minimum required kernel version.
- --
➧ Ulrich Drepper ➧ Red Hat, Inc. ➧ 444 Castro St ➧ Mountain View, CA ❖ -----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.14 (GNU/Linux)
iEYEARECAAYFAkwpw/kACgkQ2ijCOnn/RHT02gCcCOGJj/fr/WCHJpuJ8CYVMKRu KhwAoKXX7L5sDXTk8g6CZdIHL0y7S+i4
=tlZM
-----END PGP SIGNATURE-----
--
To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Quoted 8 lines · Ulrich Drepper
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1Quoted 2 lines · Nick Piggin
ST_VALIDis required to differentiate between no flags, and flags field unsupported of course.Not needed if a new syscall would be used.
True, but we have the spare fields.
Quoted 7 lines
Quoted 2 lines
At least from 2.4.0 does memset it. 2.2.26 does not. Can you live with that?
We still support building glibc for everything from linux 2.0 on, at least for x86. I really have no idea whether such old kernels are still in use and if yes, whether userland gets updated. I wouldn't have a problem with bumping the minimum required kernel version.
I guess most would assume a 2.6 kernel nowadays? With either the new syscall or Christoph's patch, you need to keep the fallback around too.
Quoted 8 lines · Ulrich Drepper
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1Quoted 2 lines · Nick Piggin
ST_VALIDis required to differentiate between no flags, and flags field unsupported of course.Not needed if a new syscall would be used.
True. But if we add a new syscall anyway I'd rather implement the glibc statvfs64 structure directly. The gives filesystem which really want to a chance to implement f_favail, and we could also store the full uuid in the f_spare fields now that we have more space.