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 1 of 4] blktap2: Sort out tapdisk IPC init

To: Xen <xen-devel@xxxxxxxxxxxxxxxxxxx>
Subject: [Xen-devel] [PATCH 1 of 4] blktap2: Sort out tapdisk IPC init
From: Daniel Stodden <daniel.stodden@xxxxxxxxxx>
Date: Fri, 29 Jan 2010 07:44:24 -0000
Delivery-date: Thu, 28 Jan 2010 23:47:27 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <patchbomb.1264751063@xxxxxxxxxxxxxxxxxxx>
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: <patchbomb.1264751063@xxxxxxxxxxxxxxxxxxx>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Mercurial-patchbomb/1.3.1
# HG changeset patch
# User Daniel Stodden <daniel.stodden@xxxxxxxxxx>
# Date 1258172773 28800
# Node ID aa0d1795f1ecfdc7e235b9ada87fb7a71e455f7f
# Parent  aa1ad4c5c931e0c402dc2c8356d1604a156d02f0
blktap2: Sort out tapdisk IPC init.

Move I/O and event callbacks setup out of tapdisk-server, into tapdisk-ipc.

Signed-off-by: Daniel Stodden <daniel.stodden@xxxxxxxxxx>

diff -r aa1ad4c5c931 -r aa0d1795f1ec tools/blktap2/drivers/tapdisk-ipc.c
--- a/tools/blktap2/drivers/tapdisk-ipc.c       Thu Jan 28 23:30:21 2010 -0800
+++ b/tools/blktap2/drivers/tapdisk-ipc.c       Fri Nov 13 20:26:13 2009 -0800
@@ -30,12 +30,86 @@
 #include <stdlib.h>
 #include <unistd.h>
 #include <string.h>
+#include <fcntl.h>
 
 #include "tapdisk.h"
 #include "tapdisk-ipc.h"
 #include "tapdisk-vbd.h"
 #include "tapdisk-server.h"
 
+static void
+tapdisk_ipc_read_event(event_id_t id, char mode, void *private)
+{
+       td_ipc_t *ipc = private;
+       tapdisk_ipc_read(ipc);
+}
+
+static void
+__tapdisk_ipc_init(td_ipc_t *ipc)
+{
+       ipc->rfd = -1;
+       ipc->wfd = -1;
+       ipc->rfd_event = -1;
+}
+
+int
+tapdisk_ipc_open(td_ipc_t *ipc, const char *read, const char *write)
+{
+       int err;
+
+       memset(ipc, 0, sizeof(td_ipc_t));
+       __tapdisk_ipc_init(ipc);
+
+       if (read) {
+               ipc->rfd = open(read, O_RDWR | O_NONBLOCK);
+               if (ipc->rfd < 0) {
+                       err = -errno;
+                       EPRINTF("FD open failed %s: %d\n", read, err);
+                       goto fail;
+               }
+
+               ipc->rfd_event = 
+                       tapdisk_server_register_event(SCHEDULER_POLL_READ_FD,
+                                                     ipc->rfd, 0,
+                                                     tapdisk_ipc_read_event,
+                                                     ipc);
+               if (ipc->rfd_event < 0) {
+                       err = ipc->rfd_event;
+                       goto fail;
+               }
+       }
+
+       if (write) {
+               ipc->wfd = open(write, O_RDWR | O_NONBLOCK);
+               if (ipc->wfd < 0) {
+                       err = -errno;
+                       EPRINTF("FD open failed %s, %d\n", write, err);
+                       goto fail;
+               }
+       }
+
+       return 0;
+
+fail:
+       tapdisk_ipc_close(ipc);
+       return err;
+}
+
+void
+tapdisk_ipc_close(td_ipc_t *ipc)
+{
+       if (ipc->rfd > 0)
+               close(ipc->rfd);
+
+       if (ipc->wfd > 0)
+               close(ipc->wfd);
+
+       if (ipc->rfd_event >= 0)
+               tapdisk_server_unregister_event(ipc->rfd_event);
+
+       __tapdisk_ipc_init(ipc);
+}
+
 static int
 tapdisk_ipc_write_message(int fd, tapdisk_message_t *message, int timeout)
 {
diff -r aa1ad4c5c931 -r aa0d1795f1ec tools/blktap2/drivers/tapdisk-ipc.h
--- a/tools/blktap2/drivers/tapdisk-ipc.h       Thu Jan 28 23:30:21 2010 -0800
+++ b/tools/blktap2/drivers/tapdisk-ipc.h       Fri Nov 13 20:26:13 2009 -0800
@@ -29,13 +29,17 @@
 #define _TAPDISK_IPC_H_
 
 #include "tapdisk-message.h"
+#include "scheduler.h"
 
 typedef struct td_ipc_handle {
        int                         rfd;
        int                         wfd;
+       event_id_t                  rfd_event;
        td_uuid_t                   uuid;
 } td_ipc_t;
 
+int tapdisk_ipc_open(td_ipc_t *ipc, const char *read, const char *write);
+void tapdisk_ipc_close(td_ipc_t *ipc);
 int tapdisk_ipc_read(td_ipc_t *ipc);
 int tapdisk_ipc_write(td_ipc_t *ipc, int type);
 int tapdisk_ipc_write_error(td_ipc_t *ipc, const char *message);
diff -r aa1ad4c5c931 -r aa0d1795f1ec tools/blktap2/drivers/tapdisk-server.c
--- a/tools/blktap2/drivers/tapdisk-server.c    Thu Jan 28 23:30:21 2010 -0800
+++ b/tools/blktap2/drivers/tapdisk-server.c    Fri Nov 13 20:26:13 2009 -0800
@@ -26,7 +26,6 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 #include <stdio.h>
-#include <fcntl.h>
 #include <errno.h>
 #include <unistd.h>
 #include <stdlib.h>
@@ -223,12 +222,6 @@
 }
 
 static void
