> On Aug 22, 2019, at 9:13 AM, Guilherme G. Piccoli <gpiccoli@xxxxxxxxxxxxx> wrote: > > Currently md raid0/linear are not provided with any mechanism to validate > if an array member got removed or failed. The driver keeps sending BIOs > regardless of the state of array members, and kernel shows state 'clean' > in the 'array_state' sysfs attribute. This leads to the following > situation: if a raid0/linear array member is removed and the array is > mounted, some user writing to this array won't realize that errors are > happening unless they check dmesg or perform one fsync per written file. > Despite udev signaling the member device is gone, 'mdadm' cannot issue the > STOP_ARRAY ioctl successfully, given the array is mounted. [...] > drivers/md/md-linear.c | 9 +++++++++ > drivers/md/md.c | 22 ++++++++++++++++++---- > drivers/md/md.h | 3 +++ > drivers/md/raid0.c | 10 ++++++++++ > 4 files changed, 40 insertions(+), 4 deletions(-) > > diff --git a/drivers/md/md-linear.c b/drivers/md/md-linear.c > index 7354466ddc90..0479ccdbdeeb 100644 > --- a/drivers/md/md-linear.c > +++ b/drivers/md/md-linear.c > @@ -258,6 +258,15 @@ static bool linear_make_request(struct mddev *mddev, struct bio *bio) > bio_sector < start_sector)) > goto out_of_bounds; > > + if (unlikely(!(tmp_dev->rdev->bdev->bd_disk->flags & GENHD_FL_UP))) { > + if (!test_bit(MD_BROKEN, &mddev->flags)) > + pr_warn("md: %s: linear array has a missing/failed member\n", > + mdname(mddev)); > + set_bit(MD_BROKEN, &mddev->flags); > + bio_io_error(bio); > + return true; > + } > + Maybe we can somehow put this block in a helper and use it in both raid0 and linear code? Otherwise, looks good to me. Thanks, Song