aboutsummaryrefslogtreecommitdiffstats
path: root/include/sys/dmu_objset.h
diff options
context:
space:
mode:
authorBrian Behlendorf <[email protected]>2017-01-28 12:13:34 -0800
committerGitHub <[email protected]>2017-01-28 12:13:34 -0800
commita32494d22ac25c35c5d26eb0b2607ea68adb93cd (patch)
tree6aea4fc77bc90bc0ac3bcb542af2589bfbd37b88 /include/sys/dmu_objset.h
parent3130b84e94717fe9aad67a14defe79bb7f10fa9f (diff)
Fix suspend Godfather I/Os io_reexecute bits
After resuming a pool the godfather zio could have both the ZIO_REEXECUTE_NOW and ZIO_REEXECUTE_SUSPEND bits set. This can occur if some child zios set ZIO_REEXECUTE_NOW while other set ZIO_REEXECUTE_SUSPEND. The godfather zio can inherit both flags in zio_notify_parent(). The child zios which assigned the ZIO_REEXECUTE_SUSPEND flag will be removed from the godfather's child list and added to the spa->spa_suspend_zio_root child list. While child zios with the ZIO_REEXECUTE_NOW bit set remain being monitored by the godfather zio. When the godfather zio executes zio_done() the presence of the ZIO_REEXECUTE_SUSPEND bit results in all io_reexecute being cleared. These child zios will then not be re-executed and instead will be destroyed and lost. The most straight forward way to address this situation is to only clear the ZIO_REEXECUTE_SUSPEND bit and leave the ZIO_REEXECUTE_NOW bit set. Reviewed-by: George Melikov <[email protected]> Reviewed-by: Brian Behlendorf <[email protected]> Signed-off-by: yuxiang <[email protected]>
Diffstat (limited to 'include/sys/dmu_objset.h')
0 files changed, 0 insertions, 0 deletions