lkml.org 
[lkml]   [2006]   [May]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: [PATCH 1/4] Vectorize aio_read/aio_write methods
    Badari Pulavarty <pbadari@us.ibm.com> wrote:
    >
    > This patch vectorizes aio_read() and aio_write() methods to prepare
    > for collapsing all aio & vectored operations into one interface -
    > which is aio_read()/aio_write().

    There've been significant ocfs2 changes. I redid things as below, but
    didn't try super-hard. Please check that it all looks sane.

    diff -puN fs/ocfs2/file.c~vectorize-aio_read-aio_write-methods fs/ocfs2/file.c
    --- 25/fs/ocfs2/file.c~vectorize-aio_read-aio_write-methods Thu May 11 11:33:39 2006
    +++ 25-akpm/fs/ocfs2/file.c Thu May 11 11:36:12 2006
    @@ -960,25 +960,23 @@ static inline int ocfs2_write_should_rem
    }

    static ssize_t ocfs2_file_aio_write(struct kiocb *iocb,
    - const char __user *buf,
    - size_t count,
    + const struct iovec *iov,
    + unsigned long nr_segs,
    loff_t pos)
    {
    - struct iovec local_iov = { .iov_base = (void __user *)buf,
    - .iov_len = count };
    int ret, rw_level = -1, meta_level = -1, have_alloc_sem = 0;
    u32 clusters;
    struct file *filp = iocb->ki_filp;
    struct inode *inode = filp->f_dentry->d_inode;
    loff_t newsize, saved_pos;

    - mlog_entry("(0x%p, 0x%p, %u, '%.*s')\n", filp, buf,
    - (unsigned int)count,
    + mlog_entry("(0x%p, %u, '%.*s')\n", filp,
    + (unsigned int)nr_segs,
    filp->f_dentry->d_name.len,
    filp->f_dentry->d_name.name);

    /* happy write of zero bytes */
    - if (count == 0)
    + if (iocb->ki_left == 0)
    return 0;

    if (!inode) {
    @@ -1047,7 +1045,7 @@ static ssize_t ocfs2_file_aio_write(stru
    } else {
    saved_pos = iocb->ki_pos;
    }
    - newsize = count + saved_pos;
    + newsize = iocb->ki_left + saved_pos;

    mlog(0, "pos=%lld newsize=%lld cursize=%lld\n",
    (long long) saved_pos, (long long) newsize,
    @@ -1080,7 +1078,7 @@ static ssize_t ocfs2_file_aio_write(stru
    if (!clusters)
    break;

    - ret = ocfs2_extend_file(inode, NULL, newsize, count);
    + ret = ocfs2_extend_file(inode, NULL, newsize, iocb->ki_left);
    if (ret < 0) {
    if (ret != -ENOSPC)
    mlog_errno(ret);
    @@ -1097,7 +1095,7 @@ static ssize_t ocfs2_file_aio_write(stru
    /* communicate with ocfs2_dio_end_io */
    ocfs2_iocb_set_rw_locked(iocb);

    - ret = generic_file_aio_write_nolock(iocb, &local_iov, 1, &iocb->ki_pos);
    + ret = generic_file_aio_write_nolock(iocb, iov, nr_segs, iocb->ki_pos);

    /* buffered aio wouldn't have proper lock coverage today */
    BUG_ON(ret == -EIOCBQUEUED && !(filp->f_flags & O_DIRECT));
    @@ -1131,16 +1129,16 @@ out:
    }

    static ssize_t ocfs2_file_aio_read(struct kiocb *iocb,
    - char __user *buf,
    - size_t count,
    + const struct iovec *iov,
    + unsigned long nr_segs,
    loff_t pos)
    {
    int ret = 0, rw_level = -1, have_alloc_sem = 0;
    struct file *filp = iocb->ki_filp;
    struct inode *inode = filp->f_dentry->d_inode;

    - mlog_entry("(0x%p, 0x%p, %u, '%.*s')\n", filp, buf,
    - (unsigned int)count,
    + mlog_entry("(0x%p, %u, '%.*s')\n", filp,
    + (unsigned int)nr_segs,
    filp->f_dentry->d_name.len,
    filp->f_dentry->d_name.name);

    @@ -1184,7 +1182,7 @@ static ssize_t ocfs2_file_aio_read(struc
    }
    ocfs2_meta_unlock(inode, 0);

    - ret = generic_file_aio_read(iocb, buf, count, iocb->ki_pos);
    + ret = generic_file_aio_read(iocb, iov, nr_segs, iocb->ki_pos);
    if (ret == -EINVAL)
    mlog(ML_ERROR, "generic_file_aio_read returned -EINVAL\n");

    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2006-05-11 20:39    [W:0.036 / U:2.592 seconds]
    ©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site