Message ID | 1305136142-14018-1-git-send-email-penberg@kernel.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 05/12/2011 01:49 AM, Pekka Enberg wrote: > Fix up coding style issues in QCOW code. > > Cc: Asias He <asias.hejun@gmail.com> > Cc: Avi Kivity <avi@redhat.com> > Cc: Cyrill Gorcunov <gorcunov@gmail.com> > Cc: Ingo Molnar <mingo@elte.hu> > Cc: Prasad Joshi <prasadjoshi124@gmail.com> > Cc: Sasha Levin <levinsasha928@gmail.com> > Signed-off-by: Pekka Enberg <penberg@kernel.org> > --- > tools/kvm/qcow.c | 153 ++++++++++++++++++++++++++++-------------------------- > 1 files changed, 80 insertions(+), 73 deletions(-) > > diff --git a/tools/kvm/qcow.c b/tools/kvm/qcow.c > index 103a5a1..f8b52d4 100644 > --- a/tools/kvm/qcow.c > +++ b/tools/kvm/qcow.c > @@ -13,8 +13,8 @@ > #include <fcntl.h> > > #include <linux/byteorder.h> > -#include <linux/types.h> > #include <linux/kernel.h> > +#include <linux/types.h> > > static inline u64 get_l1_index(struct qcow *q, u64 offset) > { > @@ -41,16 +41,18 @@ static ssize_t qcow1_read_cluster(struct qcow *q, u64 offset, void *dst, u32 dst > { > struct qcow_header *header = q->header; > struct qcow_table *table = &q->table; > - u64 *l2_table = NULL; > u64 l2_table_offset; > u64 l2_table_size; > u64 cluster_size; > u64 clust_offset; > u64 clust_start; > size_t length; > + u64 *l2_table; > u64 l1_idx; > u64 l2_idx; > > + l2_table = NULL; > + > cluster_size = 1 << header->cluster_bits; > > l1_idx = get_l1_index(q, offset); > @@ -74,8 +76,7 @@ static ssize_t qcow1_read_cluster(struct qcow *q, u64 offset, void *dst, u32 dst > if (!l2_table) > goto out_error; > > - if (pread_in_full(q->fd, l2_table, l2_table_size * sizeof(u64), > - l2_table_offset) < 0) > + if (pread_in_full(q->fd, l2_table, l2_table_size * sizeof(u64), l2_table_offset) < 0) > goto out_error; > > l2_idx = get_l2_index(q, offset); > @@ -102,80 +103,82 @@ out_error: > goto out; > } > > -static int qcow1_read_sector(struct disk_image *disk, u64 sector, > - void *dst, u32 dst_len) > +static int qcow1_read_sector(struct disk_image *disk, u64 sector, void *dst, u32 dst_len) > { > struct qcow *q = disk->priv; > struct qcow_header *header = q->header; > - char *buf = dst; > - u64 offset; > u32 nr_read; > + u64 offset; > + char *buf; > u32 nr; > > - nr_read = 0; > + buf = dst; > + nr_read = 0; > + > while (nr_read < dst_len) { > - offset = sector << SECTOR_SHIFT; > + offset = sector << SECTOR_SHIFT; > if (offset >= header->size) > - goto out_error; > + return -1; > > nr = qcow1_read_cluster(q, offset, buf, dst_len - nr_read); > if (nr <= 0) > - goto out_error; > + return -1; > > nr_read += nr; > buf += nr; > sector += (nr >> SECTOR_SHIFT); > } > + > return 0; > -out_error: > - return -1; > } > > static inline u64 file_size(int fd) > { > struct stat st; > + > if (fstat(fd, &st) < 0) > return 0; > + > return st.st_size; > } > > -static inline int pwrite_sync(int fd, void *buf, size_t count, off_t offset) > +#define SYNC_FLAGS (SYNC_FILE_RANGE_WAIT_BEFORE | SYNC_FILE_RANGE_WRITE) > + > +static inline int qcow_pwrite_sync(int fd, void *buf, size_t count, off_t offset) > { > if (pwrite_in_full(fd, buf, count, offset) < 0) > return -1; > - if (sync_file_range(fd, offset, count, > - SYNC_FILE_RANGE_WAIT_BEFORE | > - SYNC_FILE_RANGE_WRITE) < 0) > - return -1; > - return 0; > + > + return sync_file_range(fd, offset, count, SYNC_FLAGS); > } > > /* Writes a level 2 table at the end of the file. */ > static u64 qcow1_write_l2_table(struct qcow *q, u64 *table) > { > struct qcow_header *header = q->header; > - u64 sz; > u64 clust_sz; > - u64 off; > u64 f_sz; > + u64 off; > + u64 sz; > > - f_sz = file_size(q->fd); > + f_sz = file_size(q->fd); > if (!f_sz) > return 0; > > - sz = 1 << header->l2_bits; > - clust_sz = 1 << header->cluster_bits; > - off = ALIGN(f_sz, clust_sz); > + sz = 1 << header->l2_bits; > + clust_sz = 1 << header->cluster_bits; > + off = ALIGN(f_sz, clust_sz); > > - if (pwrite_sync(q->fd, table, sz * sizeof(u64), off) < 0) > + if (qcow_pwrite_sync(q->fd, table, sz * sizeof(u64), off) < 0) > return 0; > + > return off; > } > > /* > * QCOW file might grow during a write operation. Not only data but metadata is > * also written at the end of the file. Therefore it is necessary to ensure > - * every write is committed to disk. Hence we use uses pwrite_sync() to > + * every write is committed to disk. Hence we use uses qcow_pwrite_sync() to > * synchronize the in-core state of QCOW image to disk. > * > * We also try to restore the image to a consistent state if the metdata > @@ -186,36 +189,35 @@ static ssize_t qcow1_write_cluster(struct qcow *q, u64 offset, void *buf, u32 sr > { > struct qcow_header *header = q->header; > struct qcow_table *table = &q->table; > - > - u64 l2t_sz; > + bool update_meta; > + u64 clust_start; > + u64 clust_off; > u64 clust_sz; > u64 l1t_idx; > u64 l2t_idx; > - u64 clust_off; > - u64 len; > + u64 l2t_off; > + u64 l2t_sz; > u64 *l2t; > u64 f_sz; > - u64 l2t_off; > + u64 len; > u64 t; > - u64 clust_start; > - bool update_meta = false; > > - l2t_sz = 1 << header->l2_bits; > - clust_sz = 1 << header->cluster_bits; > + l2t_sz = 1 << header->l2_bits; > + clust_sz = 1 << header->cluster_bits; > > - l1t_idx = get_l1_index(q, offset); > + l1t_idx = get_l1_index(q, offset); > if (l1t_idx >= table->table_size) > goto error; > > - l2t_idx = get_l2_index(q, offset); > + l2t_idx = get_l2_index(q, offset); > if (l2t_idx >= l2t_sz) > goto error; > > - clust_off = get_cluster_offset(q, offset); > + clust_off = get_cluster_offset(q, offset); > if (clust_off >= clust_sz) > goto error; > > - len = clust_sz - clust_off; > + len = clust_sz - clust_off; > if (len > src_len) > len = src_len; > > @@ -223,61 +225,65 @@ static ssize_t qcow1_write_cluster(struct qcow *q, u64 offset, void *buf, u32 sr > if (!l2t) > goto error; > > - l2t_off = table->l1_table[l1t_idx] & ~header->oflag_mask; > + l2t_off = table->l1_table[l1t_idx] & ~header->oflag_mask; > if (l2t_off) { > if (pread_in_full(q->fd, l2t, l2t_sz * sizeof(u64), l2t_off) < 0) > goto free_l2; > } else { > - /* capture the state of the consistent QCOW image */ > - f_sz = file_size(q->fd); > + /* Capture the state of the consistent QCOW image */ > + f_sz = file_size(q->fd); > if (!f_sz) > goto free_l2; > > /* Write the l2 table of 0's at the end of the file */ > - l2t_off = qcow1_write_l2_table(q, l2t); > + l2t_off = qcow1_write_l2_table(q, l2t); > if (!l2t_off) > goto free_l2; > > /* Metadata update: update on disk level 1 table */ > - t = cpu_to_be64(l2t_off); > - if (pwrite_sync(q->fd, &t, sizeof(t), header->l1_table_offset + > - l1t_idx * sizeof(u64)) < 0) { > + t = cpu_to_be64(l2t_off); > + > + if (qcow_pwrite_sync(q->fd, &t, sizeof(t), header->l1_table_offset + l1t_idx * sizeof(u64)) < 0) { > /* restore file to consistent state */ > if (ftruncate(q->fd, f_sz) < 0) > goto free_l2; > + > goto free_l2; > } > > - /* update the in-core entry */ > + /* Update the in-core entry */ > table->l1_table[l1t_idx] = l2t_off; > } > > - /* capture the state of the consistent QCOW image */ > - f_sz = file_size(q->fd); > + /* Capture the state of the consistent QCOW image */ > + f_sz = file_size(q->fd); > if (!f_sz) > goto free_l2; > > - clust_start = be64_to_cpu(l2t[l2t_idx]) & ~header->oflag_mask; > - free(l2t); > + clust_start = be64_to_cpu(l2t[l2t_idx]) & ~header->oflag_mask; > if (!clust_start) { > - clust_start = ALIGN(f_sz, clust_sz); > - update_meta = true; > - } > + clust_start = ALIGN(f_sz, clust_sz); > + update_meta = true; > + } else > + update_meta = false; > > - /* write actual data */ > + free(l2t); > + > + /* Write actual data */ > if (pwrite_in_full(q->fd, buf, len, clust_start + clust_off) < 0) > goto error; > > if (update_meta) { > t = cpu_to_be64(clust_start); > - if (pwrite_sync(q->fd, &t, sizeof(t), l2t_off + > - l2t_idx * sizeof(u64)) < 0) { > - /* restore the file to consistent state */ > + if (qcow_pwrite_sync(q->fd, &t, sizeof(t), l2t_off + l2t_idx * sizeof(u64)) < 0) { > + /* Restore the file to consistent state */ > if (ftruncate(q->fd, f_sz) < 0) > goto error; > + > goto error; > } > } > + > return len; > free_l2: > free(l2t); > @@ -289,28 +295,29 @@ static int qcow1_write_sector(struct disk_image *disk, u64 sector, void *src, u3 > { > struct qcow *q = disk->priv; > struct qcow_header *header = q->header; > - char *buf = src; > - ssize_t nr_write; > + ssize_t nr_written; > + char *buf; > u64 offset; > ssize_t nr; > > - nr_write = 0; > - offset = sector << SECTOR_SHIFT; > - while (nr_write < src_len) { > + buf = src; > + nr_written = 0; > + offset = sector << SECTOR_SHIFT; > + > + while (nr_written < src_len) { The above line gives me: CC qcow.o qcow.c: In function ‘qcow1_write_sector’: qcow.c:307:20: error: comparison between signed and unsigned integer expressions [-Werror=sign-compare] cc1: all warnings being treated as errors make: *** [qcow.o] Error 1 > if (offset >= header->size) > - goto error; > + return -1; > > - nr = qcow1_write_cluster(q, offset, buf, src_len - nr_write); > + nr = qcow1_write_cluster(q, offset, buf, src_len - nr_written); > if (nr < 0) > - goto error; > + return -1; > > - nr_write += nr; > - buf += nr; > - offset += nr; > + nr_written += nr; > + buf += nr; > + offset += nr; > } > + > return 0; > -error: > - return -1; > } > > static void qcow1_disk_close(struct disk_image *disk)
diff --git a/tools/kvm/qcow.c b/tools/kvm/qcow.c index 103a5a1..f8b52d4 100644 --- a/tools/kvm/qcow.c +++ b/tools/kvm/qcow.c @@ -13,8 +13,8 @@ #include <fcntl.h> #include <linux/byteorder.h> -#include <linux/types.h> #include <linux/kernel.h> +#include <linux/types.h> static inline u64 get_l1_index(struct qcow *q, u64 offset) { @@ -41,16 +41,18 @@ static ssize_t qcow1_read_cluster(struct qcow *q, u64 offset, void *dst, u32 dst { struct qcow_header *header = q->header; struct qcow_table *table = &q->table; - u64 *l2_table = NULL; u64 l2_table_offset; u64 l2_table_size; u64 cluster_size; u64 clust_offset; u64 clust_start; size_t length; + u64 *l2_table; u64 l1_idx; u64 l2_idx; + l2_table = NULL; + cluster_size = 1 << header->cluster_bits; l1_idx = get_l1_index(q, offset); @@ -74,8 +76,7 @@ static ssize_t qcow1_read_cluster(struct qcow *q, u64 offset, void *dst, u32 dst if (!l2_table) goto out_error; - if (pread_in_full(q->fd, l2_table, l2_table_size * sizeof(u64), - l2_table_offset) < 0) + if (pread_in_full(q->fd, l2_table, l2_table_size * sizeof(u64), l2_table_offset) < 0) goto out_error; l2_idx = get_l2_index(q, offset); @@ -102,80 +103,82 @@ out_error: goto out; } -static int qcow1_read_sector(struct disk_image *disk, u64 sector, - void *dst, u32 dst_len) +static int qcow1_read_sector(struct disk_image *disk, u64 sector, void *dst, u32 dst_len) { struct qcow *q = disk->priv; struct qcow_header *header = q->header; - char *buf = dst; - u64 offset; u32 nr_read; + u64 offset; + char *buf; u32 nr; - nr_read = 0; + buf = dst; + nr_read = 0; + while (nr_read < dst_len) { - offset = sector << SECTOR_SHIFT; + offset = sector << SECTOR_SHIFT; if (offset >= header->size) - goto out_error; + return -1; nr = qcow1_read_cluster(q, offset, buf, dst_len - nr_read); if (nr <= 0) - goto out_error; + return -1; nr_read += nr; buf += nr; sector += (nr >> SECTOR_SHIFT); } + return 0; -out_error: - return -1; } static inline u64 file_size(int fd) { struct stat st; + if (fstat(fd, &st) < 0) return 0; + return st.st_size; } -static inline int pwrite_sync(int fd, void *buf, size_t count, off_t offset) +#define SYNC_FLAGS (SYNC_FILE_RANGE_WAIT_BEFORE | SYNC_FILE_RANGE_WRITE) + +static inline int qcow_pwrite_sync(int fd, void *buf, size_t count, off_t offset) { if (pwrite_in_full(fd, buf, count, offset) < 0) return -1; - if (sync_file_range(fd, offset, count, - SYNC_FILE_RANGE_WAIT_BEFORE | - SYNC_FILE_RANGE_WRITE) < 0) - return -1; - return 0; + + return sync_file_range(fd, offset, count, SYNC_FLAGS); } /* Writes a level 2 table at the end of the file. */ static u64 qcow1_write_l2_table(struct qcow *q, u64 *table) { struct qcow_header *header = q->header; - u64 sz; u64 clust_sz; - u64 off; u64 f_sz; + u64 off; + u64 sz; - f_sz = file_size(q->fd); + f_sz = file_size(q->fd); if (!f_sz) return 0; - sz = 1 << header->l2_bits; - clust_sz = 1 << header->cluster_bits; - off = ALIGN(f_sz, clust_sz); + sz = 1 << header->l2_bits; + clust_sz = 1 << header->cluster_bits; + off = ALIGN(f_sz, clust_sz); - if (pwrite_sync(q->fd, table, sz * sizeof(u64), off) < 0) + if (qcow_pwrite_sync(q->fd, table, sz * sizeof(u64), off) < 0) return 0; + return off; } /* * QCOW file might grow during a write operation. Not only data but metadata is * also written at the end of the file. Therefore it is necessary to ensure - * every write is committed to disk. Hence we use uses pwrite_sync() to + * every write is committed to disk. Hence we use uses qcow_pwrite_sync() to * synchronize the in-core state of QCOW image to disk. * * We also try to restore the image to a consistent state if the metdata @@ -186,36 +189,35 @@ static ssize_t qcow1_write_cluster(struct qcow *q, u64 offset, void *buf, u32 sr { struct qcow_header *header = q->header; struct qcow_table *table = &q->table; - - u64 l2t_sz; + bool update_meta; + u64 clust_start; + u64 clust_off; u64 clust_sz; u64 l1t_idx; u64 l2t_idx; - u64 clust_off; - u64 len; + u64 l2t_off; + u64 l2t_sz; u64 *l2t; u64 f_sz; - u64 l2t_off; + u64 len; u64 t; - u64 clust_start; - bool update_meta = false; - l2t_sz = 1 << header->l2_bits; - clust_sz = 1 << header->cluster_bits; + l2t_sz = 1 << header->l2_bits; + clust_sz = 1 << header->cluster_bits; - l1t_idx = get_l1_index(q, offset); + l1t_idx = get_l1_index(q, offset); if (l1t_idx >= table->table_size) goto error; - l2t_idx = get_l2_index(q, offset); + l2t_idx = get_l2_index(q, offset); if (l2t_idx >= l2t_sz) goto error; - clust_off = get_cluster_offset(q, offset); + clust_off = get_cluster_offset(q, offset); if (clust_off >= clust_sz) goto error; - len = clust_sz - clust_off; + len = clust_sz - clust_off; if (len > src_len) len = src_len; @@ -223,61 +225,65 @@ static ssize_t qcow1_write_cluster(struct qcow *q, u64 offset, void *buf, u32 sr if (!l2t) goto error; - l2t_off = table->l1_table[l1t_idx] & ~header->oflag_mask; + l2t_off = table->l1_table[l1t_idx] & ~header->oflag_mask; if (l2t_off) { if (pread_in_full(q->fd, l2t, l2t_sz * sizeof(u64), l2t_off) < 0) goto free_l2; } else { - /* capture the state of the consistent QCOW image */ - f_sz = file_size(q->fd); + /* Capture the state of the consistent QCOW image */ + f_sz = file_size(q->fd); if (!f_sz) goto free_l2; /* Write the l2 table of 0's at the end of the file */ - l2t_off = qcow1_write_l2_table(q, l2t); + l2t_off = qcow1_write_l2_table(q, l2t); if (!l2t_off) goto free_l2; /* Metadata update: update on disk level 1 table */ - t = cpu_to_be64(l2t_off); - if (pwrite_sync(q->fd, &t, sizeof(t), header->l1_table_offset + - l1t_idx * sizeof(u64)) < 0) { + t = cpu_to_be64(l2t_off); + + if (qcow_pwrite_sync(q->fd, &t, sizeof(t), header->l1_table_offset + l1t_idx * sizeof(u64)) < 0) { /* restore file to consistent state */ if (ftruncate(q->fd, f_sz) < 0) goto free_l2; + goto free_l2; } - /* update the in-core entry */ + /* Update the in-core entry */ table->l1_table[l1t_idx] = l2t_off; } - /* capture the state of the consistent QCOW image */ - f_sz = file_size(q->fd); + /* Capture the state of the consistent QCOW image */ + f_sz = file_size(q->fd); if (!f_sz) goto free_l2; - clust_start = be64_to_cpu(l2t[l2t_idx]) & ~header->oflag_mask; - free(l2t); + clust_start = be64_to_cpu(l2t[l2t_idx]) & ~header->oflag_mask; if (!clust_start) { - clust_start = ALIGN(f_sz, clust_sz); - update_meta = true; - } + clust_start = ALIGN(f_sz, clust_sz); + update_meta = true; + } else + update_meta = false; - /* write actual data */ + free(l2t); + + /* Write actual data */ if (pwrite_in_full(q->fd, buf, len, clust_start + clust_off) < 0) goto error; if (update_meta) { t = cpu_to_be64(clust_start); - if (pwrite_sync(q->fd, &t, sizeof(t), l2t_off + - l2t_idx * sizeof(u64)) < 0) { - /* restore the file to consistent state */ + if (qcow_pwrite_sync(q->fd, &t, sizeof(t), l2t_off + l2t_idx * sizeof(u64)) < 0) { + /* Restore the file to consistent state */ if (ftruncate(q->fd, f_sz) < 0) goto error; + goto error; } } + return len; free_l2: free(l2t); @@ -289,28 +295,29 @@ static int qcow1_write_sector(struct disk_image *disk, u64 sector, void *src, u3 { struct qcow *q = disk->priv; struct qcow_header *header = q->header; - char *buf = src; - ssize_t nr_write; + ssize_t nr_written; + char *buf; u64 offset; ssize_t nr; - nr_write = 0; - offset = sector << SECTOR_SHIFT; - while (nr_write < src_len) { + buf = src; + nr_written = 0; + offset = sector << SECTOR_SHIFT; + + while (nr_written < src_len) { if (offset >= header->size) - goto error; + return -1; - nr = qcow1_write_cluster(q, offset, buf, src_len - nr_write); + nr = qcow1_write_cluster(q, offset, buf, src_len - nr_written); if (nr < 0) - goto error; + return -1; - nr_write += nr; - buf += nr; - offset += nr; + nr_written += nr; + buf += nr; + offset += nr; } + return 0; -error: - return -1; } static void qcow1_disk_close(struct disk_image *disk)
Fix up coding style issues in QCOW code. Cc: Asias He <asias.hejun@gmail.com> Cc: Avi Kivity <avi@redhat.com> Cc: Cyrill Gorcunov <gorcunov@gmail.com> Cc: Ingo Molnar <mingo@elte.hu> Cc: Prasad Joshi <prasadjoshi124@gmail.com> Cc: Sasha Levin <levinsasha928@gmail.com> Signed-off-by: Pekka Enberg <penberg@kernel.org> --- tools/kvm/qcow.c | 153 ++++++++++++++++++++++++++++-------------------------- 1 files changed, 80 insertions(+), 73 deletions(-)