Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f1e4d518 authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Jens Axboe
Browse files

gfs2: replace barriers with explicit flush / FUA usage



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: default avatarChristoph Hellwig <hch@lst.de>
Acked-by: default avatarSteven Whitehouse <swhiteho@redhat.com>
Acked-by: default avatarBob Peterson <rpeterso@redhat.com>
Signed-off-by: default avatarTejun Heo <tj@kernel.org>
Signed-off-by: default avatarJens Axboe <jaxboe@fusionio.com>
parent c3b9a62c
Loading
Loading
Loading
Loading
+5 −14
Original line number Diff line number Diff line
@@ -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);
	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);
+2 −3
Original line number Diff line number Diff line
@@ -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;
	}