aboutsummaryrefslogtreecommitdiffstats
path: root/tools/blktap
diff options
context:
space:
mode:
authorJake Wires <jwires@xensource.com>2007-04-10 11:40:43 -0700
committerJake Wires <jwires@xensource.com>2007-04-10 11:40:43 -0700
commit9a549acc99e635fcafb1d797e59ab28c7b53615b (patch)
tree543c54849ea9a75fabb496b457f3e9639fe992c1 /tools/blktap
parent38ad8d2a5cddeaa0204616d1fd7766a818b8d539 (diff)
downloadxen-9a549acc99e635fcafb1d797e59ab28c7b53615b.tar.gz
xen-9a549acc99e635fcafb1d797e59ab28c7b53615b.tar.bz2
xen-9a549acc99e635fcafb1d797e59ab28c7b53615b.zip
[TAPDISK] Fix qcow initialization bug.
fd_end was being incorrectly initialized upon open, leading to data corruption. Signed-off-by: Jake Wires <jwires@xensource.com>
Diffstat (limited to 'tools/blktap')
-rw-r--r--tools/blktap/drivers/block-qcow.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/tools/blktap/drivers/block-qcow.c b/tools/blktap/drivers/block-qcow.c
index b0822f729d..2e5532a7cb 100644
--- a/tools/blktap/drivers/block-qcow.c
+++ b/tools/blktap/drivers/block-qcow.c
@@ -949,8 +949,14 @@ int tdqcow_open (struct disk_driver *dd, const char *name, td_flag_t flags)
goto fail;
}
init_fds(dd);
- s->fd_end = (final_cluster == 0 ? (s->l1_table_offset + l1_table_size) :
- (final_cluster + s->cluster_size));
+
+ if (!final_cluster)
+ s->fd_end = s->l1_table_offset + l1_table_size;
+ else {
+ s->fd_end = lseek64(fd, 0, SEEK_END);
+ if (s->fd_end == (off64_t)-1)
+ goto fail;
+ }
return 0;