From mboxrd@z Thu Jan 1 00:00:00 1970 From: Christoph Hellwig Subject: [PATCH 05/15] gfs2: replace barriers with explicit flush / FUA usage Date: Wed, 18 Aug 2010 05:29:13 -0400 Message-ID: <20100818093500.647814880@bombadil.infradead.org> References: <20100818093432.646633424@bombadil.infradead.org> Cc: chris.mason@oracle.com, swhiteho@redhat.com, konishi.ryusuke@lab.ntt.co.jp, tytso@mit.edu, jack@suse.cz, hirofumi@mail.parknet.co.jp, mfasheh@suse.com, joel.becker@oracle.com, hughd@google.com, linux-fsdevel@vger.kernel.org To: tj@kernel.org Return-path: Received: from bombadil.infradead.org ([18.85.46.34]:48752 "EHLO bombadil.infradead.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752471Ab0HRJf2 (ORCPT ); Wed, 18 Aug 2010 05:35:28 -0400 Content-Disposition: inline; filename=gfs2-use-flush-fua Sender: linux-fsdevel-owner@vger.kernel.org List-ID: 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 Index: linux-2.6/fs/gfs2/log.c =================================================================== --- linux-2.6.orig/fs/gfs2/log.c 2010-08-17 16:19:53.597003932 +0200 +++ linux-2.6/fs/gfs2/log.c 2010-08-17 16:22:04.889005329 +0200 @@ -592,22 +592,13 @@ static void log_write_header(struct gfs2 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: linux-2.6/fs/gfs2/rgrp.c =================================================================== --- linux-2.6.orig/fs/gfs2/rgrp.c 2010-08-17 16:21:23.626253967 +0200 +++ linux-2.6/fs/gfs2/rgrp.c 2010-08-17 16:21:39.702005748 +0200 @@ -854,8 +854,7 @@ static void gfs2_rgrp_send_discards(stru 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; }