]> bbs.cooldavid.org Git - net-next-2.6.git/commitdiff
gfs2: replace barriers with explicit flush / FUA usage
authorChristoph Hellwig <hch@infradead.org>
Wed, 18 Aug 2010 09:29:13 +0000 (05:29 -0400)
committerJens Axboe <jaxboe@fusionio.com>
Fri, 10 Sep 2010 10:35:39 +0000 (12:35 +0200)
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>
Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
fs/gfs2/log.c
fs/gfs2/rgrp.c

index cde1248a62255ae9bdb03b4c2757a71e973fa089..9c65170e932ee92b87126f2e04bca1a067b0245f 100644 (file)
@@ -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);
index 171a744f8e45d172f4e43eb793ae4e08dba8ba23..3793164729186bfd7796280c00736ae307cf382d 100644 (file)
@@ -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;
        }