Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:lafenghu
xen
tapdisk-ioemu-shutdown-fix.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File tapdisk-ioemu-shutdown-fix.patch of Package xen
From 9062564d79cb45029403cc998b48410e42ead924 Mon Sep 17 00:00:00 2001 From: Kevin Wolf <kwolf@suse.de> Date: Tue, 10 Mar 2009 16:45:44 +0100 Subject: [PATCH 6/6] tapdisk-ioemu: Fix shutdown condition Even when opening the only image a tapdisk-ioemu instance is responsible for fails, it can't immediately shut down. blktapctrl still wants to communicate with tapdisk-ioemu and close the disk. This patch changes tapdisk-ioemu to count the connections to blktapctrl rather than the number of opened disk images. Signed-off-by: Kevin Wolf <kwolf@suse.de> --- hw/xen_blktap.c | 5 ++++- tapdisk-ioemu.c | 13 ++++++++++--- 2 files changed, 14 insertions(+), 4 deletions(-) Index: xen-4.1.2-testing/tools/ioemu-qemu-xen/hw/xen_blktap.c =================================================================== --- xen-4.1.2-testing.orig/tools/ioemu-qemu-xen/hw/xen_blktap.c +++ xen-4.1.2-testing/tools/ioemu-qemu-xen/hw/xen_blktap.c @@ -67,6 +67,7 @@ int read_fd; int write_fd; static pid_t process; +int connected_disks = 0; fd_list_entry_t *fd_start = NULL; static void handle_blktap_iomsg(void* private); @@ -541,6 +542,7 @@ static void handle_blktap_ctrlmsg(void* /* Allocate the disk structs */ s = state_init(); + connected_disks++; /*Open file*/ if (s == NULL || open_disk(s, path, msg->drivertype, msg->readonly)) { @@ -591,7 +593,8 @@ static void handle_blktap_ctrlmsg(void* case CTLMSG_CLOSE: s = get_state(msg->cookie); if (s) unmap_disk(s); - break; + connected_disks--; + break; case CTLMSG_PID: memset(buf, 0x00, MSG_SIZE); Index: xen-4.1.2-testing/tools/ioemu-qemu-xen/tapdisk-ioemu.c =================================================================== --- xen-4.1.2-testing.orig/tools/ioemu-qemu-xen/tapdisk-ioemu.c +++ xen-4.1.2-testing/tools/ioemu-qemu-xen/tapdisk-ioemu.c @@ -14,6 +14,7 @@ extern void qemu_aio_init(void); extern void qemu_aio_poll(void); extern void *fd_start; +extern int connected_disks; int domid = 0; FILE* logfile; @@ -76,7 +77,7 @@ int main(void) int max_fd; fd_set rfds; struct timeval tv; - void *old_fd_start = NULL; + int old_connected_disks = 0; /* Daemonize */ if (fork() != 0) @@ -128,11 +129,17 @@ int main(void) pioh = &ioh->next; } + if (old_connected_disks != connected_disks) + fprintf(stderr, "connected disks: %d => %d\n", + old_connected_disks, connected_disks); + /* Exit when the last image has been closed */ - if (old_fd_start != NULL && fd_start == NULL) + if (old_connected_disks != 0 && connected_disks == 0) { + fprintf(stderr, "Last image is closed, exiting.\n"); exit(0); + } - old_fd_start = fd_start; + old_connected_disks = connected_disks; } return 0; }
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor