diff options
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++; |
