On Thu, Jun 18, 2015 at 04:49:11PM +0800, Wen Congyang wrote: > Signed-off-by: Wen Congyang > Signed-off-by: zhanghailiang > Signed-off-by: Gonglei > --- > block.c | 9 +++++++++ > 1 file changed, 9 insertions(+) > > diff --git a/block.c b/block.c > index d1ed227..0b41af4 100644 > --- a/block.c > +++ b/block.c > @@ -1294,6 +1294,14 @@ static int bdrv_open_backing_reference_file(BlockDriverState *bs, > } > > backing_hd = blk_bs(backing_blk); > + /* Don't allow a disk use backing reference target */ > + ret = blk_attach_dev(backing_hd->blk, bs); > + if (ret < 0) { > + error_setg(errp, "backing_hd %s is used by the other device model", > + backing_name); > + goto free_exit; > + } Can you explain the purpose of this patch? I'm not sure blk_attach_dev() is the appropriate API. It is only used by emulated devices but not by the run-time NBD server, for example. This means you are not preventing all other users from accessing this BDS. The op blockers mechanism is normally used to prevent operations on a BDS. See bdrv_op_is_blocked() and bdrv_op_block(). Stefan