Re: [RFC PATCH] fs: obtain the inode generation number from vfs directly
From: Tavian Barnes <hidden>
Date: 2024-08-28 16:36:39
Also in:
linux-fsdevel
On Tue, 27 Aug 2024 01:41:08 +0000, Hongbo Li wrote:
quoted hunk ↗ jump to hunk
Many mainstream file systems already support the GETVERSION ioctl, and their implementations are completely the same, essentially just obtain the value of i_generation. We think this ioctl can be implemented at the VFS layer, so the file systems do not need to implement it individually. Signed-off-by: Hongbo Li <lihongbo22@huawei.com> --- fs/ioctl.c | 6 ++++++ 1 file changed, 6 insertions(+)diff --git a/fs/ioctl.c b/fs/ioctl.c index 64776891120c..dff887ec52c4 100644 --- a/fs/ioctl.c +++ b/fs/ioctl.c@@ -878,6 +878,9 @@ static int do_vfs_ioctl(struct file *filp, unsigned int fd, case FS_IOC_GETFSUUID: return ioctl_getfsuuid(filp, argp); + case FS_IOC_GETVERSION: + return put_user(inode->i_generation, (int __user *)argp); + case FS_IOC_GETFSSYSFSPATH: return ioctl_get_fs_sysfs_path(filp, argp);@@ -992,6 +995,9 @@ COMPAT_SYSCALL_DEFINE3(ioctl, unsigned int, fd, unsigned int, cmd, cmd = (cmd == FS_IOC32_GETFLAGS) ? FS_IOC_GETFLAGS : FS_IOC_SETFLAGS; fallthrough;
The above case falls through...
+ case FS_IOC32_GETVERSION: + cmd = FS_IOC_GETVERSION;
... to this new case, which clobbers cmd, breaking FS_IOC32_[GS]ETFLAGS.
+ fallthrough; /* * everything else in do_vfs_ioctl() takes either a compatible * pointer argument or no argument -- call it with a modified