Hi Pawel, Sorry for the late reply. On Wed, Apr 10, 2019 at 3:28 AM Pawel Baldysiak <pawel.baldysiak@xxxxxxxxx> wrote: > > On 3/27/19 13:48, Pawel Baldysiak wrote: > > Mdadm expects that setting drive as faulty will fail with -EBUSY only if > > this operation will cause RAID to be failed. If this happens, it will > > try to stop the array. Currently -EBUSY might also be returned if rdev > > is in the middle of the removal process - for example there is a race > > with mdmon that already requested the drive to be failed/removed. > > > > If rdev does not contain mddev, return -ENODEV instead, so the caller > > can distinguish between those two cases and behave accordingly. > > > > Signed-off-by: Pawel Baldysiak <pawel.baldysiak@xxxxxxxxx> > > --- > > drivers/md/md.c | 4 ++-- > > 1 file changed, 2 insertions(+), 2 deletions(-) > > > > diff --git a/drivers/md/md.c b/drivers/md/md.c > > index 245ab4a571a5..177cdf26b276 100644 > > --- a/drivers/md/md.c > > +++ b/drivers/md/md.c > > @@ -3245,10 +3245,10 @@ rdev_attr_store(struct kobject *kobj, struct attribute *attr, > > return -EIO; > > if (!capable(CAP_SYS_ADMIN)) > > return -EACCES; > > - rv = mddev ? mddev_lock(mddev): -EBUSY; > > + rv = mddev ? mddev_lock(mddev) : -ENODEV; > > if (!rv) { > > if (rdev->mddev == NULL) > > - rv = -EBUSY; > > + rv = -ENODEV; > > else > > rv = entry->store(rdev, page, length); > > mddev_unlock(mddev); > > I think we should fix this in md.c:state_store(). rdev_attr_store() applies to all the files. Could you please look into this? Thanks, Song