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.f...@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.