On Mon, Oct 30, 2023 at 04:38:53PM +0900, Naohiro Aota wrote: > raw_co_zone_append() sets "s->offset" where "BDRVRawState *s". This pointer > is used later at raw_co_prw() to save the block address where the data is > written. > > When multiple IOs are on-going at the same time, a later IO's > raw_co_zone_append() call over-writes a former IO's offset address before > raw_co_prw() completes. As a result, the former zone append IO returns the > initial value (= the start address of the writing zone), instead of the > proper address. > > Fix the issue by passing the offset pointer to raw_co_prw() instead of > passing it through s->offset. Also, remove "offset" from BDRVRawState as > there is no usage anymore. > > Fixes: 4751d09adcc3 ("block: introduce zone append write for zoned devices") > Signed-off-by: Naohiro Aota <naohiro.a...@wdc.com> > --- > block/file-posix.c | 16 +++++++--------- > 1 file changed, 7 insertions(+), 9 deletions(-)
Reviewed-by: Stefan Hajnoczi <stefa...@redhat.com>
signature.asc
Description: PGP signature