On Fri 20 Mar 2020 08:35:44 PM CET, Eric Blake <ebl...@redhat.com> wrote: >> This flag is however only supported when qcow_version >= 3. In older >> images the cluster is simply deallocated, exposing any possible >> previous data from the backing file. > > Discard is advisory, and has no requirements that discarded data read > back as zero. However, if write zeroes uses discard under the hood, > then THAT usage must guarantee reading back as zero.
write_zeroes doesn't seem to use discard in any case, so no problem there. >> @@ -3763,6 +3763,10 @@ static coroutine_fn int >> qcow2_co_pdiscard(BlockDriverState *bs, >> int ret; >> BDRVQcow2State *s = bs->opaque; >> >> + if (s->qcow_version < 3) { >> + return -ENOTSUP; >> + } >> + > > This changes it so you no longer see stale data, but doesn't change > the fact that you don't read zeroes (just that your stale data is now > from the current layer instead of the backing layer, since we did > nothing at all). discard can already fail if the request is not aligned, in this case you get -ENOTSUP and stay with the same data as before. What's different in this case is that you can actually get stale data, that doesn't seem like a desirable outcome. Berto