On 08.07.20 20:24, Andrey Shinkevich wrote:
> On 25.06.2020 18:21, Max Reitz wrote:
>> Places that use patterns like
>>
>> if (bs->drv->is_filter && bs->file) {
>> ... something about bs->file->bs ...
>> }
>>
>> should be
>>
>> BlockDriverState *filtered = bdrv_filter_bs(bs);
>> if (filtered) {
>> ... something about @filtered ...
>> }
>>
>> instead.
>>
>> Signed-off-by: Max Reitz <[email protected]>
>> ---
>> block.c | 31 ++++++++++++++++++++-----------
>> block/io.c | 7 +++++--
>> migration/block-dirty-bitmap.c | 8 +-------
>> 3 files changed, 26 insertions(+), 20 deletions(-)
>>
> ...
>> diff --git a/block/io.c b/block/io.c
>> index df8f2a98d4..385176b331 100644
>> --- a/block/io.c
>> +++ b/block/io.c
>> @@ -3307,6 +3307,7 @@ int coroutine_fn bdrv_co_truncate(BdrvChild
>> *child, int64_t offset, bool exact,
>> Error **errp)
>> {
>> BlockDriverState *bs = child->bs;
>> + BdrvChild *filtered;
>> BlockDriver *drv = bs->drv;
>> BdrvTrackedRequest req;
>> int64_t old_size, new_bytes;
>> @@ -3358,6 +3359,8 @@ int coroutine_fn bdrv_co_truncate(BdrvChild
>> *child, int64_t offset, bool exact,
>> goto out;
>> }
>> + filtered = bdrv_filter_child(bs);
>> +
>
> Isn't better to have this initialization right before the relevant
> if/else block?Hm, well, yes. In this case, though, maybe not. Patch 16 will add another BdrvChild to be initialized here (@backing), and we need to initialize that one here. So I felt it made sense to group them together. They got split up when I decided to put @filtered into this patch and @backing into its own. So now it may look a bit weird, but I feel like after patch 16 it makes sense. (I’m indifferent, basically.) Max
signature.asc
Description: OpenPGP digital signature
