qemu/tests/unit
Kevin Wolf 57e05be343 block: Call drain callbacks only once
We only need to call both the BlockDriver's callback and the parent
callbacks when going from undrained to drained or vice versa. A second
drain section doesn't make a difference for the driver or the parent,
they weren't supposed to send new requests before and after the second
drain.

One thing that gets in the way is the 'ignore_bds_parents' parameter in
bdrv_do_drained_begin_quiesce() and bdrv_do_drained_end(): It means that
bdrv_drain_all_begin() increases bs->quiesce_counter, but does not
quiesce the parent through BdrvChildClass callbacks. If an additional
drain section is started now, bs->quiesce_counter will be non-zero, but
we would still need to quiesce the parent through BdrvChildClass in
order to keep things consistent (and unquiesce it on the matching
bdrv_drained_end(), even though the counter would not reach 0 yet as
long as the bdrv_drain_all() section is still active).

Instead of keeping track of this, let's just get rid of the parameter.
It was introduced in commit 6cd5c9d7b2 as an optimisation so that
during bdrv_drain_all(), we wouldn't recursively drain all parents up to
the root for each node, resulting in quadratic complexity. As it happens,
calling the callbacks only once solves the same problem, so as of this
patch, we'll still have O(n) complexity and ignore_bds_parents is not
needed any more.

