lkml.org 
[lkml]   [2012]   [May]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH] block: move down direct IO plugging
    Move unplugging for direct I/O from around ->direct_IO() down to
    do_blockdev_direct_IO(). This implicitly adds plugging for direct
    writes.

    CC: Jens Axboe <axboe@kernel.dk>
    CC: Li Shaohua <shli@fusionio.com>
    Acked-by: Jeff Moyer <jmoyer@redhat.com>
    Signed-off-by: Wu Fengguang <fengguang.wu@intel.com>
    ---
    fs/direct-io.c | 5 +++++
    mm/filemap.c | 4 ----
    2 files changed, 5 insertions(+), 4 deletions(-)

    --- linux-next.orig/mm/filemap.c 2012-05-03 19:32:58.051123379 +0800
    +++ linux-next/mm/filemap.c 2012-05-03 19:33:27.235124073 +0800
    @@ -1413,12 +1413,8 @@ generic_file_aio_read(struct kiocb *iocb
    retval = filemap_write_and_wait_range(mapping, pos,
    pos + iov_length(iov, nr_segs) - 1);
    if (!retval) {
    - struct blk_plug plug;
    -
    - blk_start_plug(&plug);
    retval = mapping->a_ops->direct_IO(READ, iocb,
    iov, pos, nr_segs);
    - blk_finish_plug(&plug);
    }
    if (retval > 0) {
    *ppos = pos + retval;
    --- linux-next.orig/fs/direct-io.c 2012-05-03 19:32:57.000000000 +0800
    +++ linux-next/fs/direct-io.c 2012-05-03 19:33:27.235124073 +0800
    @@ -1106,6 +1106,7 @@ do_blockdev_direct_IO(int rw, struct kio
    unsigned long user_addr;
    size_t bytes;
    struct buffer_head map_bh = { 0, };
    + struct blk_plug plug;

    if (rw & WRITE)
    rw = WRITE_ODIRECT;
    @@ -1221,6 +1222,8 @@ do_blockdev_direct_IO(int rw, struct kio
    PAGE_SIZE - user_addr / PAGE_SIZE);
    }

    + blk_start_plug(&plug);
    +
    for (seg = 0; seg < nr_segs; seg++) {
    user_addr = (unsigned long)iov[seg].iov_base;
    sdio.size += bytes = iov[seg].iov_len;
    @@ -1279,6 +1282,8 @@ do_blockdev_direct_IO(int rw, struct kio
    if (sdio.bio)
    dio_bio_submit(dio, &sdio);

    + blk_finish_plug(&plug);
    +
    /*
    * It is possible that, we return short IO due to end of file.
    * In that case, we need to release all the pages we got hold on.

    \
     
     \ /
      Last update: 2012-05-06 14:01    [W:0.027 / U:327.100 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site