Page MenuHomeFreeBSD

D15592.diff
No OneTemporary

D15592.diff

Index: head/sys/kern/vfs_bio.c
===================================================================
--- head/sys/kern/vfs_bio.c
+++ head/sys/kern/vfs_bio.c
@@ -4310,6 +4310,8 @@
extern int inflight_transient_maps;
+static struct bio_queue nondump_bios;
+
void
biodone(struct bio *bp)
{
@@ -4318,6 +4320,17 @@
vm_offset_t start, end;
biotrack(bp, __func__);
+
+ /*
+ * Avoid completing I/O when dumping after a panic since that may
+ * result in a deadlock in the filesystem or pager code. Note that
+ * this doesn't affect dumps that were started manually since we aim
+ * to keep the system usable after it has been resumed.
+ */
+ if (__predict_false(dumping && SCHEDULER_STOPPED())) {
+ TAILQ_INSERT_HEAD(&nondump_bios, bp, bio_queue);
+ return;
+ }
if ((bp->bio_flags & BIO_TRANSIENT_MAPPING) != 0) {
bp->bio_flags &= ~BIO_TRANSIENT_MAPPING;
bp->bio_flags |= BIO_UNMAPPED;

File Metadata

Mime Type
text/plain
Expires
Sat, Mar 14, 10:18 AM (18 h, 24 s)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
29665135
Default Alt Text
D15592.diff (906 B)

Event Timeline