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

xen-devel

[Top] [All Lists]

[Xen-devel] [PATCH 1 of 4] blktap2: Sort out tapdisk IPC init

To: xen-devel@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-devel] [PATCH 1 of 4] blktap2: Sort out tapdisk IPC init
From: Daniel Stodden <daniel.stodden@xxxxxxxxxx>
Date: 2010年1月28日 22:37:43 -0000
Delivery-date: 2010年1月28日 14:39:33 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <patchbomb.1264718262@xxxxxxxxxxxxxxxxxxxxxxx>
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.1264718262@xxxxxxxxxxxxxxxxxxxxxxx>
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 9da64803841f4d8d8816f6d0218cbc6b672f7903
# Parent 2636e561970898517def148c19e04581b12dc860
blktap2: Sort out tapdisk IPC init.
Move I/O and event callbacks setup out of tapdisk-server, into tapdisk-ipc.
diff -r 2636e5619708 -r 9da64803841f tools/blktap2/drivers/tapdisk-ipc.c
--- a/tools/blktap2/drivers/tapdisk-ipc.c Tue Jan 26 15:54:40 2010 +0000
+++ 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 2636e5619708 -r 9da64803841f tools/blktap2/drivers/tapdisk-ipc.h
--- a/tools/blktap2/drivers/tapdisk-ipc.h Tue Jan 26 15:54:40 2010 +0000
+++ 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 2636e5619708 -r 9da64803841f tools/blktap2/drivers/tapdisk-server.c
--- a/tools/blktap2/drivers/tapdisk-server.c Tue Jan 26 15:54:40 2010 +0000
+++ 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 2636e5619708 -r 9da64803841f tools/blktap2/drivers/tapdisk-server.h
--- a/tools/blktap2/drivers/tapdisk-server.h Tue Jan 26 15:54:40 2010 +0000
+++ 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>
Previous by Date: [Xen-devel] [PATCH 2 of 4] blktap2: Sort out tapdisk AIO init , Daniel Stodden
Next by Date: [Xen-devel] [PATCH 4 of 4] blktap2: Prefer AIO eventfd support on kernels >= 2.6.22 , Daniel Stodden
Previous by Thread: [Xen-devel] [PATCH 2 of 4] blktap2: Sort out tapdisk AIO init , Daniel Stodden
Next by Thread: [Xen-devel] [PATCH 4 of 4] blktap2: Prefer AIO eventfd support on kernels >= 2.6.22 , Daniel Stodden
Indexes: [Date] [Thread] [Top] [All Lists]

Copyright ©, Citrix Systems Inc. All rights reserved. Legal and Privacy
Citrix This site is hosted by Citrix

AltStyle によって変換されたページ (->オリジナル) /