On Mon, 01/22 23:08, Max Reitz wrote: > Currently, the mirror block job only knows passive operations. But once > we introduce active writes, we need to distinguish between the two; for > example, mirror_wait_for_free_in_flight_slot() should wait for a passive > operation because active writes will not use the same in-flight slots. > > Signed-off-by: Max Reitz <[email protected]> > --- > block/mirror.c | 7 +++++-- > 1 file changed, 5 insertions(+), 2 deletions(-) > > diff --git a/block/mirror.c b/block/mirror.c > index 2363e79563..bb46f3c4e9 100644 > --- a/block/mirror.c > +++ b/block/mirror.c > @@ -89,6 +89,7 @@ struct MirrorOp { > int64_t *bytes_handled; > > bool is_pseudo_op; > + bool is_active_write; > CoQueue waiting_requests; > > QTAILQ_ENTRY(MirrorOp) next; > @@ -281,8 +282,10 @@ static inline void > mirror_wait_for_free_in_flight_slot(MirrorBlockJob *s) > * some other operation to start, which may in fact be the > * caller of this function. Since there is only one pseudo op > * at any given time, we will always find some real operation > - * to wait on. */ > - if (!op->is_pseudo_op) { > + * to wait on. > + * Also, only non-active operations use up in-flight slots, so > + * we can ignore active operations. */ > + if (!op->is_pseudo_op && !op->is_active_write) { > qemu_co_queue_wait(&op->waiting_requests, NULL); > return; > } > -- > 2.14.3 >
I'd just squash this patch into 14 to avoid code churn. Fam
