* Copyright (C) 2022 Christoph Hellwig.
*/
+#include <linux/blk_types.h>
#include <linux/bio.h>
#include "bio.h"
#include "ctree.h"
static void btrfs_log_dev_io_error(const struct bio *bio, struct btrfs_device *dev)
{
+ blk_status_t sts = bio->bi_status;
+
if (!dev || !dev->bdev)
return;
- if (bio->bi_status != BLK_STS_IOERR && bio->bi_status != BLK_STS_TARGET)
+ if (unlikely(sts == BLK_STS_OK))
return;
-
+ if (unlikely(sts != BLK_STS_IOERR && sts != BLK_STS_TARGET &&
+ sts != BLK_STS_MEDIUM && sts != BLK_STS_PROTECTION)) {
+ btrfs_warn_rl(dev->fs_info, "bdev %s unexpected block io error: %d",
+ btrfs_dev_name(dev), sts);
+ return;
+ }
if (btrfs_op(bio) == BTRFS_MAP_WRITE)
btrfs_dev_stat_inc_and_print(dev, BTRFS_DEV_STAT_WRITE_ERRS);
else if (!(bio->bi_opf & REQ_RAHEAD))