On Thu, Jun 01, 2017 at 06:04:25PM +0200, Paolo Bonzini wrote: > > > On 01/06/2017 17:59, Kevin Wolf wrote: > > Am 31.05.2017 um 14:32 hat Stefan Hajnoczi geschrieben: > >> On Fri, May 26, 2017 at 10:21:51PM +0200, Kevin Wolf wrote: > >>> static void qed_clear_need_check(void *opaque, int ret) > >>> { > >>> BDRVQEDState *s = opaque; > >>> > >>> if (ret) { > >>> - qed_unplug_allocating_write_reqs(s); > >>> - return; > >>> + goto out; > >>> } > >>> > >>> s->header.features &= ~QED_F_NEED_CHECK; > >>> - qed_write_header(s, qed_flush_after_clear_need_check, s); > >>> + ret = qed_write_header(s); > >>> + (void) ret; > >>> + > >>> + ret = bdrv_flush(s->bs); > >>> + (void) ret; > >>> + > >>> +out: > >>> + qed_unplug_allocating_write_reqs(s); > >>> } > >> > >> Should we unplug allocating write reqs before flushing? The async code > >> kicks off a flush but doesn't wait for it to complete. > > > > You're right that moving it up would match the old code. Not sure if it > > would make much of a difference, though, isn't the request queue drained > > in the kernel anyway while doing a flush? > > No, it isn't AFAIK.
I was also under the impression that applications must call fsync() only after their write() calls have completed. Stefan
signature.asc
Description: PGP signature