WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

[Xen-devel] [PATCH 6/6] tapdisk-ioemu: Fix shutdown condition

To: xen-devel@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-devel] [PATCH 6/6] tapdisk-ioemu: Fix shutdown condition
From: Kevin Wolf <kwolf@xxxxxxx>
Date: Fri, 13 Mar 2009 10:16:43 +0100
Cc: Ian.Jackson@xxxxxxxxxxxxx, Kevin Wolf <kwolf@xxxxxxx>
Delivery-date: Fri, 13 Mar 2009 02:12:29 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <1236935803-32548-1-git-send-email-kwolf@xxxxxxx>
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
References: <1236935803-32548-1-git-send-email-kwolf@xxxxxxx>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
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@xxxxxxx>
---
 hw/xen_blktap.c |    5 ++++-
 tapdisk-ioemu.c |   13 ++++++++++---
 2 files changed, 14 insertions(+), 4 deletions(-)

diff --git a/hw/xen_blktap.c b/hw/xen_blktap.c
index f04f30d..5cbdbcb 100644
--- a/hw/xen_blktap.c
+++ b/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);
@@ -543,6 +544,7 @@ static void handle_blktap_ctrlmsg(void* private)
 
                        /* Allocate the disk structs */
                        s = state_init();
+                       connected_disks++;
 
                        /*Open file*/
                        if (s == NULL || open_disk(s, path, msg->drivertype, 
msg->readonly)) {
@@ -593,7 +595,8 @@ static void handle_blktap_ctrlmsg(void* private)
                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);
diff --git a/tapdisk-ioemu.c b/tapdisk-ioemu.c
index 31f7f59..f87381b 100644
--- a/tapdisk-ioemu.c
+++ b/tapdisk-ioemu.c
@@ -18,6 +18,7 @@ extern void *qemu_mallocz(size_t size);
 extern void qemu_free(void *ptr);
 
 extern void *fd_start;
+extern int connected_disks;
 
 int domid = 0;
 FILE* logfile;
@@ -84,7 +85,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)
@@ -136,11 +137,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;
 }
-- 
1.6.0.2


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel