On Tue, Aug 15, 2017 at 12:04:53PM +0800, Fam Zheng wrote: > @@ -147,6 +166,24 @@ static void blk_root_activate(BdrvChild *child, Error **errp) > > blk->disable_perm = false; > > + blk_set_perm(blk, blk->perm, BLK_PERM_ALL, &local_err); > + if (local_err) { > + error_propagate(errp, local_err); > + blk->disable_perm = true; > + return; > + } > + > + if (runstate_check(RUN_STATE_INMIGRATE)) { > + /* Activation can happen when migration process is still active, for > + * example when nbd_server_add is called during non-shared storage > + * migration. Defer the shared_perm update to migration completion. */ > + if (!blk->vmsh) { > + blk->vmsh = qemu_add_vm_change_state_handler(blk_vm_state_changed, > + blk); Please add a qemu_del_vm_change_state_handler() call to cover the case where the BB is deleted before the migration state changes. This is necessary to prevent a memory leak and a crash when the change state handler is invoked. Stefan