diff options
author | Stefan Hajnoczi <stefanha@redhat.com> | 2020-02-14 17:17:11 +0000 |
---|---|---|
committer | Stefan Hajnoczi <stefanha@redhat.com> | 2020-02-22 08:26:47 +0000 |
commit | 4749079ce033a94784cbe20a661abeac598ff057 (patch) | |
tree | 048fc56ddd9de5bb9fd76bdc7ecb261492495213 /include/block | |
parent | 195ed8cb365edeb0d0a70a2ffdeb7a073f9a8117 (diff) | |
download | qemu-4749079ce033a94784cbe20a661abeac598ff057.zip qemu-4749079ce033a94784cbe20a661abeac598ff057.tar.gz qemu-4749079ce033a94784cbe20a661abeac598ff057.tar.bz2 |
aio-posix: make AioHandler deletion O(1)
It is not necessary to scan all AioHandlers for deletion. Keep a list
of deleted handlers instead of scanning the full list of all handlers.
The AioHandler->deleted field can be dropped. Let's check if the
handler has been inserted into the deleted list instead. Add a new
QLIST_IS_INSERTED() API for this check.
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Sergio Lopez <slp@redhat.com>
Message-id: 20200214171712.541358-5-stefanha@redhat.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Diffstat (limited to 'include/block')
-rw-r--r-- | include/block/aio.h | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/include/block/aio.h b/include/block/aio.h index 1a2ce9c..9dd61ce 100644 --- a/include/block/aio.h +++ b/include/block/aio.h @@ -42,6 +42,7 @@ void qemu_aio_unref(void *p); void qemu_aio_ref(void *p); typedef struct AioHandler AioHandler; +typedef QLIST_HEAD(, AioHandler) AioHandlerList; typedef void QEMUBHFunc(void *opaque); typedef bool AioPollFn(void *opaque); typedef void IOHandler(void *opaque); @@ -71,7 +72,10 @@ struct AioContext { QemuRecMutex lock; /* The list of registered AIO handlers. Protected by ctx->list_lock. */ - QLIST_HEAD(, AioHandler) aio_handlers; + AioHandlerList aio_handlers; + + /* The list of AIO handlers to be deleted. Protected by ctx->list_lock. */ + AioHandlerList deleted_aio_handlers; /* Used to avoid unnecessary event_notifier_set calls in aio_notify; * accessed with atomic primitives. If this field is 0, everything |