S Shaohua Li #
Message details and related content
On Thu, 2011-01-20 at 04:41 +0800, Andrew Morton wrote:
On Wed, 19 Jan 2011 09:15:18 +0800 Shaohua Li [off-list ref] wrote:quoted
Subject: add metadata_incore ioctl in vfs Add an ioctl to dump filesystem's metadata in memory in vfs. Userspace collects such info and uses it to do metadata readahead. Filesystem can hook to super_operations.metadata_incore to get metadata in specific approach. Next patch will give an example how to implement .metadata_incore in btrfs. ... /* + * Copy info about metadata in memory to userspace + * Returns: + * = 1, one metadata range copied to userspace + * = 0, no more metadata + * < 0, error + */ +static int ioctl_metadata_incore(struct file *filp, void __user *argp) +{ + struct super_block *sb = filp->f_path.dentry->d_inode->i_sb; + struct metadata_incore_args args; + loff_t offset; + ssize_t size; + + if (!sb->s_op->metadata_incore) + return -EINVAL; + + if (copy_from_user(&args, argp, sizeof(args))) + return -EFAULT; + + /* we check metadata info in page unit */ + if (args.offset & ~PAGE_CACHE_MASK) + return -EINVAL; + + offset = args.offset; + + if (sb->s_op->metadata_incore(sb, &offset, &size) < 0)
I didn't see why this is needed, but I can limit the fip to the root of
the fs.
Also, is this a privileged operation? If not, then that might be a problem - could it be used by unprivileged users to work out which files have been opened recently or something like that?
it's harmless even a unprivileged user uses it. I don't think
unprivileged user can decode the data returned from the ioctl.
Thanks,
Shaohua