[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] [PATCH 4 of 9] Support more than 2 FDs per tapdisk



# HG changeset patch
# User Brendan Cully <brendan@xxxxxxxxx>
# Date 1240355510 25200
# Node ID 99c01882edb65e702875afc76319e92b88966402
# Parent  b51238ea926948383500b94cd227321eb40a82dd
Support more than 2 FDs per tapdisk.
The Remus disk replication module needs this to be able to poll the
backup server as well as the underlying disk module.

Signed-off-by: Brendan Cully <brendan@xxxxxxxxx>

diff --git a/tools/blktap/drivers/tapdisk.c b/tools/blktap/drivers/tapdisk.c
--- a/tools/blktap/drivers/tapdisk.c
+++ b/tools/blktap/drivers/tapdisk.c
@@ -132,16 +132,19 @@
 {
        fd_list_entry_t *ptr;
        struct disk_driver *dd;
+       int i;
 
        ptr = fd_start;
        while (ptr != NULL) {
                if (ptr->tap_fd) {
                        FD_SET(ptr->tap_fd, readfds);
                        td_for_each_disk(ptr->s, dd) {
-                               if (dd->io_fd[READ]) 
-                                       FD_SET(dd->io_fd[READ], readfds);
-                               maxfds = (dd->io_fd[READ] > maxfds ? 
-                                         dd->io_fd[READ] : maxfds);
+                               for (i = 0; i < MAX_IOFD; i++) {
+                                       if (dd->io_fd[i]) 
+                                               FD_SET(dd->io_fd[i], readfds);
+                                       maxfds = (dd->io_fd[i] > maxfds ? 
+                                                 dd->io_fd[i] : maxfds);
+                               }
                        }
                        maxfds = (ptr->tap_fd > maxfds ? ptr->tap_fd : maxfds);
                }
@@ -820,13 +823,15 @@
                                int progress_made = 0;
                                struct disk_driver *dd;
                                tapdev_info_t *info = ptr->s->ring_info;
+                               int i;
 
                                td_for_each_disk(ptr->s, dd) {
-                                       if (dd->io_fd[READ] &&
-                                           FD_ISSET(dd->io_fd[READ], 
-                                                    &readfds)) {
-                                               io_done(dd, READ);
-                                               progress_made = 1;
+                                       for (i = 0; i < MAX_IOFD; i++) {
+                                               if (dd->io_fd[i] &&
+                                                   FD_ISSET(dd->io_fd[i], 
&readfds)) {
+                                                       io_done(dd, i);
+                                                       progress_made = 1;
+                                               }
                                        }
                                }
 
diff --git a/tools/blktap/drivers/tapdisk.h b/tools/blktap/drivers/tapdisk.h
--- a/tools/blktap/drivers/tapdisk.h
+++ b/tools/blktap/drivers/tapdisk.h
@@ -74,7 +74,7 @@
 #define SECTOR_SHIFT             9
 #define DEFAULT_SECTOR_SIZE    512
 
-#define MAX_IOFD                 2
+#define MAX_IOFD                 4
 
 #define BLK_NOT_ALLOCATED       99
 #define TD_NO_PARENT             1

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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.