Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 199050ea authored by Neil Brown's avatar Neil Brown
Browse files

rationalise return value for ->hot_add_disk method.



For all array types but linear, ->hot_add_disk returns 1 on
success, 0 on failure.
For linear, it returns 0 on success and -errno on failure.

This doesn't cause a functional problem because the ->hot_add_disk
function of linear is used quite differently to the others.
However it is confusing.

So convert all to return 0 for success or -errno on failure
and fix call sites to match.

Signed-off-by: default avatarNeil Brown <neilb@suse.de>
parent 6c2fce2e
Loading
Loading
Loading
Loading
+3 −4
Original line number Original line Diff line number Diff line
@@ -1977,10 +1977,8 @@ slot_store(mdk_rdev_t *rdev, const char *buf, size_t len)
			rdev->saved_raid_disk = -1;
			rdev->saved_raid_disk = -1;
		err = rdev->mddev->pers->
		err = rdev->mddev->pers->
			hot_add_disk(rdev->mddev, rdev);
			hot_add_disk(rdev->mddev, rdev);
		if (err != 1) {
		if (err) {
			rdev->raid_disk = -1;
			rdev->raid_disk = -1;
			if (err == 0)
				return -EEXIST;
			return err;
			return err;
		}
		}
		sprintf(nm, "rd%d", rdev->raid_disk);
		sprintf(nm, "rd%d", rdev->raid_disk);
