md: use seconds granularity for error logging
The md code stores the exact time of the last error in the last_read_error variable using a timespec structure. It only ever uses the seconds portion of that though, so we can use a scalar for it. There won't be an overflow in 2038 here, because it already used monotonic time and 32-bit is enough for that, but I've decided to use time64_t for consistency in the conversion. Signed-off-by: Arnd Bergmann <arnd@arndb.de> Signed-off-by: Shaohua Li <shli@fb.com>
This commit is contained in:
parent
d787be4092
commit
0e3ef49eda
|
@ -3173,8 +3173,7 @@ int md_rdev_init(struct md_rdev *rdev)
|
|||
rdev->data_offset = 0;
|
||||
rdev->new_data_offset = 0;
|
||||
rdev->sb_events = 0;
|
||||
rdev->last_read_error.tv_sec = 0;
|
||||
rdev->last_read_error.tv_nsec = 0;
|
||||
rdev->last_read_error = 0;
|
||||
rdev->sb_loaded = 0;
|
||||
rdev->bb_page = NULL;
|
||||
atomic_set(&rdev->nr_pending, 0);
|
||||
|
|
|
@ -99,7 +99,7 @@ struct md_rdev {
|
|||
atomic_t read_errors; /* number of consecutive read errors that
|
||||
* we have tried to ignore.
|
||||
*/
|
||||
struct timespec last_read_error; /* monotonic time since our
|
||||
time64_t last_read_error; /* monotonic time since our
|
||||
* last read error
|
||||
*/
|
||||
atomic_t corrected_errors; /* number of corrected read errors,
|
||||
|
|
|
@ -2174,21 +2174,20 @@ static void recovery_request_write(struct mddev *mddev, struct r10bio *r10_bio)
|
|||
*/
|
||||
static void check_decay_read_errors(struct mddev *mddev, struct md_rdev *rdev)
|
||||
{
|
||||
struct timespec cur_time_mon;
|
||||
long cur_time_mon;
|
||||
unsigned long hours_since_last;
|
||||
unsigned int read_errors = atomic_read(&rdev->read_errors);
|
||||
|
||||
ktime_get_ts(&cur_time_mon);
|
||||
cur_time_mon = ktime_get_seconds();
|
||||
|
||||
if (rdev->last_read_error.tv_sec == 0 &&
|
||||
rdev->last_read_error.tv_nsec == 0) {
|
||||
if (rdev->last_read_error == 0) {
|
||||
/* first time we've seen a read error */
|
||||
rdev->last_read_error = cur_time_mon;
|
||||
return;
|
||||
}
|
||||
|
||||
hours_since_last = (cur_time_mon.tv_sec -
|
||||
rdev->last_read_error.tv_sec) / 3600;
|
||||
hours_since_last = (long)(cur_time_mon -
|
||||
rdev->last_read_error) / 3600;
|
||||
|
||||
rdev->last_read_error = cur_time_mon;
|
||||
|
||||
|
|
Loading…
Reference in New Issue