Restore use of polling mode for disk cache flush in case of kernel panic.
While I am not sure that any extra hardware access is a good idea after panic, that is an existing behaviour that should better work correctly.
This commit is contained in:
parent
8b02079f36
commit
2f87dfb0db
@ -44,6 +44,7 @@ __FBSDID("$FreeBSD$");
|
||||
#include <sys/eventhandler.h>
|
||||
#include <sys/malloc.h>
|
||||
#include <sys/cons.h>
|
||||
#include <sys/proc.h>
|
||||
#include <sys/reboot.h>
|
||||
#include <geom/geom_disk.h>
|
||||
#endif /* _KERNEL */
|
||||
@ -1907,11 +1908,16 @@ adaflush(void)
|
||||
int error;
|
||||
|
||||
CAM_PERIPH_FOREACH(periph, &adadriver) {
|
||||
/* If we paniced with lock held - not recurse here. */
|
||||
if (cam_periph_owned(periph))
|
||||
continue;
|
||||
cam_periph_lock(periph);
|
||||
softc = (struct ada_softc *)periph->softc;
|
||||
if (SCHEDULER_STOPPED()) {
|
||||
/* If we paniced with the lock held, do not recurse. */
|
||||
if (!cam_periph_owned(periph) &&
|
||||
(softc->flags & ADA_FLAG_OPEN)) {
|
||||
adadump(softc->disk, NULL, 0, 0, 0);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
cam_periph_lock(periph);
|
||||
/*
|
||||
* We only sync the cache if the drive is still open, and
|
||||
* if the drive is capable of it..
|
||||
|
@ -45,6 +45,7 @@ __FBSDID("$FreeBSD$");
|
||||
#include <sys/malloc.h>
|
||||
#include <sys/cons.h>
|
||||
#include <sys/endian.h>
|
||||
#include <sys/proc.h>
|
||||
#include <geom/geom.h>
|
||||
#include <geom/geom_disk.h>
|
||||
#endif /* _KERNEL */
|
||||
@ -3671,8 +3672,16 @@ dashutdown(void * arg, int howto)
|
||||
int error;
|
||||
|
||||
CAM_PERIPH_FOREACH(periph, &dadriver) {
|
||||
cam_periph_lock(periph);
|
||||
softc = (struct da_softc *)periph->softc;
|
||||
if (SCHEDULER_STOPPED()) {
|
||||
/* If we paniced with the lock held, do not recurse. */
|
||||
if (!cam_periph_owned(periph) &&
|
||||
(softc->flags & DA_FLAG_OPEN)) {
|
||||
dadump(softc->disk, NULL, 0, 0, 0);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
cam_periph_lock(periph);
|
||||
|
||||
/*
|
||||
* We only sync the cache if the drive is still open, and
|
||||
|
Loading…
x
Reference in New Issue
Block a user