On 13/10/20 09:56, Claudio Fontana wrote:
> Hi Paolo,
> 
> On 10/13/20 12:29 AM, Paolo Bonzini wrote:
>> On 12/10/20 23:45, Claudio Fontana wrote:
>>> +    ctx = blk_get_aio_context(blk);
>>> +    if (!replay_bh_schedule_oneshot_event(ctx, error_callback_bh, acb)) {
>>> +        /* regular case without replay */
>>> +        aio_bh_schedule_oneshot(ctx, error_callback_bh, acb);
>>> +    }
>>
>> Why can't the stub just call aio_bh_schedule_oneshot?  
> 
> Absolutely, it can, I just considered the option and dropped it in the end.
> 
>> This makes the API even more complicated.
> 
> In my view not really, the API just returns a boolean that tells you if the 
> event was consumed or not.

The question to ask is, is there _any_ other way to use 
replay_bh_schedule_oneshot_event other than

    if (!replay_bh_schedule_oneshot_event(ctx, error_callback_bh, acb)) {
        aio_bh_schedule_oneshot(ctx, error_callback_bh, acb);
    }

and I think there isn't.  Your point of avoiding functional code in the stubs
is also valid though.

Perhaps you could have replay_bh_schedule_oneshot_event as you have it now, but
also add a wrapper (called for example replay_bh_schedule_oneshot) that takes
care of calling aio_bh_schedule_oneshot too.  But in my opinion the "if" has
no place in block/io.c.

Paolo

> If people feel strongly that this is a wrong step, we can do the alternative 
> and put production code inside the stubs, but it just seems wrong.
> 
> Thanks!
> 
> Ciao,
> 
> Claudio
> 


Reply via email to