summaryrefslogtreecommitdiff
path: root/fs/read_write.c
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@lst.de>2017-09-01 18:39:12 +0300
committerAl Viro <viro@zeniv.linux.org.uk>2017-09-05 02:05:15 +0300
commitc41fbad015dabb0a40ecca50c3ff5658eb6471ff (patch)
tree8ddce3cb3395cfb031039207c1926abf7fcfd4b4 /fs/read_write.c
parentac452acae1caa1a451142a30b4e1ea09cfac4410 (diff)
downloadlinux-c41fbad015dabb0a40ecca50c3ff5658eb6471ff.tar.xz
fs: move kernel_read to fs/read_write.c
Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/read_write.c')
-rw-r--r--fs/read_write.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/fs/read_write.c b/fs/read_write.c
index 417dbe199505..1ea862bc7efd 100644
--- a/fs/read_write.c
+++ b/fs/read_write.c
@@ -415,6 +415,22 @@ ssize_t __vfs_read(struct file *file, char __user *buf, size_t count,
}
EXPORT_SYMBOL(__vfs_read);
+int kernel_read(struct file *file, loff_t offset, char *addr,
+ unsigned long count)
+{
+ mm_segment_t old_fs;
+ loff_t pos = offset;
+ int result;
+
+ old_fs = get_fs();
+ set_fs(get_ds());
+ /* The cast to a user pointer is valid due to the set_fs() */
+ result = vfs_read(file, (void __user *)addr, count, &pos);
+ set_fs(old_fs);
+ return result;
+}
+EXPORT_SYMBOL(kernel_read);
+
ssize_t vfs_read(struct file *file, char __user *buf, size_t count, loff_t *pos)
{
ssize_t ret;