From mboxrd@z Thu Jan 1 00:00:00 1970 From: Christoph Hellwig Subject: [PATCH 07/15] nilfs2: replace barriers with explicit flush / FUA usage Date: Wed, 18 Aug 2010 05:29:15 -0400 Message-ID: <20100818093501.008646608@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]:48828 "EHLO bombadil.infradead.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752625Ab0HRJff (ORCPT ); Wed, 18 Aug 2010 05:35:35 -0400 Content-Disposition: inline; filename=nilfs2-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. XXX: nilfs2 does not actually wait for discards to finish, so the code after this patch is almost guaranteed to be incorrect when dicards are used. Signed-off-by: Christoph Hellwig Index: linux-2.6/fs/nilfs2/super.c =================================================================== --- linux-2.6.orig/fs/nilfs2/super.c 2010-08-17 16:37:07.848008123 +0200 +++ linux-2.6/fs/nilfs2/super.c 2010-08-17 16:39:44.528037875 +0200 @@ -183,17 +183,9 @@ static int nilfs_sync_super(struct nilfs retry: set_buffer_dirty(nilfs->ns_sbh[0]); - if (nilfs_test_opt(sbi, BARRIER)) { err = __sync_dirty_buffer(nilfs->ns_sbh[0], - WRITE_SYNC | WRITE_BARRIER); - if (err == -EOPNOTSUPP) { - nilfs_warning(sbi->s_super, __func__, - "barrier-based sync failed. " - "disabling barriers\n"); - nilfs_clear_opt(sbi, BARRIER); - goto retry; - } + WRITE_SYNC | WRITE_FLUSH_FUA); } else { err = sync_dirty_buffer(nilfs->ns_sbh[0]); } Index: linux-2.6/fs/nilfs2/the_nilfs.c =================================================================== --- linux-2.6.orig/fs/nilfs2/the_nilfs.c 2010-08-17 16:38:22.118254665 +0200 +++ linux-2.6/fs/nilfs2/the_nilfs.c 2010-08-17 16:38:50.459265700 +0200 @@ -674,7 +674,7 @@ int nilfs_discard_segments(struct the_ni start * sects_per_block, nblocks * sects_per_block, GFP_NOFS, - BLKDEV_IFL_BARRIER); + 0); if (ret < 0) return ret; nblocks = 0; @@ -684,7 +684,7 @@ int nilfs_discard_segments(struct the_ni ret = blkdev_issue_discard(nilfs->ns_bdev, start * sects_per_block, nblocks * sects_per_block, - GFP_NOFS, BLKDEV_IFL_BARRIER); + GFP_NOFS, 0); return ret; }