diff mbox

dirty-bitmap: remove unnecessary return

Message ID 1467273706-5732-1-git-send-email-xiecl.fnst@cn.fujitsu.com (mailing list archive)
State New, archived
Headers show

Commit Message

Changlong Xie June 30, 2016, 8:01 a.m. UTC
Otherwise, we could never trigger assert(!bitmap->successor)

Signed-off-by: Changlong Xie <xiecl.fnst@cn.fujitsu.com>
---
 block/dirty-bitmap.c | 1 -
 1 file changed, 1 deletion(-)

Comments

Fam Zheng June 30, 2016, 8:25 a.m. UTC | #1
On Thu, 06/30 16:01, Changlong Xie wrote:
> Otherwise, we could never trigger assert(!bitmap->successor)
> 
> Signed-off-by: Changlong Xie <xiecl.fnst@cn.fujitsu.com>
> ---
>  block/dirty-bitmap.c | 1 -
>  1 file changed, 1 deletion(-)
> 
> diff --git a/block/dirty-bitmap.c b/block/dirty-bitmap.c
> index 4902ca5..e9df5ac 100644
> --- a/block/dirty-bitmap.c
> +++ b/block/dirty-bitmap.c
> @@ -131,7 +131,6 @@ int bdrv_dirty_bitmap_create_successor(BlockDriverState *bs,
>      if (bdrv_dirty_bitmap_frozen(bitmap)) {
>          error_setg(errp, "Cannot create a successor for a bitmap that is "
>                     "currently frozen");
> -        return -1;
>      }
>      assert(!bitmap->successor);

This is wrong. Then we will always trigger assert for a frozen bitmap.

Fam
Changlong Xie June 30, 2016, 8:45 a.m. UTC | #2
On 06/30/2016 04:25 PM, Fam Zheng wrote:
> On Thu, 06/30 16:01, Changlong Xie wrote:
>> Otherwise, we could never trigger assert(!bitmap->successor)
>>
>> Signed-off-by: Changlong Xie <xiecl.fnst@cn.fujitsu.com>
>> ---
>>   block/dirty-bitmap.c | 1 -
>>   1 file changed, 1 deletion(-)
>>
>> diff --git a/block/dirty-bitmap.c b/block/dirty-bitmap.c
>> index 4902ca5..e9df5ac 100644
>> --- a/block/dirty-bitmap.c
>> +++ b/block/dirty-bitmap.c
>> @@ -131,7 +131,6 @@ int bdrv_dirty_bitmap_create_successor(BlockDriverState *bs,
>>       if (bdrv_dirty_bitmap_frozen(bitmap)) {
>>           error_setg(errp, "Cannot create a successor for a bitmap that is "
>>                      "currently frozen");
>> -        return -1;
>>       }
>>       assert(!bitmap->successor);
>
> This is wrong. Then we will always trigger assert for a frozen bitmap.
>

IMO, when it's a frozen bitmap, we will always return -1. So 
"assert(!bitmap->successor)" is useless here, am i right?

> Fam
>
>
>
Jeff Cody June 30, 2016, 2 p.m. UTC | #3
On Thu, Jun 30, 2016 at 04:45:52PM +0800, Changlong Xie wrote:
> On 06/30/2016 04:25 PM, Fam Zheng wrote:
> >On Thu, 06/30 16:01, Changlong Xie wrote:
> >>Otherwise, we could never trigger assert(!bitmap->successor)
> >>
> >>Signed-off-by: Changlong Xie <xiecl.fnst@cn.fujitsu.com>
> >>---
> >>  block/dirty-bitmap.c | 1 -
> >>  1 file changed, 1 deletion(-)
> >>
> >>diff --git a/block/dirty-bitmap.c b/block/dirty-bitmap.c
> >>index 4902ca5..e9df5ac 100644
> >>--- a/block/dirty-bitmap.c
> >>+++ b/block/dirty-bitmap.c
> >>@@ -131,7 +131,6 @@ int bdrv_dirty_bitmap_create_successor(BlockDriverState *bs,
> >>      if (bdrv_dirty_bitmap_frozen(bitmap)) {
> >>          error_setg(errp, "Cannot create a successor for a bitmap that is "
> >>                     "currently frozen");
> >>-        return -1;
> >>      }
> >>      assert(!bitmap->successor);
> >
> >This is wrong. Then we will always trigger assert for a frozen bitmap.
> >
> 
> IMO, when it's a frozen bitmap, we will always return -1. So
> "assert(!bitmap->successor)" is useless here, am i right?
>

I don't see a path where the assert could trigger, so I would agree that the
assert itself, while harmless, is not necessary (although it could be argued
it is in place in case the code above it changes in a way that does not
check bitmap->successor).

That doesn't mean we want to try and trigger an assert, however! :) The
error return is the proper error handling -- we don't expect that asserts
should ever be encountered QEMU, if one happens that is a sign of a bug.

Jeff
John Snow June 30, 2016, 6:18 p.m. UTC | #4
On 06/30/2016 10:00 AM, Jeff Cody wrote:
> On Thu, Jun 30, 2016 at 04:45:52PM +0800, Changlong Xie wrote:
>> On 06/30/2016 04:25 PM, Fam Zheng wrote:
>>> On Thu, 06/30 16:01, Changlong Xie wrote:
>>>> Otherwise, we could never trigger assert(!bitmap->successor)
>>>>
>>>> Signed-off-by: Changlong Xie <xiecl.fnst@cn.fujitsu.com>
>>>> ---
>>>>  block/dirty-bitmap.c | 1 -
>>>>  1 file changed, 1 deletion(-)
>>>>
>>>> diff --git a/block/dirty-bitmap.c b/block/dirty-bitmap.c
>>>> index 4902ca5..e9df5ac 100644
>>>> --- a/block/dirty-bitmap.c
>>>> +++ b/block/dirty-bitmap.c
>>>> @@ -131,7 +131,6 @@ int bdrv_dirty_bitmap_create_successor(BlockDriverState *bs,
>>>>      if (bdrv_dirty_bitmap_frozen(bitmap)) {
>>>>          error_setg(errp, "Cannot create a successor for a bitmap that is "
>>>>                     "currently frozen");
>>>> -        return -1;
>>>>      }
>>>>      assert(!bitmap->successor);
>>>
>>> This is wrong. Then we will always trigger assert for a frozen bitmap.
>>>
>>
>> IMO, when it's a frozen bitmap, we will always return -1. So
>> "assert(!bitmap->successor)" is useless here, am i right?
>>
> 
> I don't see a path where the assert could trigger, so I would agree that the
> assert itself, while harmless, is not necessary (although it could be argued
> it is in place in case the code above it changes in a way that does not
> check bitmap->successor).
> 
> That doesn't mean we want to try and trigger an assert, however! :) The
> error return is the proper error handling -- we don't expect that asserts
> should ever be encountered QEMU, if one happens that is a sign of a bug.
> 
> Jeff
> 

The assert was indeed added to ensure that if the valid states of the
bitmap later expanded or changed, that the status checkers (e.g.
bdrv_dirty_bitmap_frozen()) were changed to match.
Changlong Xie July 1, 2016, 1:20 a.m. UTC | #5
On 07/01/2016 02:18 AM, John Snow wrote:
>
>
> On 06/30/2016 10:00 AM, Jeff Cody wrote:
>> On Thu, Jun 30, 2016 at 04:45:52PM +0800, Changlong Xie wrote:
>>> On 06/30/2016 04:25 PM, Fam Zheng wrote:
>>>> On Thu, 06/30 16:01, Changlong Xie wrote:
>>>>> Otherwise, we could never trigger assert(!bitmap->successor)
>>>>>
>>>>> Signed-off-by: Changlong Xie <xiecl.fnst@cn.fujitsu.com>
>>>>> ---
>>>>>   block/dirty-bitmap.c | 1 -
>>>>>   1 file changed, 1 deletion(-)
>>>>>
>>>>> diff --git a/block/dirty-bitmap.c b/block/dirty-bitmap.c
>>>>> index 4902ca5..e9df5ac 100644
>>>>> --- a/block/dirty-bitmap.c
>>>>> +++ b/block/dirty-bitmap.c
>>>>> @@ -131,7 +131,6 @@ int bdrv_dirty_bitmap_create_successor(BlockDriverState *bs,
>>>>>       if (bdrv_dirty_bitmap_frozen(bitmap)) {
>>>>>           error_setg(errp, "Cannot create a successor for a bitmap that is "
>>>>>                      "currently frozen");
>>>>> -        return -1;
>>>>>       }
>>>>>       assert(!bitmap->successor);
>>>>
>>>> This is wrong. Then we will always trigger assert for a frozen bitmap.
>>>>
>>>
>>> IMO, when it's a frozen bitmap, we will always return -1. So
>>> "assert(!bitmap->successor)" is useless here, am i right?
>>>
>>
>> I don't see a path where the assert could trigger, so I would agree that the
>> assert itself, while harmless, is not necessary (although it could be argued
>> it is in place in case the code above it changes in a way that does not
>> check bitmap->successor).

Agree

>>
>> That doesn't mean we want to try and trigger an assert, however! :) The
>> error return is the proper error handling -- we don't expect that asserts
>> should ever be encountered QEMU, if one happens that is a sign of a bug.
>>

Got it

>> Jeff
>>
>
> The assert was indeed added to ensure that if the valid states of the
> bitmap later expanded or changed, that the status checkers (e.g.
> bdrv_dirty_bitmap_frozen()) were changed to match.
>

Thanks for all explanations. Although my brain always forces to think 
it's a redundant execution path, but since it's harmless, let's keep it.

>
> .
>
diff mbox

Patch

diff --git a/block/dirty-bitmap.c b/block/dirty-bitmap.c
index 4902ca5..e9df5ac 100644
--- a/block/dirty-bitmap.c
+++ b/block/dirty-bitmap.c
@@ -131,7 +131,6 @@  int bdrv_dirty_bitmap_create_successor(BlockDriverState *bs,
     if (bdrv_dirty_bitmap_frozen(bitmap)) {
         error_setg(errp, "Cannot create a successor for a bitmap that is "
                    "currently frozen");
-        return -1;
     }
     assert(!bitmap->successor);