]> git.proxmox.com Git - mirror_qemu.git/blobdiff - block/mirror.c
mirror: Drop permissions on s->target on completion
[mirror_qemu.git] / block / mirror.c
index 2173a2f445561cfe50f520debab75175f12718d4..4e8f124c30a1f33d8ffeb3fb056052588339de09 100644 (file)
@@ -514,7 +514,12 @@ static void mirror_exit(BlockJob *job, void *opaque)
 
     /* Remove target parent that still uses BLK_PERM_WRITE/RESIZE before
      * inserting target_bs at s->to_replace, where we might not be able to get
-     * these permissions. */
+     * these permissions.
+     *
+     * Note that blk_unref() alone doesn't necessarily drop permissions because
+     * we might be running nested inside mirror_drain(), which takes an extra
+     * reference, so use an explicit blk_set_perm() first. */
+    blk_set_perm(s->target, 0, BLK_PERM_ALL, &error_abort);
     blk_unref(s->target);
     s->target = NULL;