@@ -6019,18 +6019,20 @@ static u64 btrfs_device_read_latency(struct btrfs_device *device)
60196019 u64 avg_wait = 0 ;
60206020
60216021 if (likely (device -> bdev )) {
6022- u64 read_wait = part_stat_read (device -> bdev , nsecs [READ ]);
6023- u64 last_nsecs_read = (u64 )atomic64_read (& device -> last_nsecs_read );
6024- unsigned long read_ios = part_stat_read (device -> bdev , ios [READ ]);
6025- unsigned long last_ios_read = (unsigned long )atomic64_read (& device -> last_ios_read );
60266022 u64 last_io_age = (u64 )atomic64_read (& device -> last_io_age );
60276023
6028- s64 delta_read_wait = read_wait - last_nsecs_read ;
6029- s64 delta_read_ios = read_ios - last_ios_read ;
6024+ if (likely (last_io_age >= 0 && last_io_age < BTRFS_DEVICE_LATENCY_CHECKPOINT_AGE )) {
6025+ u64 read_wait = part_stat_read (device -> bdev , nsecs [READ ]);
6026+ u64 last_nsecs_read = (u64 )atomic64_read (& device -> last_nsecs_read );
6027+ unsigned long read_ios = part_stat_read (device -> bdev , ios [READ ]);
6028+ unsigned long last_ios_read = (unsigned long )atomic64_read (& device -> last_ios_read );
60306029
6031- if (last_io_age >= 0 && last_io_age < BTRFS_DEVICE_LATENCY_CHECKPOINT_AGE
6032- && delta_read_wait > 0 && delta_read_ios > 0 && delta_read_wait >= delta_read_ios )
6033- avg_wait = div_u64 (delta_read_wait , delta_read_ios );
6030+ s64 delta_read_wait = read_wait - last_nsecs_read ;
6031+ s64 delta_read_ios = read_ios - last_ios_read ;
6032+
6033+ if (delta_read_wait > 0 && delta_read_ios > 0 && delta_read_wait >= delta_read_ios )
6034+ avg_wait = div_u64 (delta_read_wait , delta_read_ios );
6035+ }
60346036 }
60356037
60366038 return avg_wait ;
0 commit comments