[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [RFC Patch v3 11/18] block-remus: use correct way to get remus_image
We set remus_image in backup_read(). If we do flush before the first read operation, remus_image will be NULL. Pass image to remus via the callback td_open(). Signed-off-by: Wen Congyang <wency@xxxxxxxxxxxxxx> Cc: Shriram Rajagopalan <rshriram@xxxxxxxxx> --- tools/blktap2/drivers/block-aio.c | 6 ++++-- tools/blktap2/drivers/block-cache.c | 5 +++-- tools/blktap2/drivers/block-log.c | 5 +++-- tools/blktap2/drivers/block-qcow.c | 6 ++++-- tools/blktap2/drivers/block-ram.c | 6 ++++-- tools/blktap2/drivers/block-remus.c | 8 ++++---- tools/blktap2/drivers/block-vhd.c | 6 ++++-- tools/blktap2/drivers/tapdisk-interface.c | 3 +-- tools/blktap2/drivers/tapdisk.h | 2 +- 9 files changed, 28 insertions(+), 19 deletions(-) diff --git a/tools/blktap2/drivers/block-aio.c b/tools/blktap2/drivers/block-aio.c index 1b560e5..27ba07d 100644 --- a/tools/blktap2/drivers/block-aio.c +++ b/tools/blktap2/drivers/block-aio.c @@ -40,6 +40,7 @@ #include "tapdisk.h" #include "tapdisk-driver.h" #include "tapdisk-interface.h" +#include "tapdisk-image.h" #define MAX_AIO_REQS TAPDISK_DATA_REQUESTS @@ -111,11 +112,12 @@ static int tdaio_get_image_info(int fd, td_disk_info_t *info) } /* Open the disk file and initialize aio state. */ -int tdaio_open(td_driver_t *driver, const char *name, td_flag_t flags, - td_uuid_t uuid) +int tdaio_open(td_driver_t *driver, td_image_t *image, td_uuid_t uuid) { int i, fd, ret, o_flags; struct tdaio_state *prv; + const char *name = image->name; + td_flag_t flags = image->flags; ret = 0; prv = (struct tdaio_state *)driver->data; diff --git a/tools/blktap2/drivers/block-cache.c b/tools/blktap2/drivers/block-cache.c index cd6ea6a..ff2c773 100644 --- a/tools/blktap2/drivers/block-cache.c +++ b/tools/blktap2/drivers/block-cache.c @@ -517,12 +517,13 @@ block_cache_put_request(block_cache_t *cache, block_cache_request_t *breq) } static int -block_cache_open(td_driver_t *driver, const char *name, td_flag_t flags, - td_uuid_t uuid) +block_cache_open(td_driver_t *driver, td_image_t *image, td_uuid_t uuid) { int i, err; radix_tree_t *tree; block_cache_t *cache; + const char *name = image->name; + td_flag_t flags = image->flags; if (!td_flag_test(flags, TD_OPEN_RDONLY)) return -EINVAL; diff --git a/tools/blktap2/drivers/block-log.c b/tools/blktap2/drivers/block-log.c index 7b33b63..80351d3 100644 --- a/tools/blktap2/drivers/block-log.c +++ b/tools/blktap2/drivers/block-log.c @@ -585,11 +585,12 @@ static void ctl_request(event_id_t id, char mode, void *private) static int tdlog_close(td_driver_t*); -static int tdlog_open(td_driver_t* driver, const char* name, td_flag_t flags, - td_uuid_t uuid) +static int tdlog_open(td_driver_t* driver, td_image_t *image, td_uuid_t uuid) { struct tdlog_state* s = (struct tdlog_state*)driver->data; int rc; + const char *name = image->name; + td_flag_t flags = image->flags; memset(s, 0, sizeof(*s)); diff --git a/tools/blktap2/drivers/block-qcow.c b/tools/blktap2/drivers/block-qcow.c index 64dfafc..c63bd9d 100644 --- a/tools/blktap2/drivers/block-qcow.c +++ b/tools/blktap2/drivers/block-qcow.c @@ -45,6 +45,7 @@ #include "qcow.h" #include "blk.h" #include "atomicio.h" +#include "tapdisk-image.h" /* *BSD has no O_LARGEFILE */ #ifndef O_LARGEFILE @@ -865,14 +866,15 @@ out: } /* Open the disk file and initialize qcow state. */ -int tdqcow_open (td_driver_t *driver, const char *name, td_flag_t flags, - td_uuid_t uuid) +int tdqcow_open (td_driver_t *driver, td_image_t *image, td_uuid_t uuid) { int fd, len, i, ret, size, o_flags; td_disk_info_t *bs = &(driver->info); struct tdqcow_state *s = (struct tdqcow_state *)driver->data; QCowHeader header; uint64_t final_cluster = 0; + const char *name = image->name; + td_flag_t flags = image->flags; DPRINTF("QCOW: Opening %s\n", name); diff --git a/tools/blktap2/drivers/block-ram.c b/tools/blktap2/drivers/block-ram.c index b64a194..3e148ab 100644 --- a/tools/blktap2/drivers/block-ram.c +++ b/tools/blktap2/drivers/block-ram.c @@ -40,6 +40,7 @@ #include "tapdisk.h" #include "tapdisk-driver.h" #include "tapdisk-interface.h" +#include "tapdisk-image.h" char *img; long int disksector_size; @@ -108,13 +109,14 @@ static int get_image_info(int fd, td_disk_info_t *info) } /* Open the disk file and initialize ram state. */ -int tdram_open (td_driver_t *driver, const char *name, td_flag_t flags, - td_uuid_t uuid) +int tdram_open (td_driver_t *driver, td_image_t *image, td_uuid_t uuid) { char *p; uint64_t size; int i, fd, ret = 0, count = 0, o_flags; struct tdram_state *prv = (struct tdram_state *)driver->data; + const char *name = image->name; + td_flag_t flags = image->flags; connections++; diff --git a/tools/blktap2/drivers/block-remus.c b/tools/blktap2/drivers/block-remus.c index 504f6b4..23a908a 100644 --- a/tools/blktap2/drivers/block-remus.c +++ b/tools/blktap2/drivers/block-remus.c @@ -1152,8 +1152,6 @@ void backup_queue_read(td_driver_t *driver, td_request_t treq) { struct tdremus_state *s = (struct tdremus_state *)driver->data; int i; - if(!remus_image) - remus_image = treq.image; /* check if this read is queued in any currently ongoing flush */ if (ramdisk_read(&s->ramdisk, treq.sec, treq.secs, treq.buf)) { @@ -1632,15 +1630,17 @@ static int ctl_register(struct tdremus_state *s) /* interface */ -static int tdremus_open(td_driver_t *driver, const char *name, - td_flag_t flags, td_uuid_t uuid) +static int tdremus_open(td_driver_t *driver, td_image_t *image, td_uuid_t uuid) { struct tdremus_state *s = (struct tdremus_state *)driver->data; int rc; + const char *name = image->name; + td_flag_t flags = image->flags; RPRINTF("opening %s\n", name); device_vbd = tapdisk_server_get_vbd(uuid); + remus_image = image; memset(s, 0, sizeof(*s)); s->server_fd.fd = -1; diff --git a/tools/blktap2/drivers/block-vhd.c b/tools/blktap2/drivers/block-vhd.c index 06e9c89..b20f724 100644 --- a/tools/blktap2/drivers/block-vhd.c +++ b/tools/blktap2/drivers/block-vhd.c @@ -59,6 +59,7 @@ #include "tapdisk-driver.h" #include "tapdisk-interface.h" #include "tapdisk-disktype.h" +#include "tapdisk-image.h" unsigned int SPB; @@ -675,10 +676,11 @@ __vhd_open(td_driver_t *driver, const char *name, vhd_flag_t flags) } static int -_vhd_open(td_driver_t *driver, const char *name, td_flag_t flags, - td_uuid_t uuid) +_vhd_open(td_driver_t *driver, td_image_t *image, td_uuid_t uuid) { vhd_flag_t vhd_flags = 0; + const char *name = image->name; + td_flag_t flags = image->flags; if (flags & TD_OPEN_RDONLY) vhd_flags |= VHD_FLAG_OPEN_RDONLY; diff --git a/tools/blktap2/drivers/tapdisk-interface.c b/tools/blktap2/drivers/tapdisk-interface.c index 36b5393..a29de64 100644 --- a/tools/blktap2/drivers/tapdisk-interface.c +++ b/tools/blktap2/drivers/tapdisk-interface.c @@ -79,8 +79,7 @@ __td_open(td_image_t *image, td_disk_info_t *info) } if (!td_flag_test(driver->state, TD_DRIVER_OPEN)) { - err = driver->ops->td_open(driver, image->name, image->flags, - vbd->uuid); + err = driver->ops->td_open(driver, image, vbd->uuid); if (err) { if (!image->driver) tapdisk_driver_free(driver); diff --git a/tools/blktap2/drivers/tapdisk.h b/tools/blktap2/drivers/tapdisk.h index 459eaec..3c3b51d 100644 --- a/tools/blktap2/drivers/tapdisk.h +++ b/tools/blktap2/drivers/tapdisk.h @@ -157,7 +157,7 @@ struct tap_disk { const char *disk_type; td_flag_t flags; int private_data_size; - int (*td_open) (td_driver_t *, const char *, td_flag_t, td_uuid_t); + int (*td_open) (td_driver_t *, td_image_t *, td_uuid_t); int (*td_close) (td_driver_t *); int (*td_get_parent_id) (td_driver_t *, td_disk_id_t *); int (*td_validate_parent) (td_driver_t *, td_driver_t *, td_flag_t); -- 1.9.3 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |