Commit c42d3240 authored by Pawel Baldysiak's avatar Pawel Baldysiak Committed by Song Liu
Browse files

md: return -ENODEV if rdev has no mddev assigned



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.

Reviewed-by: default avatarNeilBrown <neilb@suse.com>
Signed-off-by: default avatarPawel Baldysiak <pawel.baldysiak@intel.com>
Signed-off-by: default avatarSong Liu <songliubraving@fb.com>
parent 2c88e3c7
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -3380,10 +3380,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);