migration: restrict scope of incoming fd read handler
authorStefan Hajnoczi <stefanha@redhat.com>
Mon, 11 Feb 2013 16:01:45 +0000 (17:01 +0100)
committerAnthony Liguori <aliguori@us.ibm.com>
Mon, 11 Feb 2013 19:22:52 +0000 (13:22 -0600)
commitd7cd369402191814a1bb339a730f3af411e9682f
tree7d073bdab810935815661826e533b49f346f865d
parentd0bce760e04b1658a3b4ac95be2839ae20fd86db
migration: restrict scope of incoming fd read handler

The incoming migration is processed in a coroutine and uses an fd read
handler to enter the yielded coroutine when data becomes available.

The read handler was set too broadly, so that spurious coroutine entries
were be triggered if other coroutine users yielded (like the block
layer's bdrv_write() function).

Install the fd read only only when yielding for more data to become
available.  This prevents spurious coroutine entries which break code
that assumes only a specific set of places can re-enter the coroutine.

This patch fixes crashes in block/raw-posix.c that are triggered with
"migrate -b" when qiov becomes a dangling pointer due to a spurious
coroutine entry that frees qiov early.

Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Message-id: 1360598505-5512-1-git-send-email-stefanha@redhat.com
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
migration.c
savevm.c