Skip to content

Commit

Permalink
Delay injection can cause indefinitely hung zios
Browse files Browse the repository at this point in the history
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
  • Loading branch information
shartse authored and behlendorf committed Feb 15, 2019
1 parent a28c1a5 commit f545b6a
Showing 1 changed file with 1 addition and 0 deletions.
1 change: 1 addition & 0 deletions module/zfs/zio.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit f545b6a

Please sign in to comment.