* [RFC 3/5]add metadata_readahead ioctl in vfs
@ 2010-12-13 7:22 Shaohua Li
2010-12-14 0:46 ` Andrew Morton
0 siblings, 1 reply; 2+ messages in thread
From: Shaohua Li @ 2010-12-13 7:22 UTC (permalink / raw)
To: linux-btrfs@vger.kernel.org, linux-fsdevel@vger.kernel.org
Cc: Chris Mason, Christoph Hellwig, Arjan van de Ven, Andrew Morton
Add metadata readahead ioctl in vfs. Filesystem can hook to
super_operations.metadata_readahead to handle filesystem specific task.
Next patch will give an example how btrfs implements it.
Signed-off-by: Shaohua Li <shaohua.li@intel.com>
---
fs/compat_ioctl.c | 1 +
fs/ioctl.c | 21 +++++++++++++++++++++
include/linux/fs.h | 8 ++++++++
3 files changed, 30 insertions(+)
Index: linux/fs/ioctl.c
===================================================================
--- linux.orig/fs/ioctl.c 2010-12-13 14:01:56.000000000 +0800
+++ linux/fs/ioctl.c 2010-12-13 14:10:42.000000000 +0800
@@ -605,6 +605,24 @@ static int ioctl_metadata_incore(struct
return entries;
}
+static int ioctl_metadata_readahead(struct file *filp, void __user *argp)
+{
+ struct super_block *sb = filp->f_path.dentry->d_inode->i_sb;
+ struct metadata_readahead_args args;
+
+ if (!sb->s_op->metadata_readahead)
+ return -EOPNOTSUPP;
+
+ if (copy_from_user(&args, (struct metadata_readahead_args __user *)argp,
+ sizeof(args)))
+ return -EFAULT;
+
+ if ((args.offset & ~PAGE_CACHE_MASK) || (args.size & ~PAGE_CACHE_MASK))
+ return -EINVAL;
+
+ return sb->s_op->metadata_readahead(sb, args.offset, args.size);
+}
+
/*
* When you add any new common ioctls to the switches above and below
* please update compat_sys_ioctl() too.
@@ -668,6 +686,9 @@ int do_vfs_ioctl(struct file *filp, unsi
case FIMETADATA_INCORE:
return ioctl_metadata_incore(filp, argp);
+ case FIMETADATA_READAHEAD:
+ return ioctl_metadata_readahead(filp, argp);
+
default:
if (S_ISREG(filp->f_path.dentry->d_inode->i_mode))
error = file_ioctl(filp, cmd, arg);
Index: linux/include/linux/fs.h
===================================================================
--- linux.orig/include/linux/fs.h 2010-12-13 14:01:56.000000000 +0800
+++ linux/include/linux/fs.h 2010-12-13 14:10:42.000000000 +0800
@@ -65,6 +65,11 @@ struct metadata_incore_args {
__u32 unused;
};
+struct metadata_readahead_args {
+ __u64 offset;
+ __u64 size;
+};
+
#define NR_FILE 8192 /* this can well be larger on a larger system */
#define MAY_EXEC 1
@@ -338,6 +343,7 @@ struct metadata_incore_args {
#define FITHAW _IOWR('X', 120, int) /* Thaw */
#define FITRIM _IOWR('X', 121, struct fstrim_range) /* Trim */
#define FIMETADATA_INCORE _IOWR('X', 122, struct metadata_incore_args)
+#define FIMETADATA_READAHEAD _IOR('X', 123, struct metadata_readahead_args)
#define FS_IOC_GETFLAGS _IOR('f', 1, long)
#define FS_IOC_SETFLAGS _IOW('f', 2, long)
@@ -1627,6 +1633,8 @@ struct super_operations {
int (*bdev_try_to_free_page)(struct super_block*, struct page*, gfp_t);
int (*metadata_incore)(struct super_block*, loff_t *offset,
ssize_t *size);
+ int (*metadata_readahead)(struct super_block*, loff_t offset,
+ ssize_t size);
};
/*
Index: linux/fs/compat_ioctl.c
===================================================================
--- linux.orig/fs/compat_ioctl.c 2010-12-13 14:10:49.000000000 +0800
+++ linux/fs/compat_ioctl.c 2010-12-13 14:11:35.000000000 +0800
@@ -883,6 +883,7 @@ COMPATIBLE_IOCTL(FIGETBSZ)
COMPATIBLE_IOCTL(FIFREEZE)
COMPATIBLE_IOCTL(FITHAW)
COMPATIBLE_IOCTL(FIMETADATA_INCORE)
+COMPATIBLE_IOCTL(FIMETADATA_READAHEAD)
COMPATIBLE_IOCTL(KDGETKEYCODE)
COMPATIBLE_IOCTL(KDSETKEYCODE)
COMPATIBLE_IOCTL(KDGKBTYPE)
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [RFC 3/5]add metadata_readahead ioctl in vfs
2010-12-13 7:22 [RFC 3/5]add metadata_readahead ioctl in vfs Shaohua Li
@ 2010-12-14 0:46 ` Andrew Morton
0 siblings, 0 replies; 2+ messages in thread
From: Andrew Morton @ 2010-12-14 0:46 UTC (permalink / raw)
To: Shaohua Li
Cc: linux-btrfs@vger.kernel.org, linux-fsdevel@vger.kernel.org,
Chris Mason, Christoph Hellwig, Arjan van de Ven
On Mon, 13 Dec 2010 15:22:14 +0800
Shaohua Li <shaohua.li@intel.com> wrote:
> Add metadata readahead ioctl in vfs. Filesystem can hook to
> super_operations.metadata_readahead to handle filesystem specific task.
> Next patch will give an example how btrfs implements it.
>
> Signed-off-by: Shaohua Li <shaohua.li@intel.com>
>
> ---
> fs/compat_ioctl.c | 1 +
> fs/ioctl.c | 21 +++++++++++++++++++++
> include/linux/fs.h | 8 ++++++++
> 3 files changed, 30 insertions(+)
>
> Index: linux/fs/ioctl.c
> ===================================================================
> --- linux.orig/fs/ioctl.c 2010-12-13 14:01:56.000000000 +0800
> +++ linux/fs/ioctl.c 2010-12-13 14:10:42.000000000 +0800
> @@ -605,6 +605,24 @@ static int ioctl_metadata_incore(struct
> return entries;
> }
>
> +static int ioctl_metadata_readahead(struct file *filp, void __user *argp)
> +{
> + struct super_block *sb = filp->f_path.dentry->d_inode->i_sb;
> + struct metadata_readahead_args args;
> +
> + if (!sb->s_op->metadata_readahead)
> + return -EOPNOTSUPP;
-ENOTNETWORKING
> + if (copy_from_user(&args, (struct metadata_readahead_args __user *)argp,
Unneeded cast.
> + sizeof(args)))
> + return -EFAULT;
> +
> + if ((args.offset & ~PAGE_CACHE_MASK) || (args.size & ~PAGE_CACHE_MASK))
Why?
> + return -EINVAL;
> +
> + return sb->s_op->metadata_readahead(sb, args.offset, args.size);
> +}
> +
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2010-12-14 0:47 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-12-13 7:22 [RFC 3/5]add metadata_readahead ioctl in vfs Shaohua Li
2010-12-14 0:46 ` Andrew Morton
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).