On 07/11/2017 04:02, Eric Blake wrote: > We forbid operations like a zero-length write zero or a discard > at the protocol layer when it is marked read-only, but those > same operations were succeeding at the format layer because the > raw format was not reflecting the underlying read-only status > to the block layer, which then took short circuit paths on > zero-length operations. > > Signed-off-by: Eric Blake <ebl...@redhat.com> > --- > block/raw-format.c | 6 ++++++ > 1 file changed, 6 insertions(+) > > diff --git a/block/raw-format.c b/block/raw-format.c > index 830243a8e4..717b8eff65 100644 > --- a/block/raw-format.c > +++ b/block/raw-format.c > @@ -418,6 +418,12 @@ static int raw_open(BlockDriverState *bs, QDict > *options, int flags, > bs->file->bs->supported_write_flags; > bs->supported_zero_flags = (BDRV_REQ_FUA | BDRV_REQ_MAY_UNMAP) & > bs->file->bs->supported_zero_flags; > + if (bdrv_is_read_only(bs->file->bs)) { > + ret = bdrv_set_read_only(bs, true, errp); > + if (ret < 0) { > + return ret; > + } > + } > > if (bs->probed && !bdrv_is_read_only(bs)) { > fprintf(stderr, >
Kevin, perhaps this should be done straight in block.c? Thanks, Paolo