diff mbox

[RFC,10/14] allow the backing image access the origin BlockDriverState

Message ID 1423710438-14377-11-git-send-email-wency@cn.fujitsu.com
State New
Headers show

Commit Message

Wen Congyang Feb. 12, 2015, 3:07 a.m. UTC
Block replication needs this feature.

Signed-off-by: Wen Congyang <wency@cn.fujitsu.com>
Signed-off-by: zhanghailiang <zhang.zhanghailiang@huawei.com>
Signed-off-by: Gonglei <arei.gonglei@huawei.com>
---
 block.c                   | 2 ++
 include/block/block_int.h | 2 ++
 2 files changed, 4 insertions(+)

Comments

Max Reitz Feb. 23, 2015, 10:01 p.m. UTC | #1
On 2015-02-11 at 22:07, Wen Congyang wrote:
> Block replication needs this feature.
>
> Signed-off-by: Wen Congyang <wency@cn.fujitsu.com>
> Signed-off-by: zhanghailiang <zhang.zhanghailiang@huawei.com>
> Signed-off-by: Gonglei <arei.gonglei@huawei.com>
> ---
>   block.c                   | 2 ++
>   include/block/block_int.h | 2 ++
>   2 files changed, 4 insertions(+)
>
> diff --git a/block.c b/block.c
> index a7a8932..067c44b 100644
> --- a/block.c
> +++ b/block.c
> @@ -1181,6 +1181,7 @@ void bdrv_set_backing_hd(BlockDriverState *bs, BlockDriverState *backing_hd)
>       if (bs->backing_hd) {
>           assert(bs->backing_blocker);
>           bdrv_op_unblock_all(bs->backing_hd, bs->backing_blocker);
> +        bs->backing_hd->origin_file = NULL;

Seems more like "backed_file" to me. Can you explain to me where "origin 
file" comes from?

Since apparently one BDS can be used as a backing file by only at most 
one other BDS, the patch seems fine to me (other than the naming issue).

Max

>       } else if (backing_hd) {
>           error_setg(&bs->backing_blocker,
>                      "device is used as backing hd of '%s'",
> @@ -1193,6 +1194,7 @@ void bdrv_set_backing_hd(BlockDriverState *bs, BlockDriverState *backing_hd)
>           bs->backing_blocker = NULL;
>           goto out;
>       }
> +    backing_hd->origin_file = bs;
>       bs->open_flags &= ~BDRV_O_NO_BACKING;
>       pstrcpy(bs->backing_file, sizeof(bs->backing_file), backing_hd->filename);
>       pstrcpy(bs->backing_format, sizeof(bs->backing_format),
> diff --git a/include/block/block_int.h b/include/block/block_int.h
> index 603f704..9be13a8 100644
> --- a/include/block/block_int.h
> +++ b/include/block/block_int.h
> @@ -360,6 +360,8 @@ struct BlockDriverState {
>       char exact_filename[PATH_MAX];
>   
>       BlockDriverState *backing_hd;
> +    /* used by backing image */
> +    BlockDriverState *origin_file;
>       BlockDriverState *file;
>   
>       NotifierList close_notifiers;
diff mbox

Patch

diff --git a/block.c b/block.c
index a7a8932..067c44b 100644
--- a/block.c
+++ b/block.c
@@ -1181,6 +1181,7 @@  void bdrv_set_backing_hd(BlockDriverState *bs, BlockDriverState *backing_hd)
     if (bs->backing_hd) {
         assert(bs->backing_blocker);
         bdrv_op_unblock_all(bs->backing_hd, bs->backing_blocker);
+        bs->backing_hd->origin_file = NULL;
     } else if (backing_hd) {
         error_setg(&bs->backing_blocker,
                    "device is used as backing hd of '%s'",
@@ -1193,6 +1194,7 @@  void bdrv_set_backing_hd(BlockDriverState *bs, BlockDriverState *backing_hd)
         bs->backing_blocker = NULL;
         goto out;
     }
+    backing_hd->origin_file = bs;
     bs->open_flags &= ~BDRV_O_NO_BACKING;
     pstrcpy(bs->backing_file, sizeof(bs->backing_file), backing_hd->filename);
     pstrcpy(bs->backing_format, sizeof(bs->backing_format),
diff --git a/include/block/block_int.h b/include/block/block_int.h
index 603f704..9be13a8 100644
--- a/include/block/block_int.h
+++ b/include/block/block_int.h
@@ -360,6 +360,8 @@  struct BlockDriverState {
     char exact_filename[PATH_MAX];
 
     BlockDriverState *backing_hd;
+    /* used by backing image */
+    BlockDriverState *origin_file;
     BlockDriverState *file;
 
     NotifierList close_notifiers;