]> xenbits.xensource.com Git - people/dstodden/blktap.git/commitdiff
CA-51905: Partially revert 590:df25c3e1f79f (Shorten tapdisk_vbd_open_vdi ...)
authorDaniel Stodden <daniel.stodden@citrix.com>
Tue, 8 Mar 2011 08:52:02 +0000 (00:52 -0800)
committerDaniel Stodden <daniel.stodden@citrix.com>
Tue, 8 Mar 2011 08:52:02 +0000 (00:52 -0800)
Breaking resume on 'secondary' nodes. Won't get rid of that before SM
moves to chain declarations.

Signed-off-by: Daniel Stodden <daniel.stodden@citrix.com>
drivers/tapdisk-control.c
drivers/tapdisk-vbd.c
drivers/tapdisk-vbd.h
drivers/tapdisk.h

index 90603e7a67fd821a78c30d29293fa58ab82aadf2..fe4b674e347c741ee679b180a0529f047d16ca23 100644 (file)
@@ -712,50 +712,32 @@ tapdisk_control_open_image(struct tapdisk_ctl_conn *conn,
                flags |= TD_OPEN_RDONLY;
        if (request->u.params.flags & TAPDISK_MESSAGE_FLAG_SHARED)
                flags |= TD_OPEN_SHAREABLE;
+       if (request->u.params.flags & TAPDISK_MESSAGE_FLAG_ADD_CACHE)
+               flags |= TD_OPEN_ADD_CACHE;
        if (request->u.params.flags & TAPDISK_MESSAGE_FLAG_VHD_INDEX)
                flags |= TD_OPEN_VHD_INDEX;
+       if (request->u.params.flags & TAPDISK_MESSAGE_FLAG_LOG_DIRTY)
+               flags |= TD_OPEN_LOG_DIRTY;
+       if (request->u.params.flags & TAPDISK_MESSAGE_FLAG_ADD_LCACHE)
+               flags |= TD_OPEN_LOCAL_CACHE;
        if (request->u.params.flags & TAPDISK_MESSAGE_FLAG_REUSE_PRT)
                flags |= TD_OPEN_REUSE_PARENT;
-
-        err = tapdisk_vbd_open_vdi(vbd, request->u.params.path, flags,
-                                   request->u.params.prt_devnum);
-       if (err)
-               goto out;
-
-       if (request->u.params.flags & TAPDISK_MESSAGE_FLAG_LOG_DIRTY) {
-               err = tapdisk_vbd_add_dirty_log(vbd);
-               if (err)
-                       goto fail_close;
-       }
-
-       if (request->u.params.flags & TAPDISK_MESSAGE_FLAG_ADD_CACHE) {
-               err = tapdisk_vbd_add_block_cache(vbd);
-               if (err)
-                       goto fail_close;
-       }
-
-       if (request->u.params.flags & TAPDISK_MESSAGE_FLAG_ADD_LCACHE) {
-               err = tapdisk_vbd_add_local_cache(vbd);
-               if (err)
-                       goto fail_close;
-       }
-
+       if (request->u.params.flags & TAPDISK_MESSAGE_FLAG_STANDBY)
+               flags |= TD_OPEN_STANDBY;
        if (request->u.params.flags & TAPDISK_MESSAGE_FLAG_SECONDARY) {
-               const char *name;
-               int standby;
-               name     = request->u.params.secondary;
-               standby  = request->u.params.flags;
-               standby &= TAPDISK_MESSAGE_FLAG_STANDBY;
-               standby  = !!standby;
-
-               err = tapdisk_vbd_add_secondary(vbd, name, standby);
-               if (err)
-                       goto fail_close;
+               char *name = strdup(request->u.params.secondary);
+               if (!name) {
+                       err = -errno;
+                       goto out;
+               }
+               vbd->secondary_name = name;
+               flags |= TD_OPEN_SECONDARY;
        }
 
-       err = tapdisk_vbd_validate_chain(vbd);
+       err = tapdisk_vbd_open_vdi(vbd, request->u.params.path, flags,
+                                  request->u.params.prt_devnum);
        if (err)
-               goto fail_close;
+               goto out;
 
        err = tapdisk_vbd_get_disk_info(vbd, &info);
        if (err)
index b1ec21ba7d11e866bb5ae2d598ddb273c5b8d4b9..f7641c9d2d7a149ef76f8d2440d8b4b111cc36e1 100644 (file)
@@ -126,7 +126,7 @@ tapdisk_vbd_initialize(int rfd, int wfd, uint16_t uuid)
        return 0;
 }
 
-int
+static int
 tapdisk_vbd_validate_chain(td_vbd_t *vbd)
 {
        return tapdisk_image_validate_chain(&vbd->images);
@@ -151,7 +151,7 @@ tapdisk_vbd_close_vdi(td_vbd_t *vbd)
        td_flag_set(vbd->state, TD_VBD_CLOSED);
 }
 
