Commit 848b3182 authored by NeilBrown's avatar NeilBrown
Browse files

md: raid5: avoid sector values going negative when testing reshape progress.



As sector_t in unsigned, we cannot afford to let 'safepos' etc go
negative.
So replace
   a -= b;
by
   a -= min(b,a);

Signed-off-by: default avatarNeilBrown <neilb@suse.de>
parent b6a9ce68
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -3811,13 +3811,13 @@ static sector_t reshape_request(mddev_t *mddev, sector_t sector_nr, int *skipped
	safepos = conf->reshape_safe;
	sector_div(safepos, data_disks);
	if (mddev->delta_disks < 0) {
		writepos -= reshape_sectors;
		writepos -= min(reshape_sectors, writepos);
		readpos += reshape_sectors;
		safepos += reshape_sectors;
	} else {
		writepos += reshape_sectors;
		readpos -= reshape_sectors;
		safepos -= reshape_sectors;
		readpos -= min(reshape_sectors, readpos);
		safepos -= min(reshape_sectors, safepos);
	}

	/* 'writepos' is the most advanced device address we might write.