lkml.org 
[lkml]   [2012]   [Dec]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 05/32] char: add aio_{read,write} to /dev/{null,zero}
    Date
    From: Zach Brown <zab@redhat.com>

    These are handy for measuring the cost of the aio infrastructure with
    operations that do very little and complete immediately.

    Signed-off-by: Zach Brown <zab@redhat.com>
    Signed-off-by: Kent Overstreet <koverstreet@google.com>
    ---
    drivers/char/mem.c | 35 +++++++++++++++++++++++++++++++++++
    1 file changed, 35 insertions(+)

    diff --git a/drivers/char/mem.c b/drivers/char/mem.c
    index 0537903..968ae6e 100644
    --- a/drivers/char/mem.c
    +++ b/drivers/char/mem.c
    @@ -627,6 +627,18 @@ static ssize_t write_null(struct file *file, const char __user *buf,
    return count;
    }

    +static ssize_t aio_read_null(struct kiocb *iocb, const struct iovec *iov,
    + unsigned long nr_segs, loff_t pos)
    +{
    + return 0;
    +}
    +
    +static ssize_t aio_write_null(struct kiocb *iocb, const struct iovec *iov,
    + unsigned long nr_segs, loff_t pos)
    +{
    + return iov_length(iov, nr_segs);
    +}
    +
    static int pipe_to_null(struct pipe_inode_info *info, struct pipe_buffer *buf,
    struct splice_desc *sd)
    {
    @@ -670,6 +682,24 @@ static ssize_t read_zero(struct file *file, char __user *buf,
    return written ? written : -EFAULT;
    }

    +static ssize_t aio_read_zero(struct kiocb *iocb, const struct iovec *iov,
    + unsigned long nr_segs, loff_t pos)
    +{
    + size_t written = 0;
    + unsigned long i;
    + ssize_t ret;
    +
    + for (i = 0; i < nr_segs; i++) {
    + ret = read_zero(iocb->ki_filp, iov[i].iov_base, iov[i].iov_len,
    + &pos);
    + if (ret < 0)
    + break;
    + written += ret;
    + }
    +
    + return written ? written : -EFAULT;
    +}
    +
    static int mmap_zero(struct file *file, struct vm_area_struct *vma)
    {
    #ifndef CONFIG_MMU
    @@ -738,6 +768,7 @@ static int open_port(struct inode * inode, struct file * filp)
    #define full_lseek null_lseek
    #define write_zero write_null
    #define read_full read_zero
    +#define aio_write_zero aio_write_null
    #define open_mem open_port
    #define open_kmem open_mem
    #define open_oldmem open_mem
    @@ -766,6 +797,8 @@ static const struct file_operations null_fops = {
    .llseek = null_lseek,
    .read = read_null,
    .write = write_null,
    + .aio_read = aio_read_null,
    + .aio_write = aio_write_null,
    .splice_write = splice_write_null,
    };

    @@ -782,6 +815,8 @@ static const struct file_operations zero_fops = {
    .llseek = zero_lseek,
    .read = read_zero,
    .write = write_zero,
    + .aio_read = aio_read_zero,
    + .aio_write = aio_write_zero,
    .mmap = mmap_zero,
    };

    --
    1.7.12


    \
     
     \ /
      Last update: 2012-12-27 04:01    [W:4.128 / U:0.256 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site