From 07cbcd5089d65a5b8b9769a412833747f045530c Mon Sep 17 00:00:00 2001 From: Tony Hutter Date: Wed, 2 Aug 2017 09:08:38 -0700 Subject: [PATCH] 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 Reviewed-by: George Melikov Reviewed-by: Brian Behlendorf Signed-off-by: Tony Hutter Closes #6425 Closes #6440 --- module/zfs/zio.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/zfs/zio.c b/module/zfs/zio.c index acfc49eb5f..82e801e831 100644 --- a/module/zfs/zio.c +++ b/module/zfs/zio.c @@ -3278,9 +3278,9 @@ zio_vdev_io_start(zio_t *zio) zio_interrupt(zio); return (ZIO_PIPELINE_STOP); } + zio->io_delay = gethrtime(); } - zio->io_delay = gethrtime(); vd->vdev_ops->vdev_op_io_start(zio); return (ZIO_PIPELINE_STOP); }