This is the reference usage how we propagate connection state to upper tier.
Cc: Eric Blake <ebl...@redhat.com> Cc: Benoit Canet <ben...@irqsave.net> Cc: Kevin Wolf <kw...@redhat.com> Cc: Stefan Hajnoczi <stefa...@redhat.com> Signed-off-by: Liu Yuan <namei.u...@gmail.com> --- block/sheepdog.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/block/sheepdog.c b/block/sheepdog.c index 53c24d6..9c0fc49 100644 --- a/block/sheepdog.c +++ b/block/sheepdog.c @@ -714,6 +714,11 @@ static coroutine_fn void reconnect_to_sdog(void *opaque) { BDRVSheepdogState *s = opaque; AIOReq *aio_req, *next; + BlockDriverState *bs = s->bs; + + if (bs->drv_ops && bs->drv_ops->driver_disconnect) { + bs->drv_ops->driver_disconnect(bs); + } aio_set_fd_handler(s->aio_context, s->fd, NULL, NULL, NULL); close(s->fd); @@ -756,6 +761,10 @@ static coroutine_fn void reconnect_to_sdog(void *opaque) QLIST_INSERT_HEAD(&s->inflight_aio_head, aio_req, aio_siblings); resend_aioreq(s, aio_req); } + + if (bs->drv_ops && bs->drv_ops->driver_reconnect) { + bs->drv_ops->driver_reconnect(bs); + } } /* -- 1.9.1