On 09/14/2012 11:23 AM, Eric Blake wrote: > On 09/14/2012 07:41 AM, Jeff Cody wrote: >> Add bdrv_find_overlay(), and bdrv_drop_intermediate(). >> >> bdrv_find_overlay(): given 'bs' and the active (topmost) BDS of an image >> chain, >> find the image that is the immediate top of 'bs' >> >> bdrv_drop_intermediate(): >> Given 3 BDS (active, top, base), delete images above > > s/delete/drop/ >
Thanks >> base up to and including top, and set base to be the >> parent of top's child node. > > set base to be the backing file of top's overlay node. > Thanks >> >> E.g., this converts: >> >> bottom <- base <- intermediate <- top <- active >> >> to >> >> bottom <- base <- active >> >> +++ b/block.c >> @@ -1713,6 +1713,156 @@ int bdrv_change_backing_file(BlockDriverState *bs, >> return ret; >> } >> >> +/* >> + * Finds the image layer immediately to the 'top' of bs. > > Or even: > > Finds the image layer in the chain that has 'bs' as its backing file. > Thanks - I prefer your wording, that is clearer. >> +/* >> + * Deletes images above 'base' up to and including 'top', and sets the image > > s/Deletes/Drops/ > >> +++ b/block.h >> @@ -209,7 +209,10 @@ int bdrv_commit_all(void); >> int bdrv_change_backing_file(BlockDriverState *bs, >> const char *backing_file, const char *backing_fmt); >> void bdrv_register(BlockDriver *bdrv); >> - >> +int bdrv_drop_intermediate(BlockDriverState *active, BlockDriverState *top, >> + BlockDriverState *base); >> +BlockDriverState *bdrv_find_overlay(BlockDriverState *active, >> + BlockDriverState *bs); >> >> typedef struct BdrvCheckResult { > > Changed from two blank lines to one before the typedef; was that > intentional? > Nope, it was unintentional - thanks