Skip to content
  • Fam Zheng's avatar
    6653a73d
    qed: Implement .bdrv_drain · 6653a73d
    Fam Zheng authored
    
    
    The "need_check_timer" is used to clear the "NEED_CHECK" flag in the
    image header after a grace period once metadata update has finished. To
    comply with the bdrv_drain semantics, we should make sure it remains
    deleted once .bdrv_drain is called.
    
    The change to qed_need_check_timer_cb is needed because bdrv_qed_drain
    is called after s->bs has been drained, and should not operate on it;
    instead it should operate on the BdrvChild-ren exclusively.  Doing so
    is easy because QED does not have a bdrv_co_flush_to_os callback, hence
    all that is needed to flush it is to ensure writes have reached the disk.
    
    Based on commit df9a681d (which however included some unrelated
    hunks, possibly due to a merge failure or an overlooked squash).
    The patch was reverted because at the time bdrv_qed_drain could call
    qed_plug_allocating_write_reqs while an allocating write was queued.
    This however is not possible anymore after the previous patch;
    .bdrv_drain is only called after all writes have completed at the
    QED level, and its purpose is to trigger metadata writes in bs->file.
    
    Signed-off-by: default avatarFam Zheng <famz@redhat.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    Message-Id: <1477565348-5458-7-git-send-email-pbonzini@redhat.com>
    Signed-off-by: default avatarFam Zheng <famz@redhat.com>
    6653a73d
    qed: Implement .bdrv_drain
    Fam Zheng authored
    
    
    The "need_check_timer" is used to clear the "NEED_CHECK" flag in the
    image header after a grace period once metadata update has finished. To
    comply with the bdrv_drain semantics, we should make sure it remains
    deleted once .bdrv_drain is called.
    
    The change to qed_need_check_timer_cb is needed because bdrv_qed_drain
    is called after s->bs has been drained, and should not operate on it;
    instead it should operate on the BdrvChild-ren exclusively.  Doing so
    is easy because QED does not have a bdrv_co_flush_to_os callback, hence
    all that is needed to flush it is to ensure writes have reached the disk.
    
    Based on commit df9a681d (which however included some unrelated
    hunks, possibly due to a merge failure or an overlooked squash).
    The patch was reverted because at the time bdrv_qed_drain could call
    qed_plug_allocating_write_reqs while an allocating write was queued.
    This however is not possible anymore after the previous patch;
    .bdrv_drain is only called after all writes have completed at the
    QED level, and its purpose is to trigger metadata writes in bs->file.
    
    Signed-off-by: default avatarFam Zheng <famz@redhat.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    Message-Id: <1477565348-5458-7-git-send-email-pbonzini@redhat.com>
    Signed-off-by: default avatarFam Zheng <famz@redhat.com>
Loading