lkml.org 
[lkml]   [2008]   [Jun]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[patch -v2 13/23] 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: Akinobu Mita <akinobu.mita@gmail.com>
    ---
    fs/libfs.c | 18 ++++++++++++++++++
    include/linux/fs.h | 5 ++++-
    2 files changed, 22 insertions(+), 1 deletion(-)

    Index: 2.6-git/fs/libfs.c
    ===================================================================
    --- 2.6-git.orig/fs/libfs.c
    +++ 2.6-git/fs/libfs.c
    @@ -528,6 +528,23 @@ ssize_t simple_read_from_buffer(void __u
    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);
    EXPORT_SYMBOL(simple_sync_file);
    EXPORT_SYMBOL(simple_unlink);
    EXPORT_SYMBOL(simple_read_from_buffer);
    +EXPORT_SYMBOL(memory_read_from_buffer);
    EXPORT_SYMBOL(simple_transaction_get);
    EXPORT_SYMBOL(simple_transaction_read);
    EXPORT_SYMBOL(simple_transaction_release);
    Index: 2.6-git/include/linux/fs.h
    ===================================================================
    --- 2.6-git.orig/include/linux/fs.h
    +++ 2.6-git/include/linux/fs.h
    @@ -2000,7 +2000,10 @@ extern int simple_fill_super(struct supe
    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);

    #ifdef CONFIG_MIGRATION
    extern int buffer_migrate_page(struct address_space *,
    --


    \
     
     \ /
      Last update: 2008-06-02 01:35    [W:0.021 / U:122.612 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site