-tapdisk_server_read_ipc_message(event_id_t id, char mode, void *private)
-{
-       tapdisk_ipc_read(&server.ipc);
-}
-
-static void
 tapdisk_server_aio_queue_event(event_id_t id, char mode, void *private)
 {
        tapdisk_complete_tiocbs(&server.aio_queue);
@@ -242,6 +235,18 @@
 }
 
 static int
+tapdisk_server_init_ipc(const char *read, const char *write)
+{
+       return tapdisk_ipc_open(&server.ipc, read, write);
+}
+
+static void
+tapdisk_server_close_ipc(void)
+{
+       tapdisk_ipc_close(&server.ipc);
+}
+
+static int
 tapdisk_server_initialize_aio_queue(void)
 {
        int err;
@@ -270,15 +275,7 @@
 tapdisk_server_close(void)
 {
        tapdisk_server_free_aio_queue();
-
-       if (server.control_event)
-               scheduler_unregister_event(&server.scheduler, 
server.control_event);
-
-       if (server.ipc.rfd != -1)
-               close(server.ipc.rfd);
-
-       if (server.ipc.wfd != -1)
-               close(server.ipc.wfd);
+       tapdisk_server_close_ipc();
 }
 
 static void
@@ -334,63 +331,26 @@
 tapdisk_server_initialize(const char *read, const char *write)
 {
        int err;
-       event_id_t event_id;
 
-       event_id = 0;
        memset(&server, 0, sizeof(tapdisk_server_t));
-       server.ipc.rfd = server.ipc.wfd = -1;
-
        INIT_LIST_HEAD(&server.vbds);
 
-       if (read) {
-               server.ipc.rfd = open(read, O_RDWR | O_NONBLOCK);
-               if (server.ipc.rfd < 0) {
-                       err = -errno;
-                       EPRINTF("FD open failed %s: %d\n", read, err);
-                       goto fail;
-               }
-       }
-
-       if (write) {
-               server.ipc.wfd = open(write, O_RDWR | O_NONBLOCK);
-               if (server.ipc.wfd < 0) {
-                       err = -errno;
-                       EPRINTF("FD open failed %s, %d\n", write, err);
-                       goto fail;
-               }
-       }
-
        scheduler_initialize(&server.scheduler);
 
-       if (read) {
-               event_id = scheduler_register_event(&server.scheduler,
-                                                   SCHEDULER_POLL_READ_FD,
-                                                   server.ipc.rfd, 0,
-                                                   
tapdisk_server_read_ipc_message,
-                                                   NULL);
-               if (event_id < 0) {
-                       err = event_id;
-                       goto fail;
-               }
-       }
+       err = tapdisk_server_init_ipc(read, write);
+       if (err)
+               goto fail;
 
        err = tapdisk_server_initialize_aio_queue();
        if (err)
                goto fail;
 
-       server.control_event = event_id;
        server.run = 1;
 
        return 0;
 
 fail:
-       if (server.ipc.rfd > 0)
-               close(server.ipc.rfd);
-       if (server.ipc.wfd > 0)
-               close(server.ipc.wfd);
-       if (event_id > 0)
-               scheduler_unregister_event(&server.scheduler,
-                                          server.control_event);
+       tapdisk_server_close_ipc();
        return err;
 }
 
diff -r aa1ad4c5c931 -r aa0d1795f1ec tools/blktap2/drivers/tapdisk-server.h
--- a/tools/blktap2/drivers/tapdisk-server.h    Thu Jan 28 23:30:21 2010 -0800
+++ b/tools/blktap2/drivers/tapdisk-server.h    Fri Nov 13 20:26:13 2009 -0800
@@ -57,7 +57,6 @@
        td_ipc_t                     ipc;
        struct list_head             vbds;
        scheduler_t                  scheduler;
-       event_id_t                   control_event;
        struct tqueue                aio_queue;
        event_id_t                   aio_queue_event_id;
 } tapdisk_server_t;
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
<Prev in Thread] Current Thread [Next in Thread>