mirror of https://gitee.com/openkylin/linux.git
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: NeilBrown <neilb@suse.de>
This commit is contained in:
parent
b6a9ce688f
commit
848b318236
|
@ -3811,13 +3811,13 @@ static sector_t reshape_request(mddev_t *mddev, sector_t sector_nr, int *skipped
|
||||||
safepos = conf->reshape_safe;
|
safepos = conf->reshape_safe;
|
||||||
sector_div(safepos, data_disks);
|
sector_div(safepos, data_disks);
|
||||||
if (mddev->delta_disks < 0) {
|
if (mddev->delta_disks < 0) {
|
||||||
writepos -= reshape_sectors;
|
writepos -= min(reshape_sectors, writepos);
|
||||||
readpos += reshape_sectors;
|
readpos += reshape_sectors;
|
||||||
safepos += reshape_sectors;
|
safepos += reshape_sectors;
|
||||||
} else {
|
} else {
|
||||||
writepos += reshape_sectors;
|
writepos += reshape_sectors;
|
||||||
readpos -= reshape_sectors;
|
readpos -= min(reshape_sectors, readpos);
|
||||||
safepos -= reshape_sectors;
|
safepos -= min(reshape_sectors, safepos);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 'writepos' is the most advanced device address we might write.
|
/* 'writepos' is the most advanced device address we might write.
|
||||||
|
|
Loading…
Reference in New Issue