md: Fix is_mddev_idle test (again).
There are two problems with is_mddev_idle. 1/ sync_io is 'atomic_t' and hence 'int'. curr_events and all the rest are 'long'. So if sync_io were to wrap on a 64bit host, the value of curr_events would go very negative suddenly, and take a very long time to return to positive. So do all calculations as 'int'. That gives us plenty of precision for what we need. 2/ To initialise rdev->last_events we simply call is_mddev_idle, on the assumption that it will make sure that last_events is in a suitable range. It used to do this, but now it does not. So now we need to be more explicit about initialisation. Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
@@ -51,7 +51,7 @@ struct mdk_rdev_s
|
||||
|
||||
sector_t size; /* Device size (in blocks) */
|
||||
mddev_t *mddev; /* RAID array if running */
|
||||
long last_events; /* IO event timestamp */
|
||||
int last_events; /* IO event timestamp */
|
||||
|
||||
struct block_device *bdev; /* block device handle */
|
||||
|
||||
|
Reference in New Issue
Block a user