Commit 93b07113 authored by Akinobu Mita's avatar Akinobu Mita Committed by Linus Torvalds

introduce memory_read_from_buffer()

This patch introduces memory_read_from_buffer().

The only difference between memory_read_from_buffer() and
simple_read_from_buffer() is which address space the function copies to.

simple_read_from_buffer copies to user space memory.
memory_read_from_buffer copies to normal memory.
Signed-off-by: default avatarAkinobu Mita <>
Cc: Al Viro <>
Cc: Doug Warzecha <>
Cc: Zhang Rui <>
Cc: Matt Domsch <>
Cc: Abhay Salunke <>
Cc: Greg Kroah-Hartman <>
Cc: Markus Rechberger <>
Cc: Kay Sievers <>
Cc: Bob Moore <>
Cc: Thomas Renninger <>
Cc: Len Brown <>
Cc: Benjamin Herrenschmidt <>
Cc: "Antonino A. Daplas" <>
Cc: Krzysztof Helt <>
Cc: Geert Uytterhoeven <>
Cc: Martin Schwidefsky <>
Cc: Heiko Carstens <>
Cc: Peter Oberparleiter <>
Cc: Michael Holzheu <>
Cc: Brian King <>
Cc: James E.J. Bottomley <>
Cc: Andrew Vasquez <>
Cc: Seokmann Ju <>
Signed-off-by: default avatarAndrew Morton <>
Signed-off-by: default avatarLinus Torvalds <>
parent 3527fb32
......@@ -528,6 +528,23 @@ ssize_t simple_read_from_buffer(void __user *to, size_t count, loff_t *ppos,
return count;
ssize_t memory_read_from_buffer(void *to, size_t count, loff_t *ppos,
const void *from, size_t available)
loff_t pos = *ppos;
if (pos < 0)
return -EINVAL;
if (pos >= available)
return 0;
if (count > available - pos)
count = available - pos;
memcpy(to, from + pos, count);
*ppos = pos + count;
return count;
* Transaction based IO.
* The file expects a single write which triggers the transaction, and then
......@@ -800,6 +817,7 @@ EXPORT_SYMBOL(simple_statfs);
......@@ -2000,7 +2000,10 @@ extern int simple_fill_super(struct super_block *, int, struct tree_descr *);
extern int simple_pin_fs(struct file_system_type *, struct vfsmount **mount, int *count);
extern void simple_release_fs(struct vfsmount **mount, int *count);
extern ssize_t simple_read_from_buffer(void __user *, size_t, loff_t *, const void *, size_t);
extern ssize_t simple_read_from_buffer(void __user *to, size_t count,
loff_t *ppos, const void *from, size_t available);
extern ssize_t memory_read_from_buffer(void *to, size_t count, loff_t *ppos,
const void *from, size_t available);
extern int buffer_migrate_page(struct address_space *,
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment