this patch fixs the problem of qemu process become crashed when the sheepdog gateway break the IO for a few seconds and then recover.
problem reproduce: 1.start a fio process in qemu to produce IOs to sheepdog gateway, whatever IO type you like. 2.kill the sheepdog gateway. 3.wait for a few seconds. 4.restart the sheepdog gateway. 5.qemu process crashed with segfault error 6. problem cause: the last io coroutine will be destroyed after reconnect to sheepdog gateway, but the coroutine still be scheduled and the s->co_recv is still the last io coroutine pointer which had been destroyed, so when this coroutine go to coroutine context switch, it will make qemu process crashed. problem fix: just make s->co_recv = NULL when the last io coroutine reconnect to sheepdog gateway. Signed-off-by: mingwei <gongwill...@163.com> --- block/sheepdog.c | 1 + 1 file changed, 1 insertion(+) diff --git a/block/sheepdog.c b/block/sheepdog.c index 2f5c0eb376..3a00f0c1e1 100644 --- a/block/sheepdog.c +++ b/block/sheepdog.c @@ -727,6 +727,7 @@ static coroutine_fn void reconnect_to_sdog(void *opaque) NULL, NULL, NULL); close(s->fd); s->fd = -1; + s->co_recv = NULL; /* Wait for outstanding write requests to be completed. */ while (s->co_send != NULL) { -- 2.25.1