diff options
author | Christoph Hellwig <hch@infradead.org> | 2010-08-18 05:29:12 -0400 |
---|---|---|
committer | Jens Axboe <jaxboe@fusionio.com> | 2010-09-10 06:35:39 -0400 |
commit | c3b9a62c8f932f32a733d6b628f61f3f28345727 (patch) | |
tree | 623a150079db7883444cc404ffcc1e0af4b80b7a /fs/btrfs/disk-io.c | |
parent | 80f6c29d8a758650d5c9eac05074b4b3e8c266df (diff) |
btrfs: 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: Christoph Hellwig <hch@lst.de>
Acked-by: Chris Mason <chris.mason@oracle.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
Diffstat (limited to 'fs/btrfs/disk-io.c')
-rw-r--r-- | fs/btrfs/disk-io.c | 19 |
1 files changed, 4 insertions, 15 deletions
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index 64f10082f048..5e789f4a3ed0 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c | |||
@@ -2063,7 +2063,7 @@ static void btrfs_end_buffer_write_sync(struct buffer_head *bh, int uptodate) | |||
2063 | if (uptodate) { | 2063 | if (uptodate) { |
2064 | set_buffer_uptodate(bh); | 2064 | set_buffer_uptodate(bh); |
2065 | } else { | 2065 | } else { |
2066 | if (!buffer_eopnotsupp(bh) && printk_ratelimit()) { | 2066 | if (printk_ratelimit()) { |
2067 | printk(KERN_WARNING "lost page write due to " | 2067 | printk(KERN_WARNING "lost page write due to " |
2068 | "I/O error on %s\n", | 2068 | "I/O error on %s\n", |
2069 | bdevname(bh->b_bdev, b)); | 2069 | bdevname(bh->b_bdev, b)); |
@@ -2200,21 +2200,10 @@ static int write_dev_supers(struct btrfs_device *device, | |||
2200 | bh->b_end_io = btrfs_end_buffer_write_sync; | 2200 | bh->b_end_io = btrfs_end_buffer_write_sync; |
2201 | } | 2201 | } |
2202 | 2202 | ||
2203 | if (i == last_barrier && do_barriers && device->barriers) { | 2203 | if (i == last_barrier && do_barriers) |
2204 | ret = submit_bh(WRITE_BARRIER, bh); | 2204 | ret = submit_bh(WRITE_FLUSH_FUA, bh); |
2205 | if (ret == -EOPNOTSUPP) { | 2205 | else |
2206 | printk("btrfs: disabling barriers on dev %s\n", | ||
2207 | device->name); | ||
2208 | set_buffer_uptodate(bh); | ||
2209 | device->barriers = 0; | ||
2210 | /* one reference for submit_bh */ | ||
2211 | get_bh(bh); | ||
2212 | lock_buffer(bh); | ||
2213 | ret = submit_bh(WRITE_SYNC, bh); | ||
2214 | } | ||
2215 | } else { | ||
2216 | ret = submit_bh(WRITE_SYNC, bh); | 2206 | ret = submit_bh(WRITE_SYNC, bh); |
2217 | } | ||
2218 | 2207 | ||
2219 | if (ret) | 2208 | if (ret) |
2220 | errors++; | 2209 | errors++; |