Il 18/09/2012 13:40, Kevin Wolf ha scritto: > +again: > + QLIST_FOREACH(m, &s->cluster_allocs, next_in_flight) { > + if (m->sleeping) { > + qemu_coroutine_enter(m->co, NULL); > + /* next_in_flight link could have become invalid */ > + goto again; > + } > + } > + > qemu_co_rwlock_wrlock(&s->l2meta_flush); > } > > static inline coroutine_fn void resume_l2meta(BDRVQcowState *s) > { > + s->in_l2meta_flush = false; > qemu_co_rwlock_unlock(&s->l2meta_flush); > } > > static bool qcow2_drain(BlockDriverState *bs) > { > BDRVQcowState *s = bs->opaque; > + QCowL2Meta *m; > + > + QLIST_FOREACH(m, &s->cluster_allocs, next_in_flight) { > + if (m->sleeping) { > + qemu_coroutine_enter(m->co, NULL); > + } > + } >
Why are the goto and in_l2meta_flush not needed here? If they are, perhaps stop_l2meta can just use qcow2_drain? Paolo