All of lore.kernel.org
 help / color / mirror / Atom feed
From: Max Reitz <mreitz@redhat.com>
To: Eric Blake <eblake@redhat.com>, qemu-devel@nongnu.org
Cc: Kevin Wolf <kwolf@redhat.com>,
	Markus Armbruster <armbru@redhat.com>,
	Stefan Hajnoczi <stefanha@redhat.com>,
	Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Subject: Re: [Qemu-devel] [PATCH v3 07/14] qemu-img: Use BlockBackend as far as possible
Date: Tue, 27 Jan 2015 10:07:32 -0500	[thread overview]
Message-ID: <54C7A9B4.6090201@redhat.com> (raw)
In-Reply-To: <54C7081D.9030706@redhat.com>

On 2015-01-26 at 22:38, Eric Blake wrote:
> On 01/26/2015 08:00 AM, Max Reitz wrote:
>> Although qemu-img already creates BlockBackends, it does not do accesses
>> to the images through them. This patch converts all of the bdrv_* calls
>> for which this is currently possible to blk_* calls. Most of the
>> remaining calls will probably stay bdrv_* calls because they really do
>> operate on the BDS level instead of the BB level.
>>
>> Signed-off-by: Max Reitz <mreitz@redhat.com>
>> ---
>>   qemu-img.c | 98 ++++++++++++++++++++++++++++++++++----------------------------
>>   1 file changed, 54 insertions(+), 44 deletions(-)
>>
>> diff --git a/qemu-img.c b/qemu-img.c
>> index 0b23c87..8b4139e 100644
>> --- a/qemu-img.c
>> @@ -1130,22 +1130,26 @@ static int img_compare(int argc, char **argv)
>>       }
>>       bs2 = blk_bs(blk2);
>>   
>> -    buf1 = qemu_blockalign(bs1, IO_BUF_SIZE);
>> -    buf2 = qemu_blockalign(bs2, IO_BUF_SIZE);
>> -    total_sectors1 = bdrv_nb_sectors(bs1);
>> +    buf1 = blk_blockalign(blk1, IO_BUF_SIZE);
>> +    buf2 = blk_blockalign(blk2, IO_BUF_SIZE);
>> +    total_sectors1 = blk_getlength(blk1);
>>       if (total_sectors1 < 0) {
>>           error_report("Can't get size of %s: %s",
>>                        filename1, strerror(-total_sectors1));
>>           ret = 4;
>>           goto out;
>>       }
>> -    total_sectors2 = bdrv_nb_sectors(bs2);
>> +    total_sectors2 = blk_getlength(blk2);
> The naming feels awkward; your conversion is now using bytes while the
> old code was using sectors, so 'total_sectors2' feels weird...
>
>>       if (total_sectors2 < 0) {
>>           error_report("Can't get size of %s: %s",
>>                        filename2, strerror(-total_sectors2));
>>           ret = 4;
>>           goto out;
>>       }
>> +
>> +    total_sectors1 /= BDRV_SECTOR_SIZE;
>> +    total_sectors2 /= BDRV_SECTOR_SIZE;
> ...at least you end up converting to sectors after all.  But it makes me
> wonder if you should have blk_nb_sectors(), and/or temporary
> intermediate variables to avoid cross-unit confusion.
>
>> @@ -1476,13 +1480,14 @@ static int img_convert(int argc, char **argv)
>>               goto out;
>>           }
>>           bs[bs_i] = blk_bs(blk[bs_i]);
>> -        bs_sectors[bs_i] = bdrv_nb_sectors(bs[bs_i]);
>> +        bs_sectors[bs_i] = blk_getlength(blk[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;
>>           }
>> +        bs_sectors[bs_i] /= BDRV_SECTOR_SIZE;
> Another instance of the confusion.
>
>>           total_sectors += bs_sectors[bs_i];
>>       }
>>   
>> @@ -1625,16 +1630,19 @@ static int img_convert(int argc, char **argv)
>>                                            out_bs->bl.discard_alignment))
>>                       );
>>   
>> -    buf = qemu_blockalign(out_bs, bufsectors * BDRV_SECTOR_SIZE);
>> +    buf = blk_blockalign(out_blk, bufsectors * BDRV_SECTOR_SIZE);
>>   
>>       if (skip_create) {
>> -        int64_t output_sectors = bdrv_nb_sectors(out_bs);
>> +        int64_t output_sectors = blk_getlength(out_blk);
>>           if (output_sectors < 0) {
>>               error_report("unable to get output image length: %s\n",
>>                            strerror(-output_sectors));
>>               ret = -1;
>>               goto out;
>> -        } else if (output_sectors < total_sectors) {
>> +        }
>> +
>> +        output_sectors /= BDRV_SECTOR_SIZE;
>> +        if (output_sectors < total_sectors) {
> And another.
>
>> @@ -2585,17 +2591,17 @@ static int img_rebase(int argc, char **argv)
>>           uint8_t * buf_new;
>>           float local_progress = 0;
>>   
>> -        buf_old = qemu_blockalign(bs, IO_BUF_SIZE);
>> -        buf_new = qemu_blockalign(bs, IO_BUF_SIZE);
>> +        buf_old = blk_blockalign(blk, IO_BUF_SIZE);
>> +        buf_new = blk_blockalign(blk, IO_BUF_SIZE);
>>   
>> -        num_sectors = bdrv_nb_sectors(bs);
>> +        num_sectors = blk_getlength(blk);
>>           if (num_sectors < 0) {
> ...
>
>> -        if (bs_new_backing) {
>> -            new_backing_num_sectors = bdrv_nb_sectors(bs_new_backing);
>> +
>> +        num_sectors /= BDRV_SECTOR_SIZE;
>> +        old_backing_num_sectors /= BDRV_SECTOR_SIZE;
> and another.
>
> I did not closely audit if there were any other conversions that should
> have been made.  Also, I suspect that a blk_nb_sectors() as a pre-req
> patch would make this one feel cleaner if you respin and rebase.

The reason why I don't want to add blk_nb_sectors() is simply that we 
want to convert all the code to using bytes at a later point anyway, so 
I felt like it'd be a step backwards to introduce blk_nb_sectors().

However, I do see your point and intermediate variables probably don't 
make this any nicer. Also, if we get to convert the code to bytes, 
finding all instances of {blk,bdrv}_nb_sectors() will be one of the 
easier tasks, so I'll just introduce blk_nb_sectors().

Max

> But if
> we don't add blk_nb_sectors(), at least this version of the patch
> appears to be clean with what it does, so you can consider this to be a
> rather weak:
>
> Reviewed-by: Eric Blake <eblake@redhat.com>
>

  reply	other threads:[~2015-01-27 15:07 UTC|newest]

Thread overview: 49+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-01-26 15:00 [Qemu-devel] [PATCH v3 00/14] block: Remove "growable", add blk_new_open() Max Reitz
2015-01-26 15:00 ` [Qemu-devel] [PATCH v3 01/14] block: Lift some BDS functions to the BlockBackend Max Reitz
2015-01-26 21:48   ` Eric Blake
2015-01-26 15:00 ` [Qemu-devel] [PATCH v3 02/14] block: Add blk_new_open() Max Reitz
2015-01-26 21:56   ` Eric Blake
2015-01-26 15:00 ` [Qemu-devel] [PATCH v3 03/14] blockdev: Use blk_new_open() in blockdev_init() Max Reitz
2015-01-26 22:37   ` Eric Blake
2015-01-27  2:08     ` Max Reitz
2015-01-26 15:00 ` [Qemu-devel] [PATCH v3 04/14] block/xen: Use blk_new_open() in blk_connect() Max Reitz
2015-01-26 22:46   ` Eric Blake
2015-02-02 18:27   ` Kevin Wolf
2015-02-02 19:41     ` Max Reitz
2015-01-26 15:00 ` [Qemu-devel] [PATCH v3 05/14] qemu-img: Use blk_new_open() in img_open() Max Reitz
2015-01-26 22:47   ` Eric Blake
2015-02-02 18:35   ` Kevin Wolf
2015-02-02 19:42     ` Max Reitz
2015-01-26 15:00 ` [Qemu-devel] [PATCH v3 06/14] qemu-img: Use blk_new_open() in img_rebase() Max Reitz
2015-01-27  3:05   ` Eric Blake
2015-01-27 15:01     ` Max Reitz
2015-02-02 19:00   ` Kevin Wolf
2015-02-02 19:47     ` Max Reitz
2015-01-26 15:00 ` [Qemu-devel] [PATCH v3 07/14] qemu-img: Use BlockBackend as far as possible Max Reitz
2015-01-27  3:38   ` Eric Blake
2015-01-27 15:07     ` Max Reitz [this message]
2015-01-26 15:00 ` [Qemu-devel] [PATCH v3 08/14] qemu-nbd: Use blk_new_open() in main() Max Reitz
2015-01-27  4:59   ` Eric Blake
2015-01-26 15:00 ` [Qemu-devel] [PATCH v3 09/14] qemu-io: Use blk_new_open() in openfile() Max Reitz
2015-01-27 16:23   ` Eric Blake
2015-02-02 19:34   ` Kevin Wolf
2015-02-02 19:51     ` Max Reitz
2015-01-26 15:00 ` [Qemu-devel] [PATCH v3 10/14] qemu-io: Remove "growable" option Max Reitz
2015-01-27 16:59   ` Eric Blake
2015-01-27 17:04     ` Max Reitz
2015-01-27 17:10       ` Eric Blake
2015-01-27 17:11         ` Max Reitz
2015-02-02 19:36           ` Kevin Wolf
2015-02-02 19:52             ` Max Reitz
2015-01-26 15:00 ` [Qemu-devel] [PATCH v3 11/14] qemu-io: Use BlockBackend Max Reitz
2015-01-27 17:08   ` Eric Blake
2015-01-26 15:00 ` [Qemu-devel] [PATCH v3 12/14] block: Clamp BlockBackend requests Max Reitz
2015-01-27 17:15   ` Eric Blake
2015-01-26 15:00 ` [Qemu-devel] [PATCH v3 13/14] block: Remove "growable" from BDS Max Reitz
2015-01-27 17:29   ` Eric Blake
2015-02-02 19:46   ` Kevin Wolf
2015-02-02 19:54     ` Max Reitz
2015-01-26 15:00 ` [Qemu-devel] [PATCH v3 14/14] block: Keep bdrv_check*_request()'s return value Max Reitz
2015-01-27 17:36   ` Eric Blake
2015-01-26 15:49 ` [Qemu-devel] [PATCH v3 00/14] block: Remove "growable", add blk_new_open() Stefano Stabellini
2015-02-02 19:50 ` Kevin Wolf

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=54C7A9B4.6090201@redhat.com \
    --to=mreitz@redhat.com \
    --cc=armbru@redhat.com \
    --cc=eblake@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=stefanha@redhat.com \
    --cc=stefano.stabellini@eu.citrix.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.