aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs/volumes.c
diff options
context:
space:
mode:
authorStefan Behrens <sbehrens@giantdisaster.de>2012-06-14 10:42:31 -0400
committerChris Mason <chris.mason@fusionio.com>2012-07-02 15:36:23 -0400
commit597a60fadedf9a40fdff8735054bf772b3dafd57 (patch)
tree5fcd3c7c3ae4a28001eaea8ab0ea0ef48e456647 /fs/btrfs/volumes.c
parentd42244a0d36ad0939c5f173ebf15841a0678899c (diff)
Btrfs: don't count I/O statistic read errors for missing devices
It is normal behaviour of the low level btrfs function btrfs_map_bio() to complete a bio with -EIO if the device is missing, instead of just preventing the bio creation in an earlier step. This used to cause I/O statistic read error increments and annoying printk_ratelimited messages. This commit fixes the issue. Signed-off-by: Stefan Behrens <sbehrens@giantdisaster.de> Reported-by: Carey Underwood <cwillu@cwillu.com>
Diffstat (limited to 'fs/btrfs/volumes.c')
-rw-r--r--fs/btrfs/volumes.c22
1 files changed, 12 insertions, 10 deletions
diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c
index 8a3d2594b807..3f292cf693a7 100644
--- a/fs/btrfs/volumes.c
+++ b/fs/btrfs/volumes.c
@@ -4061,16 +4061,18 @@ static void btrfs_end_bio(struct bio *bio, int err)
4061 4061
4062 BUG_ON(stripe_index >= bbio->num_stripes); 4062 BUG_ON(stripe_index >= bbio->num_stripes);
4063 dev = bbio->stripes[stripe_index].dev; 4063 dev = bbio->stripes[stripe_index].dev;
4064 if (bio->bi_rw & WRITE) 4064 if (dev->bdev) {
4065 btrfs_dev_stat_inc(dev, 4065 if (bio->bi_rw & WRITE)
4066 BTRFS_DEV_STAT_WRITE_ERRS); 4066 btrfs_dev_stat_inc(dev,
4067 else 4067 BTRFS_DEV_STAT_WRITE_ERRS);
4068 btrfs_dev_stat_inc(dev, 4068 else
4069 BTRFS_DEV_STAT_READ_ERRS); 4069 btrfs_dev_stat_inc(dev,
4070 if ((bio->bi_rw & WRITE_FLUSH) == WRITE_FLUSH) 4070 BTRFS_DEV_STAT_READ_ERRS);
4071 btrfs_dev_stat_inc(dev, 4071 if ((bio->bi_rw & WRITE_FLUSH) == WRITE_FLUSH)
4072 BTRFS_DEV_STAT_FLUSH_ERRS); 4072 btrfs_dev_stat_inc(dev,
4073 btrfs_dev_stat_print_on_error(dev); 4073 BTRFS_DEV_STAT_FLUSH_ERRS);
4074 btrfs_dev_stat_print_on_error(dev);
4075 }
4074 } 4076 }
4075 } 4077 }
4076 4078