* Re: [Qemu-devel] [PATCH v3 01/10] raw-posix: Fix raw_getlength() to always return -errno on error [not found] ` <1401473631-10724-2-git-send-email-armbru@redhat.com> @ 2014-06-02 14:50 ` Benoît Canet 0 siblings, 0 replies; 13+ messages in thread From: Benoît Canet @ 2014-06-02 14:50 UTC (permalink / raw) To: Markus Armbruster; +Cc: kwolf, qemu-devel, stefanha, mreitz The Friday 30 May 2014 à 20:13:42 (+0200), Markus Armbruster wrote : > We got a merry mix of -1 and -errno here. > > Signed-off-by: Markus Armbruster <armbru@redhat.com> > Reviewed-by: Eric Blake <eblake@redhat.com> > --- > block/raw-posix.c | 28 ++++++++++++++++++++++------ > 1 file changed, 22 insertions(+), 6 deletions(-) > > diff --git a/block/raw-posix.c b/block/raw-posix.c > index 6586a0c..9221de5 100644 > --- a/block/raw-posix.c > +++ b/block/raw-posix.c > @@ -1097,12 +1097,12 @@ static int64_t raw_getlength(BlockDriverState *bs) > struct stat st; > > if (fstat(fd, &st)) > - return -1; > + return -errno; > if (S_ISCHR(st.st_mode) || S_ISBLK(st.st_mode)) { > struct disklabel dl; > > if (ioctl(fd, DIOCGDINFO, &dl)) > - return -1; > + return -errno; > return (uint64_t)dl.d_secsize * > dl.d_partitions[DISKPART(st.st_rdev)].p_size; > } else > @@ -1116,7 +1116,7 @@ static int64_t raw_getlength(BlockDriverState *bs) > struct stat st; > > if (fstat(fd, &st)) > - return -1; > + return -errno; > if (S_ISCHR(st.st_mode) || S_ISBLK(st.st_mode)) { > struct dkwedge_info dkw; > > @@ -1126,7 +1126,7 @@ static int64_t raw_getlength(BlockDriverState *bs) > struct disklabel dl; > > if (ioctl(fd, DIOCGDINFO, &dl)) > - return -1; > + return -errno; > return (uint64_t)dl.d_secsize * > dl.d_partitions[DISKPART(st.st_rdev)].p_size; > } > @@ -1139,6 +1139,7 @@ static int64_t raw_getlength(BlockDriverState *bs) > BDRVRawState *s = bs->opaque; > struct dk_minfo minfo; > int ret; > + int64_t size; > > ret = fd_open(bs); > if (ret < 0) { > @@ -1157,7 +1158,11 @@ static int64_t raw_getlength(BlockDriverState *bs) > * There are reports that lseek on some devices fails, but > * irc discussion said that contingency on contingency was overkill. > */ > - return lseek(s->fd, 0, SEEK_END); > + size = lseek(s->fd, 0, SEEK_END); > + if (size < 0) { > + return -errno; > + } > + return size; > } > #elif defined(CONFIG_BSD) > static int64_t raw_getlength(BlockDriverState *bs) > @@ -1195,6 +1200,9 @@ again: > size = LONG_LONG_MAX; > #else > size = lseek(fd, 0LL, SEEK_END); > + if (size < 0) { > + return -errno; > + } > #endif > #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) > switch(s->type) { > @@ -1211,6 +1219,9 @@ again: > #endif > } else { > size = lseek(fd, 0, SEEK_END); > + if (size < 0) { > + return -errno; > + } > } > return size; > } > @@ -1219,13 +1230,18 @@ static int64_t raw_getlength(BlockDriverState *bs) > { > BDRVRawState *s = bs->opaque; > int ret; > + int64_t size; > > ret = fd_open(bs); > if (ret < 0) { > return ret; > } > > - return lseek(s->fd, 0, SEEK_END); > + size = lseek(s->fd, 0, SEEK_END); > + if (size < 0) { > + return -errno; > + } > + return size; > } > #endif > > -- > 1.9.3 > > Reviewed-by: Benoit Canet <benoit@irqsave.net> ^ permalink raw reply [flat|nested] 13+ messages in thread
[parent not found: <1401473631-10724-3-git-send-email-armbru@redhat.com>]
* Re: [Qemu-devel] [PATCH v3 02/10] block: New bdrv_nb_sectors() [not found] ` <1401473631-10724-3-git-send-email-armbru@redhat.com> @ 2014-06-02 14:54 ` Benoît Canet 0 siblings, 0 replies; 13+ messages in thread From: Benoît Canet @ 2014-06-02 14:54 UTC (permalink / raw) To: Markus Armbruster; +Cc: kwolf, qemu-devel, stefanha, mreitz The Friday 30 May 2014 à 20:13:43 (+0200), Markus Armbruster wrote : > A call to retrieve the image size converts between bytes and sectors > several times: > > * BlockDriver method bdrv_getlength() returns bytes. > > * refresh_total_sectors() converts to sectors, rounding up, and stores > in total_sectors. > > * bdrv_getlength() converts total_sectors back to bytes (now rounded > up to a multiple of the sector size). > > * Callers wanting sectors rather bytes convert it right back. > Example: bdrv_get_geometry(). > > bdrv_nb_sectors() provides a way to omit the last two conversions. > It's exactly bdrv_getlength() with the conversion to bytes omitted. > It's functionally like bdrv_get_geometry() without its odd error > handling. > > Reimplement bdrv_getlength() and bdrv_get_geometry() on top of > bdrv_nb_sectors(). > > The next patches will convert some users of bdrv_getlength() to > bdrv_nb_sectors(). > > Signed-off-by: Markus Armbruster <armbru@redhat.com> > Reviewed-by: Eric Blake <eblake@redhat.com> > --- > block.c | 29 +++++++++++++++++++---------- > include/block/block.h | 1 + > 2 files changed, 20 insertions(+), 10 deletions(-) > > diff --git a/block.c b/block.c > index a517d72..14dc5fe 100644 > --- a/block.c > +++ b/block.c > @@ -693,6 +693,7 @@ static int find_image_format(BlockDriverState *bs, const char *filename, > > /** > * Set the current 'total_sectors' value > + * Return 0 on success, -errno on error. > */ > static int refresh_total_sectors(BlockDriverState *bs, int64_t hint) > { > @@ -3551,11 +3552,12 @@ int64_t bdrv_get_allocated_file_size(BlockDriverState *bs) > } > > /** > - * Length of a file in bytes. Return < 0 if error or unknown. > + * Return number of sectors on success, -errno on error. > */ > -int64_t bdrv_getlength(BlockDriverState *bs) > +int64_t bdrv_nb_sectors(BlockDriverState *bs) > { > BlockDriver *drv = bs->drv; > + > if (!drv) > return -ENOMEDIUM; > > @@ -3565,19 +3567,26 @@ int64_t bdrv_getlength(BlockDriverState *bs) > return ret; > } > } > - return bs->total_sectors * BDRV_SECTOR_SIZE; > + return bs->total_sectors; > +} > + > +/** > + * Return length in bytes on success, -errno on error. > + * The length is always a multiple of BDRV_SECTOR_SIZE. > + */ > +int64_t bdrv_getlength(BlockDriverState *bs) > +{ > + int64_t ret = bdrv_nb_sectors(bs); > + > + return ret < 0 ? ret : ret * BDRV_SECTOR_SIZE; > } > > /* return 0 as number of sectors if no device present or error */ > void bdrv_get_geometry(BlockDriverState *bs, uint64_t *nb_sectors_ptr) > { > - int64_t length; > - length = bdrv_getlength(bs); > - if (length < 0) > - length = 0; > - else > - length = length >> BDRV_SECTOR_BITS; > - *nb_sectors_ptr = length; > + int64_t nb_sectors = bdrv_nb_sectors(bs); > + > + *nb_sectors_ptr = nb_sectors < 0 ? 0 : nb_sectors; > } > > void bdrv_set_on_error(BlockDriverState *bs, BlockdevOnError on_read_error, > diff --git a/include/block/block.h b/include/block/block.h > index faee3aa..4a1e875 100644 > --- a/include/block/block.h > +++ b/include/block/block.h > @@ -279,6 +279,7 @@ BlockDriverState *bdrv_find_backing_image(BlockDriverState *bs, > const char *backing_file); > int bdrv_get_backing_file_depth(BlockDriverState *bs); > int bdrv_truncate(BlockDriverState *bs, int64_t offset); > +int64_t bdrv_nb_sectors(BlockDriverState *bs); > int64_t bdrv_getlength(BlockDriverState *bs); > int64_t bdrv_get_allocated_file_size(BlockDriverState *bs); > void bdrv_get_geometry(BlockDriverState *bs, uint64_t *nb_sectors_ptr); > -- > 1.9.3 > > Reviewed-by: Benoit Canet <benoit@irqsave.net> ^ permalink raw reply [flat|nested] 13+ messages in thread
[parent not found: <1401473631-10724-4-git-send-email-armbru@redhat.com>]
* Re: [Qemu-devel] [PATCH v3 03/10] block: Use bdrv_nb_sectors() in bdrv_make_zero() [not found] ` <1401473631-10724-4-git-send-email-armbru@redhat.com> @ 2014-06-02 14:55 ` Benoît Canet 0 siblings, 0 replies; 13+ messages in thread From: Benoît Canet @ 2014-06-02 14:55 UTC (permalink / raw) To: Markus Armbruster; +Cc: kwolf, qemu-devel, stefanha, mreitz The Friday 30 May 2014 à 20:13:44 (+0200), Markus Armbruster wrote : > Instead of bdrv_getlength(). > > Variable target_size is initially in bytes, then changes meaning to > sectors. Ugh. Replace by target_sectors. > > Signed-off-by: Markus Armbruster <armbru@redhat.com> > Reviewed-by: Eric Blake <eblake@redhat.com> > --- > block.c | 12 +++++------- > 1 file changed, 5 insertions(+), 7 deletions(-) > > diff --git a/block.c b/block.c > index 14dc5fe..9517108 100644 > --- a/block.c > +++ b/block.c > @@ -2855,18 +2855,16 @@ int bdrv_write_zeroes(BlockDriverState *bs, int64_t sector_num, > */ > int bdrv_make_zero(BlockDriverState *bs, BdrvRequestFlags flags) > { > - int64_t target_size; > - int64_t ret, nb_sectors, sector_num = 0; > + int64_t target_sectors, ret, nb_sectors, sector_num = 0; > int n; > > - target_size = bdrv_getlength(bs); > - if (target_size < 0) { > - return target_size; > + target_sectors = bdrv_nb_sectors(bs); > + if (target_sectors < 0) { > + return target_sectors; > } > - target_size /= BDRV_SECTOR_SIZE; > > for (;;) { > - nb_sectors = target_size - sector_num; > + nb_sectors = target_sectors - sector_num; > if (nb_sectors <= 0) { > return 0; > } > -- > 1.9.3 > > Reviewed-by: Benoit Canet <benoit@irqsave.net> ^ permalink raw reply [flat|nested] 13+ messages in thread
[parent not found: <1401473631-10724-5-git-send-email-armbru@redhat.com>]
* Re: [Qemu-devel] [PATCH v3 04/10] block: Use bdrv_nb_sectors() in bdrv_aligned_preadv() [not found] ` <1401473631-10724-5-git-send-email-armbru@redhat.com> @ 2014-06-02 14:58 ` Benoît Canet 0 siblings, 0 replies; 13+ messages in thread From: Benoît Canet @ 2014-06-02 14:58 UTC (permalink / raw) To: Markus Armbruster; +Cc: kwolf, qemu-devel, stefanha, mreitz The Friday 30 May 2014 à 20:13:45 (+0200), Markus Armbruster wrote : > Instead of bdrv_getlength(). Eliminate variable len. > > Signed-off-by: Markus Armbruster <armbru@redhat.com> > Reviewed-by: Eric Blake <eblake@redhat.com> > --- > block.c | 9 ++++----- > 1 file changed, 4 insertions(+), 5 deletions(-) > > diff --git a/block.c b/block.c > index 9517108..6639d09 100644 > --- a/block.c > +++ b/block.c > @@ -3081,15 +3081,14 @@ static int coroutine_fn bdrv_aligned_preadv(BlockDriverState *bs, > ret = drv->bdrv_co_readv(bs, sector_num, nb_sectors, qiov); > } else { > /* Read zeros after EOF of growable BDSes */ > - int64_t len, total_sectors, max_nb_sectors; > + int64_t total_sectors, max_nb_sectors; > > - len = bdrv_getlength(bs); > - if (len < 0) { > - ret = len; > + total_sectors = bdrv_nb_sectors(bs); > + if (total_sectors < 0) { > + ret = total_sectors; > goto out; > } > > - total_sectors = DIV_ROUND_UP(len, BDRV_SECTOR_SIZE); > max_nb_sectors = ROUND_UP(MAX(0, total_sectors - sector_num), > align >> BDRV_SECTOR_BITS); > if (max_nb_sectors > 0) { > -- > 1.9.3 > > Reviewed-by: Benoit Canet <benoit@irqsave.net> ^ permalink raw reply [flat|nested] 13+ messages in thread
[parent not found: <1401473631-10724-6-git-send-email-armbru@redhat.com>]
* Re: [Qemu-devel] [PATCH v3 05/10] block: Use bdrv_nb_sectors() in bdrv_co_get_block_status() [not found] ` <1401473631-10724-6-git-send-email-armbru@redhat.com> @ 2014-06-02 15:00 ` Benoît Canet 0 siblings, 0 replies; 13+ messages in thread From: Benoît Canet @ 2014-06-02 15:00 UTC (permalink / raw) To: Markus Armbruster; +Cc: kwolf, qemu-devel, stefanha, mreitz The Friday 30 May 2014 à 20:13:46 (+0200), Markus Armbruster wrote : > Instead of bdrv_getlength(). > > Replace variables length, length2 by total_sectors, nb_sectors2. > Bonus: use total_sectors instead of the slightly unclean > bs->total_sectors. > > Signed-off-by: Markus Armbruster <armbru@redhat.com> > Reviewed-by: Eric Blake <eblake@redhat.com> > --- > block.c | 16 ++++++++-------- > 1 file changed, 8 insertions(+), 8 deletions(-) > > diff --git a/block.c b/block.c > index 6639d09..cfeb497 100644 > --- a/block.c > +++ b/block.c > @@ -3926,21 +3926,21 @@ static int64_t coroutine_fn bdrv_co_get_block_status(BlockDriverState *bs, > int64_t sector_num, > int nb_sectors, int *pnum) > { > - int64_t length; > + int64_t total_sectors; > int64_t n; > int64_t ret, ret2; > > - length = bdrv_getlength(bs); > - if (length < 0) { > - return length; > + total_sectors = bdrv_nb_sectors(bs); > + if (total_sectors < 0) { > + return total_sectors; > } > > - if (sector_num >= (length >> BDRV_SECTOR_BITS)) { > + if (sector_num >= total_sectors) { > *pnum = 0; > return 0; > } > > - n = bs->total_sectors - sector_num; > + n = total_sectors - sector_num; > if (n < nb_sectors) { > nb_sectors = n; > } > @@ -3975,8 +3975,8 @@ static int64_t coroutine_fn bdrv_co_get_block_status(BlockDriverState *bs, > ret |= BDRV_BLOCK_ZERO; > } else if (bs->backing_hd) { > BlockDriverState *bs2 = bs->backing_hd; > - int64_t length2 = bdrv_getlength(bs2); > - if (length2 >= 0 && sector_num >= (length2 >> BDRV_SECTOR_BITS)) { > + int64_t nb_sectors2 = bdrv_nb_sectors(bs2); > + if (nb_sectors2 >= 0 && sector_num >= nb_sectors2) { > ret |= BDRV_BLOCK_ZERO; > } > } > -- > 1.9.3 > > Reviewed-by: Benoit Canet <benoit@irqsave.net> ^ permalink raw reply [flat|nested] 13+ messages in thread
[parent not found: <1401473631-10724-7-git-send-email-armbru@redhat.com>]
* Re: [Qemu-devel] [PATCH v3 06/10] block: Use bdrv_nb_sectors() in img_convert() [not found] ` <1401473631-10724-7-git-send-email-armbru@redhat.com> @ 2014-06-02 15:02 ` Benoît Canet 0 siblings, 0 replies; 13+ messages in thread From: Benoît Canet @ 2014-06-02 15:02 UTC (permalink / raw) To: Markus Armbruster; +Cc: kwolf, qemu-devel, stefanha, mreitz The Friday 30 May 2014 à 20:13:47 (+0200), Markus Armbruster wrote : > Instead of bdrv_getlength(). Replace variable output_length by > output_sectors. > > Signed-off-by: Markus Armbruster <armbru@redhat.com> > Reviewed-by: Eric Blake <eblake@redhat.com> > --- > qemu-img.c | 8 ++++---- > 1 file changed, 4 insertions(+), 4 deletions(-) > > diff --git a/qemu-img.c b/qemu-img.c > index 1ad899e..8d996ba 100644 > --- a/qemu-img.c > +++ b/qemu-img.c > @@ -1478,13 +1478,13 @@ static int img_convert(int argc, char **argv) > buf = qemu_blockalign(out_bs, bufsectors * BDRV_SECTOR_SIZE); > > if (skip_create) { > - int64_t output_length = bdrv_getlength(out_bs); > - if (output_length < 0) { > + int64_t output_sectors = bdrv_nb_sectors(out_bs); > + if (output_sectors < 0) { > error_report("unable to get output image length: %s\n", > - strerror(-output_length)); > + strerror(-output_sectors)); > ret = -1; > goto out; > - } else if (output_length < total_sectors << BDRV_SECTOR_BITS) { > + } else if (output_sectors < total_sectors) { > error_report("output file is smaller than input file"); > ret = -1; > goto out; > -- > 1.9.3 > > Reviewed-by: Benoit Canet <benoit@irqsave.net> ^ permalink raw reply [flat|nested] 13+ messages in thread
[parent not found: <1401473631-10724-8-git-send-email-armbru@redhat.com>]
* Re: [Qemu-devel] [PATCH v3 07/10] block: Use bdrv_nb_sectors() where sectors, not bytes are wanted [not found] ` <1401473631-10724-8-git-send-email-armbru@redhat.com> @ 2014-06-02 15:06 ` Benoît Canet 2014-06-02 16:45 ` Markus Armbruster 0 siblings, 1 reply; 13+ messages in thread From: Benoît Canet @ 2014-06-02 15:06 UTC (permalink / raw) To: Markus Armbruster; +Cc: kwolf, qemu-devel, stefanha, mreitz The Friday 30 May 2014 à 20:13:48 (+0200), Markus Armbruster wrote : > Instead of bdrv_getlength(). > > Aside: a few of these callers don't handle errors. I didn't > investigate whether they should. > > Signed-off-by: Markus Armbruster <armbru@redhat.com> > Reviewed-by: Eric Blake <eblake@redhat.com> > --- > block-migration.c | 9 ++++----- > block.c | 3 +-- > block/qcow2.c | 2 +- > block/vmdk.c | 5 ++--- > 4 files changed, 8 insertions(+), 11 deletions(-) > > diff --git a/block-migration.c b/block-migration.c > index 1656270..1c7b7be 100644 > --- a/block-migration.c > +++ b/block-migration.c > @@ -186,7 +186,7 @@ static int bmds_aio_inflight(BlkMigDevState *bmds, int64_t sector) > { > int64_t chunk = sector / (int64_t)BDRV_SECTORS_PER_DIRTY_CHUNK; > > - if ((sector << BDRV_SECTOR_BITS) < bdrv_getlength(bmds->bs)) { > + if (sector < bdrv_nb_sectors(bmds->bs)) { > return !!(bmds->aio_bitmap[chunk / (sizeof(unsigned long) * 8)] & > (1UL << (chunk % (sizeof(unsigned long) * 8)))); > } else { > @@ -223,8 +223,7 @@ static void alloc_aio_bitmap(BlkMigDevState *bmds) > BlockDriverState *bs = bmds->bs; > int64_t bitmap_size; > > - bitmap_size = (bdrv_getlength(bs) >> BDRV_SECTOR_BITS) + > - BDRV_SECTORS_PER_DIRTY_CHUNK * 8 - 1; > + bitmap_size = bdrv_nb_sectors(bs) + BDRV_SECTORS_PER_DIRTY_CHUNK * 8 - 1; > bitmap_size /= BDRV_SECTORS_PER_DIRTY_CHUNK * 8; > > bmds->aio_bitmap = g_malloc0(bitmap_size); > @@ -350,7 +349,7 @@ static void init_blk_migration_it(void *opaque, BlockDriverState *bs) > int64_t sectors; > > if (!bdrv_is_read_only(bs)) { > - sectors = bdrv_getlength(bs) >> BDRV_SECTOR_BITS; > + sectors = bdrv_nb_sectors(bs); > if (sectors <= 0) { > return; > } > @@ -800,7 +799,7 @@ static int block_load(QEMUFile *f, void *opaque, int version_id) > > if (bs != bs_prev) { > bs_prev = bs; > - total_sectors = bdrv_getlength(bs) >> BDRV_SECTOR_BITS; > + total_sectors = bdrv_nb_sectors(bs); > if (total_sectors <= 0) { > error_report("Error getting length of block device %s", > device_name); > diff --git a/block.c b/block.c > index cfeb497..8ebfb79 100644 > --- a/block.c > +++ b/block.c > @@ -5258,13 +5258,12 @@ BdrvDirtyBitmap *bdrv_create_dirty_bitmap(BlockDriverState *bs, int granularity, > > granularity >>= BDRV_SECTOR_BITS; > assert(granularity); > - bitmap_size = bdrv_getlength(bs); > + bitmap_size = bdrv_nb_sectors(bs); The name bitmap_size seems to imply the unit is byte. > if (bitmap_size < 0) { > error_setg_errno(errp, -bitmap_size, "could not get length of device"); > errno = -bitmap_size; > return NULL; > } > - bitmap_size >>= BDRV_SECTOR_BITS; > bitmap = g_malloc0(sizeof(BdrvDirtyBitmap)); > bitmap->bitmap = hbitmap_alloc(bitmap_size, ffs(granularity) - 1); > QLIST_INSERT_HEAD(&bs->dirty_bitmaps, bitmap, list); > diff --git a/block/qcow2.c b/block/qcow2.c > index a4b97e8..98f624c 100644 > --- a/block/qcow2.c > +++ b/block/qcow2.c > @@ -1539,7 +1539,7 @@ static int preallocate(BlockDriverState *bs) > int ret; > QCowL2Meta *meta; > > - nb_sectors = bdrv_getlength(bs) >> BDRV_SECTOR_BITS; > + nb_sectors = bdrv_nb_sectors(bs); > offset = 0; > > while (nb_sectors) { > diff --git a/block/vmdk.c b/block/vmdk.c > index 480ea37..5c5e73b 100644 > --- a/block/vmdk.c > +++ b/block/vmdk.c > @@ -669,8 +669,7 @@ static int vmdk_open_vmdk4(BlockDriverState *bs, > if (le32_to_cpu(header.flags) & VMDK4_FLAG_RGD) { > l1_backup_offset = le64_to_cpu(header.rgd_offset) << 9; > } > - if (bdrv_getlength(file) < > - le64_to_cpu(header.grain_offset) * BDRV_SECTOR_SIZE) { > + if (bdrv_nb_sectors(file) < le64_to_cpu(header.grain_offset)) { > error_setg(errp, "File truncated, expecting at least %" PRId64 " bytes", > (int64_t)(le64_to_cpu(header.grain_offset) > * BDRV_SECTOR_SIZE)); > @@ -2004,7 +2003,7 @@ static int vmdk_check(BlockDriverState *bs, BdrvCheckResult *result, > BDRVVmdkState *s = bs->opaque; > VmdkExtent *extent = NULL; > int64_t sector_num = 0; > - int64_t total_sectors = bdrv_getlength(bs) / BDRV_SECTOR_SIZE; > + int64_t total_sectors = bdrv_nb_sectors(bs); > int ret; > uint64_t cluster_offset; > > -- > 1.9.3 > > ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [Qemu-devel] [PATCH v3 07/10] block: Use bdrv_nb_sectors() where sectors, not bytes are wanted 2014-06-02 15:06 ` [Qemu-devel] [PATCH v3 07/10] block: Use bdrv_nb_sectors() where sectors, not bytes are wanted Benoît Canet @ 2014-06-02 16:45 ` Markus Armbruster 0 siblings, 0 replies; 13+ messages in thread From: Markus Armbruster @ 2014-06-02 16:45 UTC (permalink / raw) To: Benoît Canet; +Cc: kwolf, qemu-devel, stefanha, mreitz Benoît Canet <benoit.canet@irqsave.net> writes: > The Friday 30 May 2014 à 20:13:48 (+0200), Markus Armbruster wrote : >> Instead of bdrv_getlength(). >> >> Aside: a few of these callers don't handle errors. I didn't >> investigate whether they should. >> >> Signed-off-by: Markus Armbruster <armbru@redhat.com> >> Reviewed-by: Eric Blake <eblake@redhat.com> [...] >> diff --git a/block.c b/block.c >> index cfeb497..8ebfb79 100644 >> --- a/block.c >> +++ b/block.c >> @@ -5258,13 +5258,12 @@ BdrvDirtyBitmap *bdrv_create_dirty_bitmap(BlockDriverState *bs, int granularity, >> >> granularity >>= BDRV_SECTOR_BITS; >> assert(granularity); >> - bitmap_size = bdrv_getlength(bs); >> + bitmap_size = bdrv_nb_sectors(bs); > > The name bitmap_size seems to imply the unit is byte. I didn't examine how the bitmap is used. My patch doesn't change the value put into bitmap_size. >> if (bitmap_size < 0) { >> error_setg_errno(errp, -bitmap_size, "could not get length of device"); >> errno = -bitmap_size; >> return NULL; >> } >> - bitmap_size >>= BDRV_SECTOR_BITS; >> bitmap = g_malloc0(sizeof(BdrvDirtyBitmap)); >> bitmap->bitmap = hbitmap_alloc(bitmap_size, ffs(granularity) - 1); >> QLIST_INSERT_HEAD(&bs->dirty_bitmaps, bitmap, list); [...] ^ permalink raw reply [flat|nested] 13+ messages in thread
[parent not found: <1401473631-10724-9-git-send-email-armbru@redhat.com>]
* Re: [Qemu-devel] [PATCH v3 08/10] block: Drop superfluous aligning of bdrv_getlength()'s value [not found] ` <1401473631-10724-9-git-send-email-armbru@redhat.com> @ 2014-06-02 15:07 ` Benoît Canet 0 siblings, 0 replies; 13+ messages in thread From: Benoît Canet @ 2014-06-02 15:07 UTC (permalink / raw) To: Markus Armbruster; +Cc: kwolf, qemu-devel, stefanha, mreitz The Friday 30 May 2014 à 20:13:49 (+0200), Markus Armbruster wrote : > It returns a multiple of the sector size. > > Signed-off-by: Markus Armbruster <armbru@redhat.com> > Reviewed-by: Max Reitz <mreitz@redhat.com> > --- > block.c | 1 - > block/qcow2.c | 1 - > 2 files changed, 2 deletions(-) > > diff --git a/block.c b/block.c > index 8ebfb79..41837b4 100644 > --- a/block.c > +++ b/block.c > @@ -1260,7 +1260,6 @@ void bdrv_append_temp_snapshot(BlockDriverState *bs, int flags, Error **errp) > error_setg_errno(errp, -total_size, "Could not get image size"); > goto out; > } > - total_size &= BDRV_SECTOR_MASK; > > /* Create the temporary image */ > ret = get_tmp_filename(tmp_filename, PATH_MAX + 1); > diff --git a/block/qcow2.c b/block/qcow2.c > index 98f624c..4af09bd 100644 > --- a/block/qcow2.c > +++ b/block/qcow2.c > @@ -1927,7 +1927,6 @@ static int qcow2_write_compressed(BlockDriverState *bs, int64_t sector_num, > /* align end of file to a sector boundary to ease reading with > sector based I/Os */ > cluster_offset = bdrv_getlength(bs->file); > - cluster_offset = (cluster_offset + 511) & ~511; > bdrv_truncate(bs->file, cluster_offset); > return 0; > } > -- > 1.9.3 > > Reviewed-by: Benoit Canet <benoit@irqsave.net> ^ permalink raw reply [flat|nested] 13+ messages in thread
[parent not found: <1401473631-10724-10-git-send-email-armbru@redhat.com>]
* Re: [Qemu-devel] [PATCH v3 09/10] qemu-img: Make img_convert() get image size just once per image [not found] ` <1401473631-10724-10-git-send-email-armbru@redhat.com> @ 2014-06-02 15:13 ` Benoît Canet 0 siblings, 0 replies; 13+ messages in thread From: Benoît Canet @ 2014-06-02 15:13 UTC (permalink / raw) To: Markus Armbruster; +Cc: kwolf, qemu-devel, stefanha, mreitz The Friday 30 May 2014 à 20:13:50 (+0200), Markus Armbruster wrote : > Chiefly so I don't have to do the error checking in quadruplicate in > the next commit. Moreover, replacing the frequently updated > bs_sectors by an array assigned just once makes the code easier to > understand. > > Signed-off-by: Markus Armbruster <armbru@redhat.com> > Reviewed-by: Max Reitz <mreitz@redhat.com> > --- > qemu-img.c | 32 ++++++++++++++++---------------- > 1 file changed, 16 insertions(+), 16 deletions(-) > > diff --git a/qemu-img.c b/qemu-img.c > index 8d996ba..2cb56c5 100644 > --- a/qemu-img.c > +++ b/qemu-img.c > @@ -1186,7 +1186,7 @@ static int img_convert(int argc, char **argv) > BlockDriver *drv, *proto_drv; > BlockDriverState **bs = NULL, *out_bs = NULL; > int64_t total_sectors, nb_sectors, sector_num, bs_offset; > - uint64_t bs_sectors; > + uint64_t *bs_sectors = NULL; > uint8_t * buf = NULL; > size_t bufsectors = IO_BUF_SIZE / BDRV_SECTOR_SIZE; > const uint8_t *buf1; > @@ -1326,7 +1326,8 @@ static int img_convert(int argc, char **argv) > > qemu_progress_print(0, 100); > > - bs = g_malloc0(bs_n * sizeof(BlockDriverState *)); > + bs = g_new0(BlockDriverState *, bs_n); > + bs_sectors = g_new(uint64_t, bs_n); > > total_sectors = 0; > for (bs_i = 0; bs_i < bs_n; bs_i++) { > @@ -1340,8 +1341,8 @@ static int img_convert(int argc, char **argv) > ret = -1; > goto out; > } > - bdrv_get_geometry(bs[bs_i], &bs_sectors); > - total_sectors += bs_sectors; > + bdrv_get_geometry(bs[bs_i], &bs_sectors[bs_i]); > + total_sectors += bs_sectors[bs_i]; > } > > if (sn_opts) { > @@ -1465,7 +1466,6 @@ static int img_convert(int argc, char **argv) > > bs_i = 0; > bs_offset = 0; > - bdrv_get_geometry(bs[0], &bs_sectors); > > /* increase bufsectors from the default 4096 (2M) if opt_transfer_length > * or discard_alignment of the out_bs is greater. Limit to 32768 (16MB) > @@ -1532,19 +1532,19 @@ static int img_convert(int argc, char **argv) > buf2 = buf; > while (remainder > 0) { > int nlow; > - while (bs_num == bs_sectors) { > + while (bs_num == bs_sectors[bs_i]) { > + bs_offset += bs_sectors[bs_i]; > bs_i++; > assert (bs_i < bs_n); > - bs_offset += bs_sectors; > - bdrv_get_geometry(bs[bs_i], &bs_sectors); > bs_num = 0; > /* printf("changing part: sector_num=%" PRId64 ", " > "bs_i=%d, bs_offset=%" PRId64 ", bs_sectors=%" PRId64 > - "\n", sector_num, bs_i, bs_offset, bs_sectors); */ > + "\n", sector_num, bs_i, bs_offset, bs_sectors[bs_i]); */ > } > - assert (bs_num < bs_sectors); > + assert (bs_num < bs_sectors[bs_i]); > > - nlow = (remainder > bs_sectors - bs_num) ? bs_sectors - bs_num : remainder; > + nlow = remainder > bs_sectors[bs_i] - bs_num > + ? bs_sectors[bs_i] - bs_num : remainder; > > ret = bdrv_read(bs[bs_i], bs_num, buf2, nlow); > if (ret < 0) { > @@ -1605,14 +1605,13 @@ restart: > break; > } > > - while (sector_num - bs_offset >= bs_sectors) { > + while (sector_num - bs_offset >= bs_sectors[bs_i]) { > + bs_offset += bs_sectors[bs_i]; > bs_i ++; > assert (bs_i < bs_n); > - bs_offset += bs_sectors; > - bdrv_get_geometry(bs[bs_i], &bs_sectors); > /* printf("changing part: sector_num=%" PRId64 ", bs_i=%d, " > "bs_offset=%" PRId64 ", bs_sectors=%" PRId64 "\n", > - sector_num, bs_i, bs_offset, bs_sectors); */ > + sector_num, bs_i, bs_offset, bs_sectors[bs_i]); */ > } > > if ((out_baseimg || has_zero_init) && > @@ -1665,7 +1664,7 @@ restart: > } > } > > - n = MIN(n, bs_sectors - (sector_num - bs_offset)); > + n = MIN(n, bs_sectors[bs_i] - (sector_num - bs_offset)); > > sectors_read += n; > if (count_allocated_sectors) { > @@ -1723,6 +1722,7 @@ out: > } > g_free(bs); > } > + g_free(bs_sectors); > fail_getopt: > g_free(options); > > -- > 1.9.3 > > Reviewed-by: Benoit Canet <benoit@irqsave.net> ^ permalink raw reply [flat|nested] 13+ messages in thread
[parent not found: <1401473631-10724-11-git-send-email-armbru@redhat.com>]
* Re: [Qemu-devel] [PATCH v3 10/10] block: Avoid bdrv_get_geometry() where errors should be detected [not found] ` <1401473631-10724-11-git-send-email-armbru@redhat.com> @ 2014-06-02 15:22 ` Benoît Canet 2014-06-02 16:49 ` Markus Armbruster 0 siblings, 1 reply; 13+ messages in thread From: Benoît Canet @ 2014-06-02 15:22 UTC (permalink / raw) To: Markus Armbruster; +Cc: kwolf, qemu-devel, stefanha, mreitz The Friday 30 May 2014 à 20:13:51 (+0200), Markus Armbruster wrote : > bdrv_get_geometry() hides errors. Use bdrv_nb_sectors() or > bdrv_getlength() instead where that's obviously inappropriate. > > Signed-off-by: Markus Armbruster <armbru@redhat.com> > Reviewed-by: Eric Blake <eblake@redhat.com> > Reviewed-by: Max Reitz <mreitz@redhat.com> > --- > block.c | 11 ++++++++--- > block/qapi.c | 14 ++++++++++---- > qemu-img.c | 59 +++++++++++++++++++++++++++++++++++++++++++++-------------- > 3 files changed, 63 insertions(+), 21 deletions(-) > > diff --git a/block.c b/block.c > index 41837b4..94f8b87 100644 > --- a/block.c > +++ b/block.c > @@ -5573,7 +5573,7 @@ void bdrv_img_create(const char *filename, const char *fmt, > if (size && size->value.n == -1) { > if (backing_file && backing_file->value.s) { > BlockDriverState *bs; > - uint64_t size; > + int64_t size; > char buf[32]; > int back_flags; > > @@ -5592,8 +5592,13 @@ void bdrv_img_create(const char *filename, const char *fmt, > local_err = NULL; > goto out; > } > - bdrv_get_geometry(bs, &size); > - size *= 512; > + size = bdrv_getlength(bs); > + if (size < 0) { > + error_setg_errno(errp, -size, "Could not get size of '%s'", > + backing_file->value.s); > + bdrv_unref(bs); > + goto out; > + } > > snprintf(buf, sizeof(buf), "%" PRId64, size); > set_option_parameter(param, BLOCK_OPT_SIZE, buf); > diff --git a/block/qapi.c b/block/qapi.c > index 75f44f1..ae6488a 100644 > --- a/block/qapi.c > +++ b/block/qapi.c > @@ -165,19 +165,25 @@ void bdrv_query_image_info(BlockDriverState *bs, > ImageInfo **p_info, > Error **errp) > { > - uint64_t total_sectors; > + int64_t size; > const char *backing_filename; > char backing_filename2[1024]; > BlockDriverInfo bdi; > int ret; > Error *err = NULL; > - ImageInfo *info = g_new0(ImageInfo, 1); > + ImageInfo *info; > > - bdrv_get_geometry(bs, &total_sectors); > + size = bdrv_getlength(bs); > + if (size < 0) { > + error_setg_errno(errp, -size, "Can't get size of device '%s'", > + bdrv_get_device_name(bs)); > + return; > + } > > + info = g_new0(ImageInfo, 1); > info->filename = g_strdup(bs->filename); > info->format = g_strdup(bdrv_get_format_name(bs)); > - info->virtual_size = total_sectors * 512; > + info->virtual_size = size; > info->actual_size = bdrv_get_allocated_file_size(bs); > info->has_actual_size = info->actual_size >= 0; > if (bdrv_is_encrypted(bs)) { > diff --git a/qemu-img.c b/qemu-img.c > index 2cb56c5..fca58bc 100644 > --- a/qemu-img.c > +++ b/qemu-img.c > @@ -959,7 +959,6 @@ static int img_compare(int argc, char **argv) > int64_t sector_num = 0; > int64_t nb_sectors; > int c, pnum; > - uint64_t bs_sectors; > uint64_t progress_base; > > for (;;) { > @@ -1021,10 +1020,18 @@ static int img_compare(int argc, char **argv) > > buf1 = qemu_blockalign(bs1, IO_BUF_SIZE); > buf2 = qemu_blockalign(bs2, IO_BUF_SIZE); > - bdrv_get_geometry(bs1, &bs_sectors); > - total_sectors1 = bs_sectors; > - bdrv_get_geometry(bs2, &bs_sectors); > - total_sectors2 = bs_sectors; > + total_sectors1 = bdrv_nb_sectors(bs1); > + if (total_sectors1 < 0) { > + error_report("Can't get size of %s: %s", > + filename1, strerror(-total_sectors1)); > + goto out; > + } > + total_sectors2 = bdrv_nb_sectors(bs2); > + if (total_sectors2 < 0) { > + error_report("Can't get size of %s: %s", > + filename2, strerror(-total_sectors2)); > + goto out; > + } Would setting ret be useful beforie goto out ? > total_sectors = MIN(total_sectors1, total_sectors2); > progress_base = MAX(total_sectors1, total_sectors2); > OA> @@ -1186,7 +1193,7 @@ static int img_convert(int argc, char **argv) > BlockDriver *drv, *proto_drv; > BlockDriverState **bs = NULL, *out_bs = NULL; > int64_t total_sectors, nb_sectors, sector_num, bs_offset; > - uint64_t *bs_sectors = NULL; > + int64_t *bs_sectors = NULL; > uint8_t * buf = NULL; > size_t bufsectors = IO_BUF_SIZE / BDRV_SECTOR_SIZE; > const uint8_t *buf1; > @@ -1327,7 +1334,7 @@ static int img_convert(int argc, char **argv) > qemu_progress_print(0, 100); > > bs = g_new0(BlockDriverState *, bs_n); > - bs_sectors = g_new(uint64_t, bs_n); > + bs_sectors = g_new(int64_t, bs_n); > > total_sectors = 0; > for (bs_i = 0; bs_i < bs_n; bs_i++) { > @@ -1341,7 +1348,13 @@ static int img_convert(int argc, char **argv) > ret = -1; > goto out; > } > - bdrv_get_geometry(bs[bs_i], &bs_sectors[bs_i]); > + bs_sectors[bs_i] = bdrv_nb_sectors(bs[bs_i]); > + if (bs_sectors[bs_i] < 0) { > + error_report("Could not get size of %s: %s", > + argv[optind + bs_i], strerror(-bs_sectors[bs_i])); > + ret = -1; > + goto out; > + } > total_sectors += bs_sectors[bs_i]; > } > > @@ -2422,9 +2435,9 @@ static int img_rebase(int argc, char **argv) > * the image is the same as the original one at any time. > */ > if (!unsafe) { > - uint64_t num_sectors; > - uint64_t old_backing_num_sectors; > - uint64_t new_backing_num_sectors = 0; > + int64_t num_sectors; > + int64_t old_backing_num_sectors; > + int64_t new_backing_num_sectors = 0; > uint64_t sector; > int n; > uint8_t * buf_old; > @@ -2434,10 +2447,28 @@ static int img_rebase(int argc, char **argv) > buf_old = qemu_blockalign(bs, IO_BUF_SIZE); > buf_new = qemu_blockalign(bs, IO_BUF_SIZE); > > - bdrv_get_geometry(bs, &num_sectors); > - bdrv_get_geometry(bs_old_backing, &old_backing_num_sectors); > + num_sectors = bdrv_nb_sectors(bs); > + if (num_sectors < 0) { > + error_report("Could not get size of '%s': %s", > + filename, strerror(-num_sectors)); > + goto out; > + } > + old_backing_num_sectors = bdrv_nb_sectors(bs_old_backing); > + if (old_backing_num_sectors < 0) { > + char backing_name[1024]; > + > + bdrv_get_backing_filename(bs, backing_name, sizeof(backing_name)); > + error_report("Could not get size of '%s': %s", > + backing_name, strerror(-old_backing_num_sectors)); > + goto out; > + } > if (bs_new_backing) { > - bdrv_get_geometry(bs_new_backing, &new_backing_num_sectors); > + new_backing_num_sectors = bdrv_nb_sectors(bs_new_backing); > + if (new_backing_num_sectors < 0) { > + error_report("Could not get size of '%s': %s", > + out_baseimg, strerror(-new_backing_num_sectors)); > + goto out; > + } > } > > if (num_sectors != 0) { > -- > 1.9.3 > > ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [Qemu-devel] [PATCH v3 10/10] block: Avoid bdrv_get_geometry() where errors should be detected 2014-06-02 15:22 ` [Qemu-devel] [PATCH v3 10/10] block: Avoid bdrv_get_geometry() where errors should be detected Benoît Canet @ 2014-06-02 16:49 ` Markus Armbruster 2014-06-04 11:51 ` Markus Armbruster 0 siblings, 1 reply; 13+ messages in thread From: Markus Armbruster @ 2014-06-02 16:49 UTC (permalink / raw) To: Benoît Canet; +Cc: kwolf, qemu-devel, stefanha, mreitz Benoît Canet <benoit.canet@irqsave.net> writes: > The Friday 30 May 2014 à 20:13:51 (+0200), Markus Armbruster wrote : >> bdrv_get_geometry() hides errors. Use bdrv_nb_sectors() or >> bdrv_getlength() instead where that's obviously inappropriate. >> >> Signed-off-by: Markus Armbruster <armbru@redhat.com> >> Reviewed-by: Eric Blake <eblake@redhat.com> >> Reviewed-by: Max Reitz <mreitz@redhat.com> >> --- >> block.c | 11 ++++++++--- >> block/qapi.c | 14 ++++++++++---- >> qemu-img.c | 59 +++++++++++++++++++++++++++++++++++++++++++++-------------- >> 3 files changed, 63 insertions(+), 21 deletions(-) >> >> diff --git a/block.c b/block.c >> index 41837b4..94f8b87 100644 >> --- a/block.c >> +++ b/block.c >> @@ -5573,7 +5573,7 @@ void bdrv_img_create(const char *filename, const char *fmt, >> if (size && size->value.n == -1) { >> if (backing_file && backing_file->value.s) { >> BlockDriverState *bs; >> - uint64_t size; >> + int64_t size; >> char buf[32]; >> int back_flags; >> >> @@ -5592,8 +5592,13 @@ void bdrv_img_create(const char *filename, const char *fmt, >> local_err = NULL; >> goto out; >> } >> - bdrv_get_geometry(bs, &size); >> - size *= 512; >> + size = bdrv_getlength(bs); >> + if (size < 0) { >> + error_setg_errno(errp, -size, "Could not get size of '%s'", >> + backing_file->value.s); >> + bdrv_unref(bs); >> + goto out; >> + } >> >> snprintf(buf, sizeof(buf), "%" PRId64, size); >> set_option_parameter(param, BLOCK_OPT_SIZE, buf); >> diff --git a/block/qapi.c b/block/qapi.c >> index 75f44f1..ae6488a 100644 >> --- a/block/qapi.c >> +++ b/block/qapi.c >> @@ -165,19 +165,25 @@ void bdrv_query_image_info(BlockDriverState *bs, >> ImageInfo **p_info, >> Error **errp) >> { >> - uint64_t total_sectors; >> + int64_t size; >> const char *backing_filename; >> char backing_filename2[1024]; >> BlockDriverInfo bdi; >> int ret; >> Error *err = NULL; >> - ImageInfo *info = g_new0(ImageInfo, 1); >> + ImageInfo *info; >> >> - bdrv_get_geometry(bs, &total_sectors); >> + size = bdrv_getlength(bs); >> + if (size < 0) { >> + error_setg_errno(errp, -size, "Can't get size of device '%s'", >> + bdrv_get_device_name(bs)); >> + return; >> + } >> >> + info = g_new0(ImageInfo, 1); >> info->filename = g_strdup(bs->filename); >> info->format = g_strdup(bdrv_get_format_name(bs)); >> - info->virtual_size = total_sectors * 512; >> + info->virtual_size = size; >> info->actual_size = bdrv_get_allocated_file_size(bs); >> info->has_actual_size = info->actual_size >= 0; >> if (bdrv_is_encrypted(bs)) { >> diff --git a/qemu-img.c b/qemu-img.c >> index 2cb56c5..fca58bc 100644 >> --- a/qemu-img.c >> +++ b/qemu-img.c >> @@ -959,7 +959,6 @@ static int img_compare(int argc, char **argv) >> int64_t sector_num = 0; >> int64_t nb_sectors; >> int c, pnum; >> - uint64_t bs_sectors; >> uint64_t progress_base; >> >> for (;;) { >> @@ -1021,10 +1020,18 @@ static int img_compare(int argc, char **argv) >> >> buf1 = qemu_blockalign(bs1, IO_BUF_SIZE); >> buf2 = qemu_blockalign(bs2, IO_BUF_SIZE); >> - bdrv_get_geometry(bs1, &bs_sectors); >> - total_sectors1 = bs_sectors; >> - bdrv_get_geometry(bs2, &bs_sectors); >> - total_sectors2 = bs_sectors; >> + total_sectors1 = bdrv_nb_sectors(bs1); >> + if (total_sectors1 < 0) { >> + error_report("Can't get size of %s: %s", >> + filename1, strerror(-total_sectors1)); >> + goto out; >> + } >> + total_sectors2 = bdrv_nb_sectors(bs2); >> + if (total_sectors2 < 0) { >> + error_report("Can't get size of %s: %s", >> + filename2, strerror(-total_sectors2)); >> + goto out; >> + } > Would setting ret be useful beforie goto out ? Yes, to a value > 1. But which one? We use 2, 3 and 4, but their documented only as ">1 - Error occured". >> total_sectors = MIN(total_sectors1, total_sectors2); >> progress_base = MAX(total_sectors1, total_sectors2); >> [...] Thanks! ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [Qemu-devel] [PATCH v3 10/10] block: Avoid bdrv_get_geometry() where errors should be detected 2014-06-02 16:49 ` Markus Armbruster @ 2014-06-04 11:51 ` Markus Armbruster 0 siblings, 0 replies; 13+ messages in thread From: Markus Armbruster @ 2014-06-04 11:51 UTC (permalink / raw) To: Benoît Canet; +Cc: kwolf, qemu-devel, stefanha, mreitz Markus Armbruster <armbru@redhat.com> writes: > Benoît Canet <benoit.canet@irqsave.net> writes: > >> The Friday 30 May 2014 à 20:13:51 (+0200), Markus Armbruster wrote : >>> bdrv_get_geometry() hides errors. Use bdrv_nb_sectors() or >>> bdrv_getlength() instead where that's obviously inappropriate. [...] >>> diff --git a/qemu-img.c b/qemu-img.c >>> index 2cb56c5..fca58bc 100644 >>> --- a/qemu-img.c >>> +++ b/qemu-img.c >>> @@ -959,7 +959,6 @@ static int img_compare(int argc, char **argv) >>> int64_t sector_num = 0; >>> int64_t nb_sectors; >>> int c, pnum; >>> - uint64_t bs_sectors; >>> uint64_t progress_base; >>> >>> for (;;) { >>> @@ -1021,10 +1020,18 @@ static int img_compare(int argc, char **argv) >>> >>> buf1 = qemu_blockalign(bs1, IO_BUF_SIZE); >>> buf2 = qemu_blockalign(bs2, IO_BUF_SIZE); >>> - bdrv_get_geometry(bs1, &bs_sectors); >>> - total_sectors1 = bs_sectors; >>> - bdrv_get_geometry(bs2, &bs_sectors); >>> - total_sectors2 = bs_sectors; >>> + total_sectors1 = bdrv_nb_sectors(bs1); >>> + if (total_sectors1 < 0) { >>> + error_report("Can't get size of %s: %s", >>> + filename1, strerror(-total_sectors1)); >>> + goto out; >>> + } >>> + total_sectors2 = bdrv_nb_sectors(bs2); >>> + if (total_sectors2 < 0) { >>> + error_report("Can't get size of %s: %s", >>> + filename2, strerror(-total_sectors2)); >>> + goto out; >>> + } >> Would setting ret be useful beforie goto out ? > > Yes, to a value > 1. But which one? We use 2, 3 and 4, but their > documented only as ">1 - Error occured". All right, I'm picking the value we use for read failures: 4. >>> total_sectors = MIN(total_sectors1, total_sectors2); >>> progress_base = MAX(total_sectors1, total_sectors2); >>> > [...] > > Thanks! ^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2014-06-04 11:51 UTC | newest] Thread overview: 13+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- [not found] <1401473631-10724-1-git-send-email-armbru@redhat.com> [not found] ` <1401473631-10724-2-git-send-email-armbru@redhat.com> 2014-06-02 14:50 ` [Qemu-devel] [PATCH v3 01/10] raw-posix: Fix raw_getlength() to always return -errno on error Benoît Canet [not found] ` <1401473631-10724-3-git-send-email-armbru@redhat.com> 2014-06-02 14:54 ` [Qemu-devel] [PATCH v3 02/10] block: New bdrv_nb_sectors() Benoît Canet [not found] ` <1401473631-10724-4-git-send-email-armbru@redhat.com> 2014-06-02 14:55 ` [Qemu-devel] [PATCH v3 03/10] block: Use bdrv_nb_sectors() in bdrv_make_zero() Benoît Canet [not found] ` <1401473631-10724-5-git-send-email-armbru@redhat.com> 2014-06-02 14:58 ` [Qemu-devel] [PATCH v3 04/10] block: Use bdrv_nb_sectors() in bdrv_aligned_preadv() Benoît Canet [not found] ` <1401473631-10724-6-git-send-email-armbru@redhat.com> 2014-06-02 15:00 ` [Qemu-devel] [PATCH v3 05/10] block: Use bdrv_nb_sectors() in bdrv_co_get_block_status() Benoît Canet [not found] ` <1401473631-10724-7-git-send-email-armbru@redhat.com> 2014-06-02 15:02 ` [Qemu-devel] [PATCH v3 06/10] block: Use bdrv_nb_sectors() in img_convert() Benoît Canet [not found] ` <1401473631-10724-8-git-send-email-armbru@redhat.com> 2014-06-02 15:06 ` [Qemu-devel] [PATCH v3 07/10] block: Use bdrv_nb_sectors() where sectors, not bytes are wanted Benoît Canet 2014-06-02 16:45 ` Markus Armbruster [not found] ` <1401473631-10724-9-git-send-email-armbru@redhat.com> 2014-06-02 15:07 ` [Qemu-devel] [PATCH v3 08/10] block: Drop superfluous aligning of bdrv_getlength()'s value Benoît Canet [not found] ` <1401473631-10724-10-git-send-email-armbru@redhat.com> 2014-06-02 15:13 ` [Qemu-devel] [PATCH v3 09/10] qemu-img: Make img_convert() get image size just once per image Benoît Canet [not found] ` <1401473631-10724-11-git-send-email-armbru@redhat.com> 2014-06-02 15:22 ` [Qemu-devel] [PATCH v3 10/10] block: Avoid bdrv_get_geometry() where errors should be detected Benoît Canet 2014-06-02 16:49 ` Markus Armbruster 2014-06-04 11:51 ` Markus Armbruster
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).