This patch only ignores the 'ignore_bds_parents' parameter. It will be
removed in a separate patch.

Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Reviewed-by: Hanna Reitz <hreitz@redhat.com>
Message-Id: <20221118174110.55183-12-kwolf@redhat.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
2022-12-15 16:07:42 +01:00
..
check-block-qdict.c tests: unit: add NULL-pointer check 2022-09-18 09:17:41 +02:00
check-qdict.c
check-qjson.c Remove qemu-common.h include from most units 2022-04-06 14:31:55 +02:00
check-qlist.c
check-qlit.c
check-qnull.c Remove qemu-common.h include from most units 2022-04-06 14:31:55 +02:00
check-qnum.c Remove qemu-common.h include from most units 2022-04-06 14:31:55 +02:00
check-qobject.c tests: remove block/qdict checks from check-qobject.c 2022-04-21 17:03:51 +04:00
check-qom-interface.c
check-qom-proplist.c include: add qemu/keyval.h 2022-04-21 17:03:51 +04:00
check-qstring.c Remove qemu-common.h include from most units 2022-04-06 14:31:55 +02:00
crypto-tls-psk-helpers.c tests: avoid DOS line endings in PSK file 2022-10-27 11:55:41 +01:00
crypto-tls-psk-helpers.h tests: add migration tests of TLS with PSK credentials 2022-05-16 11:46:04 +01:00
crypto-tls-x509-helpers.c tests: fix encoding of IP addresses in x509 certs 2022-05-16 11:46:04 +01:00
crypto-tls-x509-helpers.h tests: add more helper macros for creating TLS x509 certs 2022-05-16 11:46:04 +01:00
io-channel-helpers.c tests/channel-helper: set blocking in main thread 2022-10-12 19:22:01 +04:00
io-channel-helpers.h
iothread.c async: the main AioContext is only "current" if under the BQL 2021-06-18 10:59:52 -05:00
iothread.h
meson.build io: add a QIOChannelNull equivalent to /dev/null 2022-06-22 18:11:21 +01:00
pkix_asn1_tab.c tests: remove QCRYPTO_HAVE_TLS_TEST_SUPPORT 2021-06-25 10:53:46 +02:00
ptimer-test-stubs.c misc: Remove unnecessary "sysemu/cpu-timers.h" include 2022-03-06 13:15:42 +01:00
ptimer-test.c tests/unit: Replace g_memdup() by g_memdup2() 2022-07-18 20:24:36 +02:00
ptimer-test.h
rcutorture.c rcu: use coroutine TLS macros 2022-03-04 18:14:40 +01:00
socket-helpers.c tests/unit: Update test-io-channel-socket.c for Windows 2022-09-02 15:54:47 +04:00
socket-helpers.h tests/unit: Update test-io-channel-socket.c for Windows 2022-09-02 15:54:47 +04:00
test-aio-multithread.c
test-aio.c aio-posix: split poll check from ready handler 2022-01-12 17:09:39 +00:00
test-authz-list.c
test-authz-listfile.c
test-authz-pam.c
test-authz-simple.c
test-base64.c
test-bdrv-drain.c block: Call drain callbacks only once 2022-12-15 16:07:42 +01:00
test-bdrv-graph-mod.c test-bdrv-graph-mod: fix filters to be filters 2022-10-27 20:14:11 +02:00
test-bitcnt.c
test-bitmap.c
test-bitops.c
test-block-backend.c
test-block-iothread.c block: remove bdrv_try_set_aio_context and replace it with bdrv_try_change_aio_context 2022-10-27 20:14:11 +02:00
test-blockjob-txn.c jobs: use job locks also in the unit tests 2022-10-07 12:11:41 +02:00
test-blockjob.c job: remove unused functions 2022-10-07 12:11:41 +02:00
test-bufferiszero.c
test-char.c qapi chardev: Elide redundant has_FOO in generated C 2022-12-14 20:04:47 +01:00
test-clone-visitor.c Remove qemu-common.h include from most units 2022-04-06 14:31:55 +02:00
test-coroutine.c test-coroutine: add missing coroutine_fn annotations 2022-10-07 12:11:41 +02:00
test-crypto-afsplit.c
test-crypto-akcipher.c tests/crypto: Add test suite for RSA keys 2022-05-26 11:41:56 +01:00
test-crypto-block.c qapi crypto: Elide redundant has_FOO in generated C 2022-12-14 20:04:47 +01:00
test-crypto-cipher.c crypto: replace 'des-rfb' cipher with 'des' 2021-07-14 14:15:52 +01:00
test-crypto-der.c crypto: Support DER encodings 2022-11-02 06:56:32 -04:00
test-crypto-hash.c crypto: use &error_fatal in crypto tests 2021-07-14 14:15:52 +01:00
test-crypto-hmac.c crypto: use &error_fatal in crypto tests 2021-07-14 14:15:52 +01:00
test-crypto-ivgen.c crypto: skip essiv ivgen tests if AES+ECB isn't available 2021-07-14 14:15:52 +01:00
test-crypto-pbkdf.c crypto: remove obsolete crypto test condition 2021-07-14 14:15:52 +01:00
test-crypto-secret.c
test-crypto-tlscredsx509.c tests: Use g_mkdir_with_parents() 2022-08-25 15:24:09 +02:00
test-crypto-tlssession.c tests: Use g_mkdir_with_parents() 2022-08-25 15:24:09 +02:00
test-crypto-xts.c
test-cutils.c tests: fix test-cutils leaks 2022-07-04 13:42:08 +02:00
test-div128.c host-utils: add unit tests for divu128/divs128 2021-10-27 17:10:00 -07:00
test-fdmon-epoll.c aio-posix: split poll check from ready handler 2022-01-12 17:09:39 +00:00
test-forward-visitor.c include: add qemu/keyval.h 2022-04-21 17:03:51 +04:00
test-hbitmap.c Use g_new() & friends where that makes obvious sense 2022-03-21 15:44:44 +01:00
test-image-locking.c tests/unit/test-image-locking: Fix handling of temporary files 2022-10-12 12:48:53 +02:00
test-int128.c qemu/int128: add int128_urshift 2022-04-20 18:00:30 -03:00
test-io-channel-buffer.c
test-io-channel-command.c tests/unit: simpler variable sequence for test-io-channel 2022-11-05 20:35:45 +01:00
test-io-channel-file.c tests: replace pipe() with g_unix_open_pipe(CLOEXEC) 2022-05-03 15:46:08 +04:00
test-io-channel-null.c io: add a QIOChannelNull equivalent to /dev/null 2022-06-22 18:11:21 +01:00
test-io-channel-socket.c tests/unit: Update test-io-channel-socket.c for Windows 2022-09-02 15:54:47 +04:00
test-io-channel-tls.c tests: Use g_mkdir_with_parents() 2022-08-25 15:24:09 +02:00
test-io-task.c
test-iov.c tests/unit: Replace g_memdup() by g_memdup2() 2022-07-18 20:24:36 +02:00
test-keyval.c include: add qemu/keyval.h 2022-04-21 17:03:51 +04:00
test-logging.c util/log: Remove qemu_log_close 2022-04-20 10:51:11 -07:00
test-mul64.c
test-opts-visitor.c
test-qapi-util.c
test-qdev-global-props.c
test-qdist.c
test-qemu-opts.c qemu-option: remove now-dead code 2021-07-06 08:33:51 +02:00
test-qga.c tests/unit: test-qga: Avoid using hardcoded /tmp 2022-09-27 20:51:20 +02:00
test-qgraph.c tests: Remove uses of deprecated raspi2/raspi3 machine names 2021-09-01 11:08:15 +01:00
test-qht.c
test-qmp-cmds.c qapi tests: Elide redundant has_FOO in generated C 2022-12-13 18:31:37 +01:00
test-qmp-event.c qapi tests: Elide redundant has_FOO in generated C 2022-12-13 18:31:37 +01:00
test-qobject-input-visitor.c qapi tests: Elide redundant has_FOO in generated C 2022-12-13 18:31:37 +01:00
test-qobject-output-visitor.c qapi tests: Elide redundant has_FOO in generated C 2022-12-13 18:31:37 +01:00
test-rcu-list.c rcu: use coroutine TLS macros 2022-03-04 18:14:40 +01:00
test-rcu-simpleq.c
test-rcu-slist.c
test-rcu-tailq.c
test-replication.c replication: move include out of root directory 2021-05-26 14:49:46 +02:00
test-seccomp.c seccomp: fix blocking of process spawning 2022-02-16 18:52:40 +00:00
test-shift128.c
test-smp-parse.c tests/unit/test-smp-parse: Keep default MIN/MAX CPUs in machine_base_class_init 2021-12-31 13:42:48 +01:00
test-string-input-visitor.c Remove qemu-common.h include from most units 2022-04-06 14:31:55 +02:00
test-string-output-visitor.c Remove qemu-common.h include from most units 2022-04-06 14:31:55 +02:00
test-thread-pool.c Remove qemu-common.h include from most units 2022-04-06 14:31:55 +02:00
test-throttle.c
test-timed-average.c
test-util-filemonitor.c
test-util-sockets.c Remove qemu-common.h include from most units 2022-04-06 14:31:55 +02:00
test-uuid.c
test-visitor-serialization.c qapi tests: Elide redundant has_FOO in generated C 2022-12-13 18:31:37 +01:00
test-vmstate.c tests/unit/test-vmstate: Avoid dynamic stack allocation 2022-09-22 16:38:28 +01:00
test-write-threshold.c write-threshold: deal with includes 2021-05-14 16:14:10 +02:00
test-x86-cpuid.c
test-xbzrle.c Remove qemu-common.h include from most units 2022-04-06 14:31:55 +02:00
test-yank.c qapi: Convert simple union SocketAddressLegacy to flat one 2021-09-27 08:23:25 +02:00