scsi: libfc: fix seconds_since_last_reset calculation
The fc_get_host_stats() function contains a complex conversion from jiffies to timespec to seconds. As we try to get rid of uses of struct timespec, we can clean this up and replace it with a simpler computation. Simply dividing the difference in jiffies by HZ is not only much more efficient, it also avoids a problem that causes the seconds_since_last_reset value to be incorrect if jiffies has overrun since the 'boot_time' value was recorded. Signed-off-by: Arnd Bergmann <arnd@arndb.de> Reviewed-by: Bart Van Assche <bart.vanassche@sandisk.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
Родитель
0da21c4417
Коммит
540eb1eef0
|
@ -301,7 +301,6 @@ struct fc_host_statistics *fc_get_host_stats(struct Scsi_Host *shost)
|
||||||
{
|
{
|
||||||
struct fc_host_statistics *fc_stats;
|
struct fc_host_statistics *fc_stats;
|
||||||
struct fc_lport *lport = shost_priv(shost);
|
struct fc_lport *lport = shost_priv(shost);
|
||||||
struct timespec v0, v1;
|
|
||||||
unsigned int cpu;
|
unsigned int cpu;
|
||||||
u64 fcp_in_bytes = 0;
|
u64 fcp_in_bytes = 0;
|
||||||
u64 fcp_out_bytes = 0;
|
u64 fcp_out_bytes = 0;
|
||||||
|
@ -309,9 +308,7 @@ struct fc_host_statistics *fc_get_host_stats(struct Scsi_Host *shost)
|
||||||
fc_stats = &lport->host_stats;
|
fc_stats = &lport->host_stats;
|
||||||
memset(fc_stats, 0, sizeof(struct fc_host_statistics));
|
memset(fc_stats, 0, sizeof(struct fc_host_statistics));
|
||||||
|
|
||||||
jiffies_to_timespec(jiffies, &v0);
|
fc_stats->seconds_since_last_reset = (lport->boot_time - jiffies) / HZ;
|
||||||
jiffies_to_timespec(lport->boot_time, &v1);
|
|
||||||
fc_stats->seconds_since_last_reset = (v0.tv_sec - v1.tv_sec);
|
|
||||||
|
|
||||||
for_each_possible_cpu(cpu) {
|
for_each_possible_cpu(cpu) {
|
||||||
struct fc_stats *stats;
|
struct fc_stats *stats;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче