lkml.org 
[lkml]   [2010]   [Sep]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 30/41] gfs2: replace barriers with explicit flush / FUA usage
    Date
    From: Christoph Hellwig <hch@infradead.org>

    Switch to the WRITE_FLUSH_FUA flag for log writes, remove the EOPNOTSUPP
    detection for barriers and stop setting the barrier flag for discards.

    Signed-off-by: Christoph Hellwig <hch@lst.de>
    Acked-by: Steven Whitehouse <swhiteho@redhat.com>
    Acked-by: Bob Peterson <rpeterso@redhat.com>
    Signed-off-by: Tejun Heo <tj@kernel.org>
    ---
    fs/gfs2/log.c | 19 +++++--------------
    fs/gfs2/rgrp.c | 5 ++---
    2 files changed, 7 insertions(+), 17 deletions(-)

    diff --git a/fs/gfs2/log.c b/fs/gfs2/log.c
    index cde1248..9c65170 100644
    --- a/fs/gfs2/log.c
    +++ b/fs/gfs2/log.c
    @@ -592,22 +592,13 @@ static void log_write_header(struct gfs2_sbd *sdp, u32 flags, int pull)
    lh->lh_hash = cpu_to_be32(hash);

    bh->b_end_io = end_buffer_write_sync;
    - if (test_bit(SDF_NOBARRIERS, &sdp->sd_flags))
    - goto skip_barrier;
    get_bh(bh);
    - submit_bh(WRITE_BARRIER | REQ_META, bh);
    - wait_on_buffer(bh);
    - if (buffer_eopnotsupp(bh)) {
    - clear_buffer_eopnotsupp(bh);
    - set_buffer_uptodate(bh);
    - fs_info(sdp, "barrier sync failed - disabling barriers\n");
    - set_bit(SDF_NOBARRIERS, &sdp->sd_flags);
    - lock_buffer(bh);
    -skip_barrier:
    - get_bh(bh);
    + if (test_bit(SDF_NOBARRIERS, &sdp->sd_flags))
    submit_bh(WRITE_SYNC | REQ_META, bh);
    - wait_on_buffer(bh);
    - }
    + else
    + submit_bh(WRITE_FLUSH_FUA | REQ_META, bh);
    + wait_on_buffer(bh);
    +
    if (!buffer_uptodate(bh))
    gfs2_io_error_bh(sdp, bh);
    brelse(bh);
    diff --git a/fs/gfs2/rgrp.c b/fs/gfs2/rgrp.c
    index 171a744..3793164 100644
    --- a/fs/gfs2/rgrp.c
    +++ b/fs/gfs2/rgrp.c
    @@ -854,8 +854,7 @@ static void gfs2_rgrp_send_discards(struct gfs2_sbd *sdp, u64 offset,
    if ((start + nr_sects) != blk) {
    rv = blkdev_issue_discard(bdev, start,
    nr_sects, GFP_NOFS,
    - BLKDEV_IFL_WAIT |
    - BLKDEV_IFL_BARRIER);
    + BLKDEV_IFL_WAIT);
    if (rv)
    goto fail;
    nr_sects = 0;
    @@ -870,7 +869,7 @@ start_new_extent:
    }
    if (nr_sects) {
    rv = blkdev_issue_discard(bdev, start, nr_sects, GFP_NOFS,
    - BLKDEV_IFL_WAIT | BLKDEV_IFL_BARRIER);
    + BLKDEV_IFL_WAIT);
    if (rv)
    goto fail;
    }
    --
    1.7.1


    \
     
     \ /
      Last update: 2010-09-03 12:41    [W:4.365 / U:0.000 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site