Benoît Canet <benoit.ca...@irqsave.net> writes:

> The Wednesday 10 Sep 2014 à 10:13:30 (+0200), Markus Armbruster wrote :
>> Creating an anonymous BDS can't fail.  Make that obvious.
>> 
>> Signed-off-by: Markus Armbruster <arm...@redhat.com>
>> ---
>>  block.c               | 26 +++++++++++++++++++-------
>>  block/iscsi.c         |  2 +-
>>  block/vvfat.c         |  2 +-
>>  blockdev.c            |  2 +-
>>  hw/block/xen_disk.c   |  2 +-
>>  include/block/block.h |  3 ++-
>>  qemu-img.c            |  6 +++---
>>  qemu-io.c             |  2 +-
>>  qemu-nbd.c            |  2 +-
>>  9 files changed, 30 insertions(+), 17 deletions(-)
>> 
>> diff --git a/block.c b/block.c
>> index d06dd51..4b3bcd4 100644
>> --- a/block.c
>> +++ b/block.c
>> @@ -335,10 +335,11 @@ void bdrv_register(BlockDriver *bdrv)
>>  }
>>  
>>  /* create a new block device (by default it is empty) */
>> -BlockDriverState *bdrv_new(const char *device_name, Error **errp)
>> +BlockDriverState *bdrv_new_named(const char *device_name, Error **errp)
>>  {
>>      BlockDriverState *bs;
>> -    int i;
>> +
>> +    assert(*device_name);
>
> This assert that device_name is not a null pointer.
> But here we are pretty sure that the BDS should be named given the
> name of the function.
> Should we bake an assert on device_name[0] != '\0' to avoid
> bdrv_new_named being called
> with "" as device_name ?
>
>>  
>>      if (bdrv_find(device_name)) {
>>          error_setg(errp, "Device with id '%s' already exists",
>> @@ -351,12 +352,23 @@ BlockDriverState *bdrv_new(const char *device_name, 
>> Error **errp)
>>          return NULL;
>>      }
>>  
>> -    bs = g_new0(BlockDriverState, 1);
>> -    QLIST_INIT(&bs->dirty_bitmaps);
>> +    bs = bdrv_new();
>> +
>>      pstrcpy(bs->device_name, sizeof(bs->device_name), device_name);
>
>>      if (device_name[0] != '\0') {
> Then we could remove this test.
>
>>          QTAILQ_INSERT_TAIL(&bdrv_states, bs, device_list);
> Because here would be too late anyway: an unammed BDS would have been
> created if device_name == "".

Short answer: not worth it, the function goes away in PATCH 08, and its
replacement works like you suggest.

Slightly longer answer: PATCH 02 adds BlockBackend, which also checks
device names.  blk_new() does it the way you suggest.  PATCH 08 removes
the now redundant BlockDriverState device name, including this function.

[...]

Reply via email to