linux-aio: properly bubble up errors from initialization
laio_init() can fail for a couple of reasons, which will lead to a NULL pointer dereference in laio_attach_aio_context(). To solve this, add a aio_setup_linux_aio() function which is called early in raw_open_common. If this fails, propagate the error up. The signature of aio_get_linux_aio() was not modified, because it seems preferable to return the actual errno from the possible failing initialization calls. Additionally, when the AioContext changes, we need to associate a LinuxAioState with the new AioContext. Use the bdrv_attach_aio_context callback and call the new aio_setup_linux_aio(), which will allocate a new AioContext if needed, and return errors on failures. If it fails for any reason, fallback to threaded AIO with an error message, as the device is already in-use by the guest. Add an assert that aio_get_linux_aio() cannot return NULL. Signed-off-by:Nishanth Aravamudan <naravamudan@digitalocean.com> Message-id: 20180622193700.6523-1-naravamudan@digitalocean.com Signed-off-by:
Stefan Hajnoczi <stefanha@redhat.com>
Showing
- block/file-posix.c 28 additions, 5 deletionsblock/file-posix.c
- block/linux-aio.c 9 additions, 3 deletionsblock/linux-aio.c
- include/block/aio.h 3 additions, 0 deletionsinclude/block/aio.h
- include/block/raw-aio.h 1 addition, 1 deletioninclude/block/raw-aio.h
- stubs/linux-aio.c 1 addition, 1 deletionstubs/linux-aio.c
- util/async.c 11 additions, 3 deletionsutil/async.c
Please register or sign in to comment