@@ -1265,10 +1265,14 @@ static void update_io_ticks(struct block_device *part, unsigned long now,
}
static void blk_additional_latency(struct block_device *part, const int sgrp,
+ struct request_queue *q,
unsigned long duration)
{
unsigned int idx;
+ if (!blk_queue_io_extra_stat(q))
+ return;
+
duration /= NSEC_PER_MSEC;
duration /= HZ_TO_MSEC_NUM;
if (likely(duration > 0)) {
@@ -1281,10 +1285,13 @@ static void blk_additional_latency(struct block_device *part, const int sgrp,
}
static void blk_additional_sector(struct block_device *part, const int sgrp,
- unsigned int sectors)
+ struct request_queue *q, unsigned int sectors)
{
unsigned int idx;
+ if (!blk_queue_io_extra_stat(q))
+ return;
+
if (sectors == 1)
idx = 0;
else
@@ -1300,7 +1307,7 @@ static void blk_account_io_completion(struct request *req, unsigned int bytes)
const int sgrp = op_stat_group(req_op(req));
part_stat_lock();
- blk_additional_sector(req->part, sgrp, bytes >> SECTOR_SHIFT);
+ blk_additional_sector(req->part, sgrp, req->q, bytes >> SECTOR_SHIFT);
part_stat_add(req->part, sectors[sgrp], bytes >> 9);
part_stat_unlock();
}
@@ -1319,7 +1326,7 @@ void blk_account_io_done(struct request *req, u64 now)
part_stat_lock();
update_io_ticks(req->part, jiffies, true);
- blk_additional_latency(req->part, sgrp,
+ blk_additional_latency(req->part, sgrp, req->q,
now - req->start_time_ns);
part_stat_inc(req->part, ios[sgrp]);
part_stat_add(req->part, nsecs[sgrp], now - req->start_time_ns);
@@ -1353,7 +1360,7 @@ static unsigned long __part_start_io_acct(struct block_device *part,
update_io_ticks(part, now, false);
part_stat_inc(part, ios[sgrp]);
part_stat_add(part, sectors[sgrp], sectors);
- blk_additional_sector(part, sgrp, sectors);
+ blk_additional_sector(part, sgrp, part->bd_disk->queue, sectors);
part_stat_local_inc(part, in_flight[op_is_write(op)]);
part_stat_unlock();
@@ -1388,7 +1395,8 @@ static void __part_end_io_acct(struct block_device *part, unsigned int op,
part_stat_lock();
update_io_ticks(part, now, true);
- blk_additional_latency(part, sgrp, jiffies_to_nsecs(duration));
+ blk_additional_latency(part, sgrp, part->bd_disk->queue,
+ jiffies_to_nsecs(duration));
part_stat_add(part, nsecs[sgrp], jiffies_to_nsecs(duration));
part_stat_local_dec(part, in_flight[op_is_write(op)]);
part_stat_unlock();