sheepdog: fix co_recv coroutine context
The co_recv coroutine has two things that will try to enter it:
1. The select(2) read callback on the sheepdog socket.
2. The aio_add_request() blocking operations, including a coroutine
mutex.
This patch fixes it by setting NULL to co_recv before sending data.
In future, we should make the sheepdog driver fully coroutine-based
and simplify request handling.
Signed-off-by: MORITA Kazutaka <morita.kazutaka@lab.ntt.co.jp>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
c9b308d20b
commit
6d1acda8f1
@ -629,6 +629,9 @@ static void coroutine_fn aio_read_response(void *opaque)
|
||||
|
||||
switch (acb->aiocb_type) {
|
||||
case AIOCB_WRITE_UDATA:
|
||||
/* this coroutine context is no longer suitable for co_recv
|
||||
* because we may send data to update vdi objects */
|
||||
s->co_recv = NULL;
|
||||
if (!is_data_obj(aio_req->oid)) {
|
||||
break;
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user