diff options
Diffstat (limited to 'drivers/md/md-linear.c')
| -rw-r--r-- | drivers/md/md-linear.c | 14 | 
1 files changed, 13 insertions, 1 deletions
diff --git a/drivers/md/md-linear.c b/drivers/md/md-linear.c index 6e7797b4e738..4eb72b9dd933 100644 --- a/drivers/md/md-linear.c +++ b/drivers/md/md-linear.c @@ -223,7 +223,8 @@ static bool linear_make_request(struct mddev *mddev, struct bio *bio)  		     bio_sector < start_sector))  		goto out_of_bounds; -	if (unlikely(is_mddev_broken(tmp_dev->rdev, "linear"))) { +	if (unlikely(is_rdev_broken(tmp_dev->rdev))) { +		md_error(mddev, tmp_dev->rdev);  		bio_io_error(bio);  		return true;  	} @@ -270,6 +271,16 @@ static void linear_status (struct seq_file *seq, struct mddev *mddev)  	seq_printf(seq, " %dk rounding", mddev->chunk_sectors / 2);  } +static void linear_error(struct mddev *mddev, struct md_rdev *rdev) +{ +	if (!test_and_set_bit(MD_BROKEN, &mddev->flags)) { +		char *md_name = mdname(mddev); + +		pr_crit("md/linear%s: Disk failure on %pg detected, failing array.\n", +			md_name, rdev->bdev); +	} +} +  static void linear_quiesce(struct mddev *mddev, int state)  {  } @@ -286,6 +297,7 @@ static struct md_personality linear_personality =  	.hot_add_disk	= linear_add,  	.size		= linear_size,  	.quiesce	= linear_quiesce, +	.error_handler	= linear_error,  };  static int __init linear_init (void)  |