diff options
author | Jake Wires <jwires@xensource.com> | 2007-04-10 11:40:43 -0700 |
---|---|---|
committer | Jake Wires <jwires@xensource.com> | 2007-04-10 11:40:43 -0700 |
commit | 9a549acc99e635fcafb1d797e59ab28c7b53615b (patch) | |
tree | 543c54849ea9a75fabb496b457f3e9639fe992c1 /tools/blktap | |
parent | 38ad8d2a5cddeaa0204616d1fd7766a818b8d539 (diff) | |
download | xen-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.c | 10 |
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; |