At 2015/6/18 20:47, Stefan Hajnoczi Wrote:
On Thu, Jun 18, 2015 at 04:49:11PM +0800, Wen Congyang wrote:
Signed-off-by: Wen Congyang <we...@cn.fujitsu.com>
Signed-off-by: zhanghailiang <zhang.zhanghaili...@huawei.com>
Signed-off-by: Gonglei <arei.gong...@huawei.com>
---
  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().

NBD server will write to this BDS(backing reference target). So I cannot use
bdrv_op_block(). If some emulated devices also write to it, the data will
be broken. The purpose is that: this BDS cannot be attached, and any emulated
devices will meet some erros if it tries to attach to this BDS.

Thanks
Wen Congyang


Stefan


Reply via email to