On Wed, 19 Jan 2011 09:15:18 +0800 Shaohua Li <shaohua.li@xxxxxxxxx> wrote: > 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) > + return 0; > + > + args.address = offset; > + args.size = size; > + args.unused = 0; > + > + if (copy_to_user(argp, &args, sizeof(args))) > + return -EFAULT; > + > + return 1; > +} So userspace opens any file on the fs and runs this ioctl against it? That's a pretty awkward interface - we're doing an fs-wide operation but the fs is identified by a single file which happens to live on that fs. For example, this precludes a future extension whereby userspace can query the incore metadata for a particular file. The statfs syscall sucks in the same manner. I don't know if this is worth addressing. Perhaps require that the filp refers 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? -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html