-int
+static int
 tapdisk_vbd_add_block_cache(td_vbd_t *vbd)
 {
        int err;
@@ -213,7 +213,7 @@ done:
        return 0;
 }
 
-int
+static int
 tapdisk_vbd_add_local_cache(td_vbd_t *vbd)
 {
        int err;
@@ -266,15 +266,15 @@ done:
 }
 
 int
-tapdisk_vbd_add_secondary(td_vbd_t *vbd, const char *name, int standby)
+tapdisk_vbd_add_secondary(td_vbd_t *vbd)
 {
        td_image_t *leaf, *second = NULL;
        const char *path;
        int type, err;
 
-       DPRINTF("Adding secondary image: %s\n", name);
+       DPRINTF("Adding secondary image: %s\n", vbd->secondary_name);
 
-       type = tapdisk_disktype_parse_params(name, &path);
+       type = tapdisk_disktype_parse_params(vbd->secondary_name, &path);
        if (type < 0)
                return type;
 
@@ -297,7 +297,7 @@ tapdisk_vbd_add_secondary(td_vbd_t *vbd, const char *name, int standby)
 
        vbd->secondary = second;
        leaf->flags |= TD_IGNORE_ENOSPC;
-       if (standby) {
+       if (td_flag_test(vbd->flags, TD_OPEN_STANDBY)) {
                DPRINTF("In standby mode\n");
                vbd->secondary_mode = TD_VBD_SECONDARY_STANDBY;
        } else {
@@ -379,7 +379,7 @@ fail:
 }
 #endif
 
-int
+static int
 tapdisk_vbd_add_dirty_log(td_vbd_t *vbd)
 {
        int err;
@@ -449,6 +449,34 @@ tapdisk_vbd_open_vdi(td_vbd_t *vbd, const char *name, td_flag_t flags, int prt_d
        if (err)
                goto fail;
 
+       if (td_flag_test(vbd->flags, TD_OPEN_LOG_DIRTY)) {
+               err = tapdisk_vbd_add_dirty_log(vbd);
+               if (err)
+                       goto fail;
+       }
+
+       if (td_flag_test(vbd->flags, TD_OPEN_ADD_CACHE)) {
+               err = tapdisk_vbd_add_block_cache(vbd);
+               if (err)
+                       goto fail;
+       }
+
+       if (td_flag_test(vbd->flags, TD_OPEN_LOCAL_CACHE)) {
+               err = tapdisk_vbd_add_local_cache(vbd);
+               if (err)
+                       goto fail;
+       }
+
+       err = tapdisk_vbd_validate_chain(vbd);
+       if (err)
+               goto fail;
+
+       if (td_flag_test(vbd->flags, TD_OPEN_SECONDARY)) {
+               err = tapdisk_vbd_add_secondary(vbd);
+               if (err)
+                       goto fail;
+       }
+
        td_flag_clear(vbd->state, TD_VBD_CLOSED);
 
        vbd->flags = flags;
index bfcee0f0bf637fef7e670d20666dd4ebc8ab3a0c..a35c1c74bc6f8a2b00a752d6df5a1c39dc84c26a 100644 (file)
@@ -66,6 +66,7 @@ struct td_vbd_handle {
        struct list_head            images;
 
        int                         parent_devnum;
+       char                       *secondary_name;
        td_image_t                 *secondary;
        uint8_t                     secondary_mode;
 
@@ -179,10 +180,4 @@ void tapdisk_vbd_check_progress(td_vbd_t *);
 void tapdisk_vbd_debug(td_vbd_t *);
 void tapdisk_vbd_stats(td_vbd_t *, td_stats_t *);
 
-int tapdisk_vbd_add_dirty_log(td_vbd_t *);
-int tapdisk_vbd_add_block_cache(td_vbd_t *);
-int tapdisk_vbd_add_local_cache(td_vbd_t *);
-int tapdisk_vbd_add_secondary(td_vbd_t *, const char *, int);
-int tapdisk_vbd_validate_chain(td_vbd_t *);
-
 #endif
index c40d9b5c964dfb0490c302c9ff1d435bc890db83..db1b4f60ec537a752b25a462f2b4ac7af48f26bc 100644 (file)
 #define TD_OPEN_RDONLY               0x00004
 #define TD_OPEN_STRICT               0x00008
 #define TD_OPEN_SHAREABLE            0x00010
+#define TD_OPEN_ADD_CACHE            0x00020
 #define TD_OPEN_VHD_INDEX            0x00040
+#define TD_OPEN_LOG_DIRTY            0x00080
+#define TD_OPEN_LOCAL_CACHE          0x00100
 #define TD_OPEN_REUSE_PARENT         0x00200
+#define TD_OPEN_SECONDARY            0x00400
+#define TD_OPEN_STANDBY              0x00800
 #define TD_IGNORE_ENOSPC             0x01000
 
 #define TD_CREATE_SPARSE             0x00001