On Wed, 2019-09-18 at 11:51 +0200, Max Reitz wrote: > Make the filter truncation (passing it through to bs->file) a > first-class citizen and handle it exactly as if it was the filter > driver's native implementation of .bdrv_co_truncate(). > > I do not see a reason not to, it makes the code a bit shorter, and may > be even more correct because this gets us to finish the write_req that > we prepared before (may be important to e.g. bring dirty bitmaps to the > correct size). > > Signed-off-by: Max Reitz <mre...@redhat.com> > --- > block/io.c | 13 ++++++------- > 1 file changed, 6 insertions(+), 7 deletions(-) > > diff --git a/block/io.c b/block/io.c > index f8c3596131..723655c792 100644 > --- a/block/io.c > +++ b/block/io.c > @@ -3299,20 +3299,19 @@ int coroutine_fn bdrv_co_truncate(BdrvChild *child, > int64_t offset, > goto out; > } > > - if (!drv->bdrv_co_truncate) { > - if (bs->file && drv->is_filter) { > - ret = bdrv_co_truncate(bs->file, offset, prealloc, errp); > - goto out; > - } > + if (drv->bdrv_co_truncate) { > + ret = drv->bdrv_co_truncate(bs, offset, prealloc, errp); > + } else if (bs->file && drv->is_filter) { > + ret = bdrv_co_truncate(bs->file, offset, prealloc, errp); > + } else { > error_setg(errp, "Image format driver does not support resize"); > ret = -ENOTSUP; > goto out; > } > - > - ret = drv->bdrv_co_truncate(bs, offset, prealloc, errp); > if (ret < 0) { > goto out; > } > + > I would say that those are unrelated whitespace changes, but I myself don't mind this :-)
> ret = refresh_total_sectors(bs, offset >> BDRV_SECTOR_BITS); > if (ret < 0) { > error_setg_errno(errp, -ret, "Could not refresh total sector count"); Looks all right to me, although I don't know the block filters well yet. Reviewed-by: Maxim Levitsky <mlevi...@redhat.com> Best regards, Maxim Levitsky