lkml.org 
[lkml]   [2010]   [Aug]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[078/111] Btrfs: do not try and lookup the file extent when finishing ordered io
    2.6.32-stable review patch.  If anyone has any objections, please let us know.

    ------------------

    From: Josef Bacik <josef@redhat.com>

    commit efd049fb26a162c3830fd3cb1001fdc09b147f3b upstream.

    When running the following fio job

    [torrent]
    filename=torrent-test
    rw=randwrite
    size=4g
    filesize=4g
    bs=4k
    ioengine=sync

    you would see long stalls where no work was being done. That is because we were
    doing all this extra work to read in the file extent outside of the transaction,
    however in the random io case this ends up hurting us because the file extents
    are not there to begin with. So axe this logic, since we end up reading in the
    file extent when we go to update it anyway. This took the fio job from 11 mb/s
    with several ~10 second stalls to 24 mb/s to a couple of 1-2 second stalls.

    Signed-off-by: Josef Bacik <josef@redhat.com>
    Signed-off-by: Chris Mason <chris.mason@oracle.com>
    Acked-by: Jeff Mahoney <jeffm@suse.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

    ---
    fs/btrfs/inode.c | 46 ++--------------------------------------------
    1 file changed, 2 insertions(+), 44 deletions(-)

    --- a/fs/btrfs/inode.c
    +++ b/fs/btrfs/inode.c
    @@ -1680,24 +1680,6 @@ static int insert_reserved_file_extent(s
    * before we start the transaction. It limits the amount of btree
    * reads required while inside the transaction.
    */
    -static noinline void reada_csum(struct btrfs_root *root,
    - struct btrfs_path *path,
    - struct btrfs_ordered_extent *ordered_extent)
    -{
    - struct btrfs_ordered_sum *sum;
    - u64 bytenr;
    -
    - sum = list_entry(ordered_extent->list.next, struct btrfs_ordered_sum,
    - list);
    - bytenr = sum->sums[0].bytenr;
    -
    - /*
    - * we don't care about the results, the point of this search is
    - * just to get the btree leaves into ram
    - */
    - btrfs_lookup_csum(NULL, root->fs_info->csum_root, path, bytenr, 0);
    -}
    -
    /* as ordered data IO finishes, this gets called so we can finish
    * an ordered extent if the range of bytes in the file it covers are
    * fully written.
    @@ -1708,7 +1690,6 @@ static int btrfs_finish_ordered_io(struc
    struct btrfs_trans_handle *trans;
    struct btrfs_ordered_extent *ordered_extent = NULL;
    struct extent_io_tree *io_tree = &BTRFS_I(inode)->io_tree;
    - struct btrfs_path *path;
    int compressed = 0;
    int ret;

    @@ -1716,32 +1697,9 @@ static int btrfs_finish_ordered_io(struc
    if (!ret)
    return 0;

    - /*
    - * before we join the transaction, try to do some of our IO.
    - * This will limit the amount of IO that we have to do with
    - * the transaction running. We're unlikely to need to do any
    - * IO if the file extents are new, the disk_i_size checks
    - * covers the most common case.
    - */
    - if (start < BTRFS_I(inode)->disk_i_size) {
    - path = btrfs_alloc_path();
    - if (path) {
    - ret = btrfs_lookup_file_extent(NULL, root, path,
    - inode->i_ino,
    - start, 0);
    - ordered_extent = btrfs_lookup_ordered_extent(inode,
    - start);
    - if (!list_empty(&ordered_extent->list)) {
    - btrfs_release_path(root, path);
    - reada_csum(root, path, ordered_extent);
    - }
    - btrfs_free_path(path);
    - }
    - }
    -
    - if (!ordered_extent)
    - ordered_extent = btrfs_lookup_ordered_extent(inode, start);
    + ordered_extent = btrfs_lookup_ordered_extent(inode, start);
    BUG_ON(!ordered_extent);
    +
    if (test_bit(BTRFS_ORDERED_NOCOW, &ordered_extent->flags)) {
    BUG_ON(!list_empty(&ordered_extent->list));
    ret = btrfs_ordered_update_i_size(inode, 0, ordered_extent);



    \
     
     \ /
      Last update: 2010-08-12 02:33    [W:4.264 / U:0.048 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site