Stop using a shutdown hook for softraid(4) and explicitly shutdown
authormpi <mpi@openbsd.org>
Thu, 10 Jul 2014 12:21:08 +0000 (12:21 +0000)
committermpi <mpi@openbsd.org>
Thu, 10 Jul 2014 12:21:08 +0000 (12:21 +0000)
commite6c0a3ab0f24067fbed4d75cf6aee13c41493a9b
tree79f2bcfc8034005099d2c618ca412c5588aa19bc
parentf9d2b303ec1fce6c9b7a56e6152777b39196d275
Stop using a shutdown hook for softraid(4) and explicitly shutdown
the disciplines right after vfs_shutdown().

This change is required in order to be able to set `cold' to 1 before
traversing the device (mainbus) tree for DVACT_POWERDOWN when halting
a machine.  Yes, this is ugly because sr_shutdown() needs to sleep.  But
at least it is obvious and hopefully somebody will be ofended and fix
it.

In order to properly flush the cache of the disks under softraid0,
sr_shutdown() now propagates DVACT_POWERDOWN for this particular subtree
of devices which are not under mainbus.  As a side effect sd(4) shutdown
hook should no longer be necessary.

Tested by stsp@ and Jean-Philippe Ouellet.

ok deraadt@, stsp@, jsing@
sys/dev/softraid.c
sys/dev/softraidvar.h
sys/kern/vfs_subr.c