@@ -5920,7 +5918,8 @@ static int remove_and_add_spares(mddev_t *mddev)
			if (rdev->raid_disk < 0
			if (rdev->raid_disk < 0
			    && !test_bit(Faulty, &rdev->flags)) {
			    && !test_bit(Faulty, &rdev->flags)) {
				rdev->recovery_offset = 0;
				rdev->recovery_offset = 0;
				if (mddev->pers->hot_add_disk(mddev,rdev)) {
				if (mddev->pers->
				    hot_add_disk(mddev, rdev) == 0) {
					char nm[20];
					char nm[20];
					sprintf(nm, "rd%d", rdev->raid_disk);
					sprintf(nm, "rd%d", rdev->raid_disk);
					if (sysfs_create_link(&mddev->kobj,
					if (sysfs_create_link(&mddev->kobj,
+5 −3
Original line number Original line Diff line number Diff line
@@ -281,7 +281,7 @@ static int multipath_add_disk(mddev_t *mddev, mdk_rdev_t *rdev)
{
{
	multipath_conf_t *conf = mddev->private;
	multipath_conf_t *conf = mddev->private;
	struct request_queue *q;
	struct request_queue *q;
	int found = 0;
	int err = -EEXIST;
	int path;
	int path;
	struct multipath_info *p;
	struct multipath_info *p;
	int first = 0;
	int first = 0;
@@ -312,11 +312,13 @@ static int multipath_add_disk(mddev_t *mddev, mdk_rdev_t *rdev)
			rdev->raid_disk = path;
			rdev->raid_disk = path;
			set_bit(In_sync, &rdev->flags);
			set_bit(In_sync, &rdev->flags);
			rcu_assign_pointer(p->rdev, rdev);
			rcu_assign_pointer(p->rdev, rdev);
			found = 1;
			err = 0;
			break;
		}
		}


	print_multipath_conf(conf);
	print_multipath_conf(conf);
	return found;

	return err;
}
}


static int multipath_remove_disk(mddev_t *mddev, int number)
static int multipath_remove_disk(mddev_t *mddev, int number)
+3 −3
Original line number Original line Diff line number Diff line
@@ -1100,7 +1100,7 @@ static int raid1_spare_active(mddev_t *mddev)
static int raid1_add_disk(mddev_t *mddev, mdk_rdev_t *rdev)
static int raid1_add_disk(mddev_t *mddev, mdk_rdev_t *rdev)
{
{
	conf_t *conf = mddev->private;
	conf_t *conf = mddev->private;
	int found = 0;
	int err = -EEXIST;
	int mirror = 0;
	int mirror = 0;
	mirror_info_t *p;
	mirror_info_t *p;
	int first = 0;
	int first = 0;
@@ -1124,7 +1124,7 @@ static int raid1_add_disk(mddev_t *mddev, mdk_rdev_t *rdev)


			p->head_position = 0;
			p->head_position = 0;
			rdev->raid_disk = mirror;
			rdev->raid_disk = mirror;
			found = 1;
			err = 0;
			/* As all devices are equivalent, we don't need a full recovery
			/* As all devices are equivalent, we don't need a full recovery
			 * if this was recently any drive of the array
			 * if this was recently any drive of the array
			 */
			 */
@@ -1135,7 +1135,7 @@ static int raid1_add_disk(mddev_t *mddev, mdk_rdev_t *rdev)
		}
		}


	print_conf(conf);
	print_conf(conf);
	return found;
	return err;
}
}


static int raid1_remove_disk(mddev_t *mddev, int number)
static int raid1_remove_disk(mddev_t *mddev, int number)
+5 −5
Original line number Original line Diff line number Diff line
@@ -1113,7 +1113,7 @@ static int raid10_spare_active(mddev_t *mddev)
static int raid10_add_disk(mddev_t *mddev, mdk_rdev_t *rdev)
static int raid10_add_disk(mddev_t *mddev, mdk_rdev_t *rdev)
{
{
	conf_t *conf = mddev->private;
	conf_t *conf = mddev->private;
	int found = 0;
	int err = -EEXIST;
	int mirror;
	int mirror;
	mirror_info_t *p;
	mirror_info_t *p;
	int first = 0;
	int first = 0;
@@ -1123,9 +1123,9 @@ static int raid10_add_disk(mddev_t *mddev, mdk_rdev_t *rdev)
		/* only hot-add to in-sync arrays, as recovery is
		/* only hot-add to in-sync arrays, as recovery is
		 * very different from resync
		 * very different from resync
		 */
		 */
		return 0;
		return -EBUSY;
	if (!enough(conf))
	if (!enough(conf))
		return 0;
		return -EINVAL;


	if (rdev->raid_disk)
	if (rdev->raid_disk)
		first = last = rdev->raid_disk;
		first = last = rdev->raid_disk;
@@ -1151,7 +1151,7 @@ static int raid10_add_disk(mddev_t *mddev, mdk_rdev_t *rdev)


			p->head_position = 0;
			p->head_position = 0;
			rdev->raid_disk = mirror;
			rdev->raid_disk = mirror;
			found = 1;
			err = 0;
			if (rdev->saved_raid_disk != mirror)
			if (rdev->saved_raid_disk != mirror)
				conf->fullsync = 1;
				conf->fullsync = 1;
			rcu_assign_pointer(p->rdev, rdev);
			rcu_assign_pointer(p->rdev, rdev);
@@ -1159,7 +1159,7 @@ static int raid10_add_disk(mddev_t *mddev, mdk_rdev_t *rdev)
		}
		}


	print_conf(conf);
	print_conf(conf);
	return found;
	return err;
}
}


static int raid10_remove_disk(mddev_t *mddev, int number)
static int raid10_remove_disk(mddev_t *mddev, int number)
+5 −5
Original line number Original line Diff line number Diff line
@@ -4604,7 +4604,7 @@ static int raid5_remove_disk(mddev_t *mddev, int number)
static int raid5_add_disk(mddev_t *mddev, mdk_rdev_t *rdev)
static int raid5_add_disk(mddev_t *mddev, mdk_rdev_t *rdev)
{
{
	raid5_conf_t *conf = mddev->private;
	raid5_conf_t *conf = mddev->private;
	int found = 0;
	int err = -EEXIST;
	int disk;
	int disk;
	struct disk_info *p;
	struct disk_info *p;
	int first = 0;
	int first = 0;
@@ -4612,7 +4612,7 @@ static int raid5_add_disk(mddev_t *mddev, mdk_rdev_t *rdev)


	if (mddev->degraded > conf->max_degraded)
	if (mddev->degraded > conf->max_degraded)
		/* no point adding a device */
		/* no point adding a device */
		return 0;
		return -EINVAL;


	if (rdev->raid_disk >= 0)
	if (rdev->raid_disk >= 0)
		first = last = rdev->raid_disk;
		first = last = rdev->raid_disk;
@@ -4631,14 +4631,14 @@ static int raid5_add_disk(mddev_t *mddev, mdk_rdev_t *rdev)
		if ((p=conf->disks + disk)->rdev == NULL) {
		if ((p=conf->disks + disk)->rdev == NULL) {
			clear_bit(In_sync, &rdev->flags);
			clear_bit(In_sync, &rdev->flags);
			rdev->raid_disk = disk;
			rdev->raid_disk = disk;
			found = 1;
			err = 0;
			if (rdev->saved_raid_disk != disk)
			if (rdev->saved_raid_disk != disk)
				conf->fullsync = 1;
				conf->fullsync = 1;
			rcu_assign_pointer(p->rdev, rdev);
			rcu_assign_pointer(p->rdev, rdev);
			break;
			break;
		}
		}
	print_raid5_conf(conf);
	print_raid5_conf(conf);
	return found;
	return err;
}
}


static int raid5_resize(mddev_t *mddev, sector_t sectors)
static int raid5_resize(mddev_t *mddev, sector_t sectors)
@@ -4739,7 +4739,7 @@ static int raid5_start_reshape(mddev_t *mddev)
	rdev_for_each(rdev, rtmp, mddev)
	rdev_for_each(rdev, rtmp, mddev)
		if (rdev->raid_disk < 0 &&
		if (rdev->raid_disk < 0 &&
		    !test_bit(Faulty, &rdev->flags)) {
		    !test_bit(Faulty, &rdev->flags)) {
			if (raid5_add_disk(mddev, rdev)) {
			if (raid5_add_disk(mddev, rdev) == 0) {
				char nm[20];
				char nm[20];
				set_bit(In_sync, &rdev->flags);
				set_bit(In_sync, &rdev->flags);
				added_devices++;
				added_devices++;