Only record zio->io_delay on reads and writes
While investigating https://github.com/zfsonlinux/zfs/issues/6425 I noticed that ioctl ZIOs were not setting zio->io_delay correctly. They would set the start time in zio_vdev_io_start(), but never set the end time in zio_vdev_io_done(), since ioctls skip it and go straight to zio_done(). This was causing spurious "delayed IO" events to appear, which would eventually get rate-limited and displayed as "Missed events" messages in zed. To get around the problem, this patch only sets zio->io_delay for read and write ZIOs, since that's all we care about anyway. Reviewed-by: Giuseppe Di Natale <dinatale2@llnl.gov> Reviewed-by: George Melikov <mail@gmelikov.ru> Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Tony Hutter <hutter2@llnl.gov> Closes #6425 Closes #6440
This commit is contained in:
parent
12acabe2a4
commit
07cbcd5089
|
@ -3278,9 +3278,9 @@ zio_vdev_io_start(zio_t *zio)
|
||||||
zio_interrupt(zio);
|
zio_interrupt(zio);
|
||||||
return (ZIO_PIPELINE_STOP);
|
return (ZIO_PIPELINE_STOP);
|
||||||
}
|
}
|
||||||
|
zio->io_delay = gethrtime();
|
||||||
}
|
}
|
||||||
|
|
||||||
zio->io_delay = gethrtime();
|
|
||||||
vd->vdev_ops->vdev_op_io_start(zio);
|
vd->vdev_ops->vdev_op_io_start(zio);
|
||||||
return (ZIO_PIPELINE_STOP);
|
return (ZIO_PIPELINE_STOP);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue