All of lore.kernel.org
 help / color / mirror / Atom feed
From: Max Reitz <mreitz@redhat.com>
To: Kevin Wolf <kwolf@redhat.com>
Cc: qemu-devel@nongnu.org, Stefan Hajnoczi <stefanha@redhat.com>
Subject: Re: [Qemu-devel] [PATCH 06/10] block: Remove bdrv_new() from bdrv_file_open()
Date: Fri, 31 Jan 2014 21:21:43 +0100	[thread overview]
Message-ID: <52EC05D7.20802@redhat.com> (raw)
In-Reply-To: <20140129133501.GH2726@dhcp-200-207.str.redhat.com>

On 29.01.2014 14:35, Kevin Wolf wrote:
> Am 26.01.2014 um 20:02 hat Max Reitz geschrieben:
>> Change bdrv_file_open() to take a simple pointer to an already existing
>> BDS instead of an indirect one. The BDS will be created in bdrv_open()
>> if necessary.
>>
>> Signed-off-by: Max Reitz <mreitz@redhat.com>
>> ---
>>   block.c | 29 ++++++++++++++++++-----------
>>   1 file changed, 18 insertions(+), 11 deletions(-)
>>
>> diff --git a/block.c b/block.c
>> index 6c29115..72eddd5 100644
>> --- a/block.c
>> +++ b/block.c
>> @@ -947,17 +947,15 @@ free_and_fail:
>>    * after the call (even on failure), so if the caller intends to reuse the
>>    * dictionary, it needs to use QINCREF() before calling bdrv_file_open.
>>    */
>> -static int bdrv_file_open(BlockDriverState **pbs, const char *filename,
>> +static int bdrv_file_open(BlockDriverState *bs, const char *filename,
>>                             QDict *options, int flags, Error **errp)
>>   {
>> -    BlockDriverState *bs = NULL;
>>       BlockDriver *drv;
>>       const char *drvname;
>>       bool allow_protocol_prefix = false;
>>       Error *local_err = NULL;
>>       int ret;
>>   
>> -    bs = bdrv_new("");
>>       bs->options = options;
>>       options = qdict_clone_shallow(options);
>>   
>> @@ -1036,7 +1034,6 @@ static int bdrv_file_open(BlockDriverState **pbs, const char *filename,
>>       QDECREF(options);
>>   
>>       bs->growable = 1;
>> -    *pbs = bs;
>>       return 0;
>>   
>>   fail:
>> @@ -1044,7 +1041,6 @@ fail:
>>       if (!bs->drv) {
>>           QDECREF(bs->options);
>>       }
>> -    bdrv_unref(bs);
>>       return ret;
>>   }
>>   
>> @@ -1235,17 +1231,28 @@ int bdrv_open(BlockDriverState **pbs, const char *filename,
>>           return 0;
>>       }
>>   
>> -    if (flags & BDRV_O_PROTOCOL) {
>> -        assert(!drv);
>> -        return bdrv_file_open(pbs, filename, options, flags & ~BDRV_O_PROTOCOL,
>> -                              errp);
>> -    }
>> -
>>       if (*pbs) {
>>           bs = *pbs;
>>       } else {
>>           bs = bdrv_new("");
>>       }
>> +
>> +    if (flags & BDRV_O_PROTOCOL) {
>> +        assert(!drv);
>> +        ret = bdrv_file_open(bs, filename, options, flags & ~BDRV_O_PROTOCOL,
>> +                             errp);
>> +        if (ret) {
>> +            if (*pbs) {
>> +                bdrv_close(bs);
> Why would bs be open when bdrv_file_open() just failed?

Good question. *g*

I'll remove this. ;-)

Max

>> +            } else {
>> +                bdrv_unref(bs);
>> +            }
>> +        } else {
>> +            *pbs = bs;
>> +        }
>> +        return ret;
>> +    }
>> +
>>       bs->options = options;
>>       options = qdict_clone_shallow(options);
> Kevin

  reply	other threads:[~2014-01-31 20:19 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-01-26 19:02 [Qemu-devel] [PATCH 00/10] block: Integrate bdrv_file_open() into bdrv_open() Max Reitz
2014-01-26 19:02 ` [Qemu-devel] [PATCH 01/10] block: Change BDS parameter of bdrv_open() to ** Max Reitz
2014-01-27  2:38   ` Benoît Canet
2014-01-27 18:51     ` Max Reitz
2014-01-27 19:31   ` Jeff Cody
2014-01-27 19:35     ` Max Reitz
2014-01-29 11:50   ` Kevin Wolf
2014-01-31 20:07     ` Max Reitz
2014-02-03  9:49       ` Kevin Wolf
2014-01-26 19:02 ` [Qemu-devel] [PATCH 02/10] block: Add reference parameter to bdrv_open() Max Reitz
2014-01-26 19:02 ` [Qemu-devel] [PATCH 03/10] block: Make bdrv_file_open() static Max Reitz
2014-01-27  2:51   ` Benoît Canet
2014-01-29 13:26   ` Kevin Wolf
2014-01-31 20:20     ` Max Reitz
2014-02-03 10:05       ` Kevin Wolf
2014-01-26 19:02 ` [Qemu-devel] [PATCH 04/10] block: Reuse NULL options check from bdrv_open() Max Reitz
2014-01-27  2:52   ` Benoît Canet
2014-01-26 19:02 ` [Qemu-devel] [PATCH 05/10] block: Reuse reference handling " Max Reitz
2014-01-27  2:56   ` Benoît Canet
2014-01-26 19:02 ` [Qemu-devel] [PATCH 06/10] block: Remove bdrv_new() from bdrv_file_open() Max Reitz
2014-01-27  3:04   ` Benoît Canet
2014-01-29 13:35   ` Kevin Wolf
2014-01-31 20:21     ` Max Reitz [this message]
2014-01-26 19:02 ` [Qemu-devel] [PATCH 07/10] block: Reuse fail path from bdrv_open() Max Reitz
2014-01-27  3:10   ` Benoît Canet
2014-01-27 18:58     ` Max Reitz
2014-01-29 13:40   ` Kevin Wolf
2014-01-26 19:02 ` [Qemu-devel] [PATCH 08/10] block: Reuse bs->options setting " Max Reitz
2014-01-27  3:13   ` Benoît Canet
2014-01-29 13:45   ` Kevin Wolf
2014-01-31 20:25     ` Max Reitz
2014-01-26 19:02 ` [Qemu-devel] [PATCH 09/10] block: Reuse success path " Max Reitz
2014-01-27 17:44   ` Jeff Cody
2014-01-27 19:06     ` Max Reitz
2014-01-26 19:02 ` [Qemu-devel] [PATCH 10/10] block: Remove bdrv_open_image()'s force_raw option Max Reitz

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=52EC05D7.20802@redhat.com \
    --to=mreitz@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=stefanha@redhat.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.