summaryrefslogtreecommitdiff
path: root/rumpdisk/block-rump.c
diff options
context:
space:
mode:
Diffstat (limited to 'rumpdisk/block-rump.c')
-rw-r--r--rumpdisk/block-rump.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/rumpdisk/block-rump.c b/rumpdisk/block-rump.c
index 474852cd..e094a199 100644
--- a/rumpdisk/block-rump.c
+++ b/rumpdisk/block-rump.c
@@ -151,6 +151,19 @@ device_dealloc (void *d)
rump_sys_reboot (0, NULL);
}
+static void
+device_shutdown (void)
+{
+ struct block_data *bd = block_head;
+
+ while (bd)
+ {
+ device_close((void *)bd);
+ bd = bd->next;
+ }
+ rump_sys_reboot (0, NULL);
+}
+
static io_return_t
device_open (mach_port_t reply_port, mach_msg_type_name_t reply_port_type,
dev_mode_t mode, char *name, device_t * devp,
@@ -360,7 +373,8 @@ static struct machdev_device_emulation_ops rump_block_emulation_ops = {
NULL,
NULL,
NULL,
- NULL
+ NULL,
+ device_shutdown
};
void