Message ID | 20201118180433.11931-2-vsementsov@virtuozzo.com |
---|---|
State | New |
Headers | show |
Series | mirror: cancel nbd reconnect | expand |
On 11/18/20 12:04 PM, Vladimir Sementsov-Ogievskiy wrote: > It will be used to stop retrying NBD requests on mirror cancel. > > Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> > --- > include/block/block.h | 3 +++ > include/block/block_int.h | 9 +++++++++ > block/io.c | 11 +++++++++++ > 3 files changed, 23 insertions(+) > How does this relate to the recent addition of the QMP yank command? > +++ b/include/block/block_int.h > @@ -344,6 +344,15 @@ struct BlockDriver { > bool want_zero, int64_t offset, int64_t bytes, int64_t *pnum, > int64_t *map, BlockDriverState **file); > > + /* > + * This informs the driver that we are not more interested in in-flight that we are no longer interested in the result of in-flight requests, so > + * requests results, so don't waste the time if possible. > + * > + * The example usage is to not wait for nbd target nodedreconnect timeout on > + * job-cancel. One example usage is to avoid waiting for an nbd target node reconnect timeout during job-cancel. Reviewed-by: Eric Blake <eblake@redhat.com>
21.01.2021 01:27, Eric Blake wrote: > On 11/18/20 12:04 PM, Vladimir Sementsov-Ogievskiy wrote: >> It will be used to stop retrying NBD requests on mirror cancel. >> >> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> >> --- >> include/block/block.h | 3 +++ >> include/block/block_int.h | 9 +++++++++ >> block/io.c | 11 +++++++++++ >> 3 files changed, 23 insertions(+) >> > > How does this relate to the recent addition of the QMP yank command? Hmm. Don't know.. Looking in spec: # Currently implemented yank instances: # - nbd block device: # Yanking it will shut down the connection to the nbd server without # attempting to reconnect. Looks like a close thing. But actually, I don't want to stop reconnecting process, but only cancel some requests which we don't want to wait for. After that, the nbd node may successfully reconnect and continue to work. > > >> +++ b/include/block/block_int.h >> @@ -344,6 +344,15 @@ struct BlockDriver { >> bool want_zero, int64_t offset, int64_t bytes, int64_t *pnum, >> int64_t *map, BlockDriverState **file); >> >> + /* >> + * This informs the driver that we are not more interested in in-flight > > that we are no longer interested in the result of in-flight requests, so > >> + * requests results, so don't waste the time if possible. >> + * >> + * The example usage is to not wait for nbd target nodedreconnect timeout on >> + * job-cancel. > > One example usage is to avoid waiting for an nbd target node reconnect > timeout during job-cancel. > > Reviewed-by: Eric Blake <eblake@redhat.com> >
diff --git a/include/block/block.h b/include/block/block.h index c9d7c58765..3990ee3677 100644 --- a/include/block/block.h +++ b/include/block/block.h @@ -836,4 +836,7 @@ int coroutine_fn bdrv_co_copy_range(BdrvChild *src, uint64_t src_offset, BdrvChild *dst, uint64_t dst_offset, uint64_t bytes, BdrvRequestFlags read_flags, BdrvRequestFlags write_flags); + +void bdrv_cancel_in_flight(BlockDriverState *bs); + #endif diff --git a/include/block/block_int.h b/include/block/block_int.h index 95d9333be1..07a87ce5e7 100644 --- a/include/block/block_int.h +++ b/include/block/block_int.h @@ -344,6 +344,15 @@ struct BlockDriver { bool want_zero, int64_t offset, int64_t bytes, int64_t *pnum, int64_t *map, BlockDriverState **file); + /* + * This informs the driver that we are not more interested in in-flight + * requests results, so don't waste the time if possible. + * + * The example usage is to not wait for nbd target nodedreconnect timeout on + * job-cancel. + */ + void (*bdrv_cancel_in_flight)(BlockDriverState *bs); + /* * Invalidate any cached meta-data. */ diff --git a/block/io.c b/block/io.c index ec5e152bb7..5dcb6433f9 100644 --- a/block/io.c +++ b/block/io.c @@ -3288,3 +3288,14 @@ out: return ret; } + +void bdrv_cancel_in_flight(BlockDriverState *bs) +{ + if (!bs || !bs->drv) { + return; + } + + if (bs->drv->bdrv_cancel_in_flight) { + bs->drv->bdrv_cancel_in_flight(bs); + } +}
It will be used to stop retrying NBD requests on mirror cancel. Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> --- include/block/block.h | 3 +++ include/block/block_int.h | 9 +++++++++ block/io.c | 11 +++++++++++ 3 files changed, 23 insertions(+)