On 12/29/25 6:07 PM, Denis V. Lunev wrote: > The patch creates helper to advance flush generation. > > Right now there is the only place which handles bs->write_gen, but this > is going to be changed in the next patches. Unfortunately we need to > precisely control the moment of flush() when BDRV_REQ_FUA is passed > as a request flag. Generic processing inside bdrv_co_write_req_finish() > is too late. > > Signed-off-by: Denis V. Lunev <[email protected]> > CC: Andrey Drobyshev <[email protected]> > CC: Kevin Wolf <[email protected]> > CC: Hanna Reitz <[email protected]> > --- > block/io.c | 2 +- > include/block/block_int-common.h | 5 +++++ > 2 files changed, 6 insertions(+), 1 deletion(-) > > diff --git a/block/io.c b/block/io.c > index d37da2e0ac5..f39ff862c11 100644 > --- a/block/io.c > +++ b/block/io.c > @@ -2147,7 +2147,7 @@ bdrv_co_write_req_finish(BdrvChild *child, int64_t > offset, int64_t bytes, > > bdrv_check_request(offset, bytes, &error_abort); > > - qatomic_inc(&bs->write_gen); > + bdrv_advance_flush_gen(bs); > > /* > * Discard cannot extend the image, but in error handling cases, such as > diff --git a/include/block/block_int-common.h > b/include/block/block_int-common.h > index 80c54a6d09f..67552463dbe 100644 > --- a/include/block/block_int-common.h > +++ b/include/block/block_int-common.h > @@ -1373,6 +1373,11 @@ int bdrv_check_qiov_request(int64_t offset, int64_t > bytes, > QEMUIOVector *qiov, size_t qiov_offset, > Error **errp); > > +static inline void bdrv_advance_flush_gen(BlockDriverState *bs) > +{ > + qatomic_inc(&bs->write_gen); > +} > +
The name is misleading. In bdrv_co_flush() we're comparing bs->flushed_gen with bs->write_gen. Here we're incrementing bs->write_gen. Did you mean bdrv_advance_write_gen() maybe? > bool cbw_filter_present(void); > Minor issue: patch doesn't apply cleanly because of the declaration above. Probably was committed on a downstream branch? > #ifdef _WIN32
