summaryrefslogtreecommitdiffstats
path: root/module/zfs
diff options
context:
space:
mode:
authorSara Hartse <[email protected]>2019-02-15 14:44:56 -0800
committerBrian Behlendorf <[email protected]>2019-02-15 14:44:56 -0800
commitf545b6ae00ef77df710ddace328d13e8c5c265bf (patch)
tree505fc6042940448f560840222195143f90f8af69 /module/zfs
parenta28c1a58fef803a63fdfe0390ac529b7c4a18685 (diff)
Delay injection can cause indefinitely hung zios
If we hit the (NSEC_TO_TICK(diff) == 0) condition in zio_delay_interrupt, zio_interrupt is never called and the zio does not progress. Reviewed by: Matt Ahrens <[email protected]> Reviewed-by: Brian Behlendorf <[email protected]> Reviewed-by: George Melikov <[email protected]> Signed-off-by: sara hartse <[email protected]> Closes #8404
Diffstat (limited to 'module/zfs')
-rw-r--r--module/zfs/zio.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/module/zfs/zio.c b/module/zfs/zio.c
index 0dd63322f..7bb3c0825 100644
--- a/module/zfs/zio.c
+++ b/module/zfs/zio.c
@@ -1834,6 +1834,7 @@ zio_delay_interrupt(zio_t *zio)
if (NSEC_TO_TICK(diff) == 0) {
/* Our delay is less than a jiffy - just spin */
zfs_sleep_until(zio->io_target_timestamp);
+ zio_interrupt(zio);
} else {
/*
* Use taskq_dispatch_delay() in the place of