Message ID | 1423710438-14377-11-git-send-email-wency@cn.fujitsu.com |
---|---|
State | New |
Headers | show |
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 --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;