qemu-img create results in tsan warnings Description of problem: Running qemu-img w/ tsan enabled results in a bunch of data races reported: ``` Formatting 'delta.img', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=0 backing_file=base.img backing_fmt=raw lazy_refcounts=off refcount_bits=16 ================== WARNING: ThreadSanitizer: data race (pid=217825) Atomic write of size 8 at 0x7b4800000228 by main thread: #0 __tsan_atomic64_exchange (qemu-img+0xb6a55) #1 aio_bh_poll /usr/local/google/home/pefoley/qemu/build/../util/async.c:151:5 (qemu-img+0x239931) #2 aio_poll /usr/local/google/home/pefoley/qemu/build/../util/aio-posix.c:707:17 (qemu-img+0x220822) #3 bdrv_create /usr/local/google/home/pefoley/qemu/build/../block.c:549:13 (qemu-img+0xf88b1) #4 bdrv_img_create /usr/local/google/home/pefoley/qemu/build/../block.c:6911:11 (qemu-img+0x107c1b) #5 img_create /usr/local/google/home/pefoley/qemu/build/../qemu-img.c:585:5 (qemu-img+0xe2dad) #6 main /usr/local/google/home/pefoley/qemu/build/../qemu-img.c:5449:20 (qemu-img+0xddfc3) Previous read of size 8 at 0x7b4800000228 by thread T5 (mutexes: write M42): #0 aio_bh_enqueue /usr/local/google/home/pefoley/qemu/build/../util/async.c:82:9 (qemu-img+0x239c4c) #1 qemu_bh_schedule /usr/local/google/home/pefoley/qemu/build/../util/async.c:186:5 (qemu-img+0x239c4c) #2 worker_thread /usr/local/google/home/pefoley/qemu/build/../util/thread-pool.c:113:9 (qemu-img+0x24fe7c) #3 qemu_thread_start /usr/local/google/home/pefoley/qemu/build/../util/qemu-thread-posix.c:556:9 (qemu-img+0x225960) Location is heap block of size 336 at 0x7b4800000180 allocated by main thread: #0 calloc (qemu-img+0x68ff9) #1 g_malloc0 (libglib-2.0.so.0+0x59e70) #2 qemu_init_main_loop /usr/local/google/home/pefoley/qemu/build/../util/main-loop.c:169:24 (qemu-img+0x24bd47) #3 main /usr/local/google/home/pefoley/qemu/build/../qemu-img.c:5397:5 (qemu-img+0xddcd7) Mutex M42 (0x7b3800000010) created at: #0 pthread_mutex_init (qemu-img+0x6bc0f) #1 qemu_mutex_init /usr/local/google/home/pefoley/qemu/build/../util/qemu-thread-posix.c:57:11 (qemu-img+0x223f69) #2 thread_pool_init_one /usr/local/google/home/pefoley/qemu/build/../util/thread-pool.c:306:5 (qemu-img+0x24f24d) #3 thread_pool_new /usr/local/google/home/pefoley/qemu/build/../util/thread-pool.c:319:5 (qemu-img+0x24f24d) #4 aio_get_thread_pool /usr/local/google/home/pefoley/qemu/build/../util/async.c:390:28 (qemu-img+0x239fd4) #5 raw_thread_pool_submit /usr/local/google/home/pefoley/qemu/build/../block/file-posix.c:2045:24 (qemu-img+0x1b51f7) #6 raw_regular_truncate /usr/local/google/home/pefoley/qemu/build/../block/file-posix.c:2231:12 (qemu-img+0x1b51f7) #7 raw_co_create /usr/local/google/home/pefoley/qemu/build/../block/file-posix.c:2519:14 (qemu-img+0x1b51f7) #8 raw_co_create_opts /usr/local/google/home/pefoley/qemu/build/../block/file-posix.c:2635:12 (qemu-img+0x1b5678) #9 bdrv_create_co_entry /usr/local/google/home/pefoley/qemu/build/../block.c:516:11 (qemu-img+0xf87c5) #10 bdrv_create /usr/local/google/home/pefoley/qemu/build/../block.c:544:9 (qemu-img+0xf87c5) #11 bdrv_create_file /usr/local/google/home/pefoley/qemu/build/../block.c:734:11 (qemu-img+0xf8d3d) #12 qcow2_co_create_opts /usr/local/google/home/pefoley/qemu/build/../block/qcow2.c:3842:11 (qemu-img+0x170c63) #13 bdrv_create_co_entry /usr/local/google/home/pefoley/qemu/build/../block.c:516:11 (qemu-img+0xf8975) #14 coroutine_trampoline /usr/local/google/home/pefoley/qemu/build/../util/coroutine-ucontext.c:173:9 (qemu-img+0x23d008) #15 (libc.so.6+0x51a2f) Thread T5 'worker' (tid=217829, running) created by main thread at: #0 pthread_create (qemu-img+0x6a49d) #1 qemu_thread_create /usr/local/google/home/pefoley/qemu/build/../util/qemu-thread-posix.c:596:11 (qemu-img+0x225800) #2 do_spawn_thread /usr/local/google/home/pefoley/qemu/build/../util/thread-pool.c:134:5 (qemu-img+0x24fac3) #3 spawn_thread_bh_fn /usr/local/google/home/pefoley/qemu/build/../util/thread-pool.c:142:5 (qemu-img+0x24fac3) #4 aio_bh_call /usr/local/google/home/pefoley/qemu/build/../util/async.c:141:5 (qemu-img+0x239a96) #5 aio_bh_poll /usr/local/google/home/pefoley/qemu/build/../util/async.c:169:13 (qemu-img+0x239a96) #6 aio_poll /usr/local/google/home/pefoley/qemu/build/../util/aio-posix.c:707:17 (qemu-img+0x220822) #7 bdrv_create /usr/local/google/home/pefoley/qemu/build/../block.c:549:13 (qemu-img+0xf88b1) #8 bdrv_img_create /usr/local/google/home/pefoley/qemu/build/../block.c:6911:11 (qemu-img+0x107c1b) #9 img_create /usr/local/google/home/pefoley/qemu/build/../qemu-img.c:585:5 (qemu-img+0xe2dad) #10 main /usr/local/google/home/pefoley/qemu/build/../qemu-img.c:5449:20 (qemu-img+0xddfc3) SUMMARY: ThreadSanitizer: data race (/usr/local/google/home/pefoley/qemu/build/qemu-img+0xb6a55) in __tsan_atomic64_exchange ================== ================== WARNING: ThreadSanitizer: data race (pid=217825) Write of size 4 at 0x7b1c000005f0 by thread T5 (mutexes: write M42): #0 worker_thread /usr/local/google/home/pefoley/qemu/build/../util/thread-pool.c:101:20 (qemu-img+0x24fde3) #1 qemu_thread_start /usr/local/google/home/pefoley/qemu/build/../util/qemu-thread-posix.c:556:9 (qemu-img+0x225960) Previous read of size 4 at 0x7b1c000005f0 by main thread (mutexes: write M19): #0 thread_pool_completion_bh /usr/local/google/home/pefoley/qemu/build/../util/thread-pool.c:170:19 (qemu-img+0x24f7ae) #1 aio_bh_call /usr/local/google/home/pefoley/qemu/build/../util/async.c:141:5 (qemu-img+0x239a96) #2 aio_bh_poll /usr/local/google/home/pefoley/qemu/build/../util/async.c:169:13 (qemu-img+0x239a96) #3 aio_poll /usr/local/google/home/pefoley/qemu/build/../util/aio-posix.c:707:17 (qemu-img+0x220822) #4 bdrv_create /usr/local/google/home/pefoley/qemu/build/../block.c:549:13 (qemu-img+0xf88b1) #5 bdrv_img_create /usr/local/google/home/pefoley/qemu/build/../block.c:6911:11 (qemu-img+0x107c1b) #6 img_create /usr/local/google/home/pefoley/qemu/build/../qemu-img.c:585:5 (qemu-img+0xe2dad) #7 main /usr/local/google/home/pefoley/qemu/build/../qemu-img.c:5449:20 (qemu-img+0xddfc3) Location is heap block of size 104 at 0x7b1c000005b0 allocated by thread T4: #0 malloc (qemu-img+0x68e0d) #1 g_malloc (libglib-2.0.so.0+0x59e18) #2 thread_pool_submit_aio /usr/local/google/home/pefoley/qemu/build/../util/thread-pool.c:249:11 (qemu-img+0x24edc8) #3 thread_pool_submit_co /usr/local/google/home/pefoley/qemu/build/../util/thread-pool.c:287:5 (qemu-img+0x24f0fe) #4 raw_thread_pool_submit /usr/local/google/home/pefoley/qemu/build/../block/file-posix.c:2046:12 (qemu-img+0x1b5334) #5 raw_regular_truncate /usr/local/google/home/pefoley/qemu/build/../block/file-posix.c:2231:12 (qemu-img+0x1b5334) #6 raw_co_create /usr/local/google/home/pefoley/qemu/build/../block/file-posix.c:2562:14 (qemu-img+0x1b5334) #7 raw_co_create_opts /usr/local/google/home/pefoley/qemu/build/../block/file-posix.c:2635:12 (qemu-img+0x1b5678) #8 bdrv_create_co_entry /usr/local/google/home/pefoley/qemu/build/../block.c:516:11 (qemu-img+0xf87c5) #9 bdrv_create /usr/local/google/home/pefoley/qemu/build/../block.c:544:9 (qemu-img+0xf87c5) #10 bdrv_create_file /usr/local/google/home/pefoley/qemu/build/../block.c:734:11 (qemu-img+0xf8d3d) #11 qcow2_co_create_opts /usr/local/google/home/pefoley/qemu/build/../block/qcow2.c:3842:11 (qemu-img+0x170c63) #12 bdrv_create_co_entry /usr/local/google/home/pefoley/qemu/build/../block.c:516:11 (qemu-img+0xf8975) #13 coroutine_trampoline /usr/local/google/home/pefoley/qemu/build/../util/coroutine-ucontext.c:173:9 (qemu-img+0x23d008) #14 (libc.so.6+0x51a2f) Mutex M42 (0x7b3800000010) created at: #0 pthread_mutex_init (qemu-img+0x6bc0f) #1 qemu_mutex_init /usr/local/google/home/pefoley/qemu/build/../util/qemu-thread-posix.c:57:11 (qemu-img+0x223f69) #2 thread_pool_init_one /usr/local/google/home/pefoley/qemu/build/../util/thread-pool.c:306:5 (qemu-img+0x24f24d) #3 thread_pool_new /usr/local/google/home/pefoley/qemu/build/../util/thread-pool.c:319:5 (qemu-img+0x24f24d) #4 aio_get_thread_pool /usr/local/google/home/pefoley/qemu/build/../util/async.c:390:28 (qemu-img+0x239fd4) #5 raw_thread_pool_submit /usr/local/google/home/pefoley/qemu/build/../block/file-posix.c:2045:24 (qemu-img+0x1b51f7) #6 raw_regular_truncate /usr/local/google/home/pefoley/qemu/build/../block/file-posix.c:2231:12 (qemu-img+0x1b51f7) #7 raw_co_create /usr/local/google/home/pefoley/qemu/build/../block/file-posix.c:2519:14 (qemu-img+0x1b51f7) #8 raw_co_create_opts /usr/local/google/home/pefoley/qemu/build/../block/file-posix.c:2635:12 (qemu-img+0x1b5678) #9 bdrv_create_co_entry /usr/local/google/home/pefoley/qemu/build/../block.c:516:11 (qemu-img+0xf87c5) #10 bdrv_create /usr/local/google/home/pefoley/qemu/build/../block.c:544:9 (qemu-img+0xf87c5) #11 bdrv_create_file /usr/local/google/home/pefoley/qemu/build/../block.c:734:11 (qemu-img+0xf8d3d) #12 qcow2_co_create_opts /usr/local/google/home/pefoley/qemu/build/../block/qcow2.c:3842:11 (qemu-img+0x170c63) #13 bdrv_create_co_entry /usr/local/google/home/pefoley/qemu/build/../block.c:516:11 (qemu-img+0xf8975) #14 coroutine_trampoline /usr/local/google/home/pefoley/qemu/build/../util/coroutine-ucontext.c:173:9 (qemu-img+0x23d008) #15 (libc.so.6+0x51a2f) Mutex M19 (0x7b48000001e0) created at: #0 pthread_mutex_init (qemu-img+0x6bc0f) #1 qemu_rec_mutex_init /usr/local/google/home/pefoley/qemu/build/../util/qemu-thread-posix.c:120:11 (qemu-img+0x224625) #2 aio_context_new /usr/local/google/home/pefoley/qemu/build/../util/async.c:555:5 (qemu-img+0x23a226) #3 qemu_init_main_loop /usr/local/google/home/pefoley/qemu/build/../util/main-loop.c:169:24 (qemu-img+0x24bd47) #4 main /usr/local/google/home/pefoley/qemu/build/../qemu-img.c:5397:5 (qemu-img+0xddcd7) Thread T5 'worker' (tid=217829, running) created by main thread at: #0 pthread_create (qemu-img+0x6a49d) #1 qemu_thread_create /usr/local/google/home/pefoley/qemu/build/../util/qemu-thread-posix.c:596:11 (qemu-img+0x225800) #2 do_spawn_thread /usr/local/google/home/pefoley/qemu/build/../util/thread-pool.c:134:5 (qemu-img+0x24fac3) #3 spawn_thread_bh_fn /usr/local/google/home/pefoley/qemu/build/../util/thread-pool.c:142:5 (qemu-img+0x24fac3) #4 aio_bh_call /usr/local/google/home/pefoley/qemu/build/../util/async.c:141:5 (qemu-img+0x239a96) #5 aio_bh_poll /usr/local/google/home/pefoley/qemu/build/../util/async.c:169:13 (qemu-img+0x239a96) #6 aio_poll /usr/local/google/home/pefoley/qemu/build/../util/aio-posix.c:707:17 (qemu-img+0x220822) #7 bdrv_create /usr/local/google/home/pefoley/qemu/build/../block.c:549:13 (qemu-img+0xf88b1) #8 bdrv_img_create /usr/local/google/home/pefoley/qemu/build/../block.c:6911:11 (qemu-img+0x107c1b) #9 img_create /usr/local/google/home/pefoley/qemu/build/../qemu-img.c:585:5 (qemu-img+0xe2dad) #10 main /usr/local/google/home/pefoley/qemu/build/../qemu-img.c:5449:20 (qemu-img+0xddfc3) Thread T4 (tid=0, running) created by main thread at: #0 on_new_fiber /usr/local/google/home/pefoley/qemu/build/../util/coroutine-ucontext.c:90:25 (qemu-img+0x23cead) #1 qemu_coroutine_new /usr/local/google/home/pefoley/qemu/build/../util/coroutine-ucontext.c:219:5 (qemu-img+0x23cead) #2 qemu_coroutine_create /usr/local/google/home/pefoley/qemu/build/../util/qemu-coroutine.c:75:14 (qemu-img+0x24c7be) #3 bdrv_create /usr/local/google/home/pefoley/qemu/build/../block.c:546:14 (qemu-img+0xf8884) #4 bdrv_img_create /usr/local/google/home/pefoley/qemu/build/../block.c:6911:11 (qemu-img+0x107c1b) #5 img_create /usr/local/google/home/pefoley/qemu/build/../qemu-img.c:585:5 (qemu-img+0xe2dad) #6 main /usr/local/google/home/pefoley/qemu/build/../qemu-img.c:5449:20 (qemu-img+0xddfc3) SUMMARY: ThreadSanitizer: data race /usr/local/google/home/pefoley/qemu/build/../util/thread-pool.c:101:20 in worker_thread ================== ================== WARNING: ThreadSanitizer: data race (pid=217825) Atomic write of size 4 at 0x7b0c000000e8 by thread T5 (mutexes: write M42): #0 __tsan_atomic32_fetch_or (qemu-img+0xb9ec1) #1 aio_bh_enqueue /usr/local/google/home/pefoley/qemu/build/../util/async.c:80:17 (qemu-img+0x239c23) #2 qemu_bh_schedule /usr/local/google/home/pefoley/qemu/build/../util/async.c:186:5 (qemu-img+0x239c23) #3 worker_thread /usr/local/google/home/pefoley/qemu/build/../util/thread-pool.c:113:9 (qemu-img+0x24fe7c) #4 qemu_thread_start /usr/local/google/home/pefoley/qemu/build/../util/qemu-thread-posix.c:556:9 (qemu-img+0x225960) Previous read of size 4 at 0x7b0c000000e8 by main thread: #0 aio_compute_bh_timeout /usr/local/google/home/pefoley/qemu/build/../util/async.c:209:18 (qemu-img+0x239e7f) #1 aio_compute_timeout /usr/local/google/home/pefoley/qemu/build/../util/async.c:232:15 (qemu-img+0x239e7f) #2 aio_poll /usr/local/google/home/pefoley/qemu/build/../util/aio-posix.c:624:26 (qemu-img+0x21f9c2) #3 bdrv_create /usr/local/google/home/pefoley/qemu/build/../block.c:549:13 (qemu-img+0xf88b1) #4 bdrv_img_create /usr/local/google/home/pefoley/qemu/build/../block.c:6911:11 (qemu-img+0x107c1b) #5 img_create /usr/local/google/home/pefoley/qemu/build/../qemu-img.c:585:5 (qemu-img+0xe2dad) #6 main /usr/local/google/home/pefoley/qemu/build/../qemu-img.c:5449:20 (qemu-img+0xddfc3) Location is heap block of size 48 at 0x7b0c000000c0 allocated by thread T4: #0 malloc (qemu-img+0x68e0d) #1 g_malloc (libglib-2.0.so.0+0x59e18) #2 thread_pool_init_one /usr/local/google/home/pefoley/qemu/build/../util/thread-pool.c:305:27 (qemu-img+0x24f235) #3 thread_pool_new /usr/local/google/home/pefoley/qemu/build/../util/thread-pool.c:319:5 (qemu-img+0x24f235) #4 aio_get_thread_pool /usr/local/google/home/pefoley/qemu/build/../util/async.c:390:28 (qemu-img+0x239fd4) #5 raw_thread_pool_submit /usr/local/google/home/pefoley/qemu/build/../block/file-posix.c:2045:24 (qemu-img+0x1b51f7) #6 raw_regular_truncate /usr/local/google/home/pefoley/qemu/build/../block/file-posix.c:2231:12 (qemu-img+0x1b51f7) #7 raw_co_create /usr/local/google/home/pefoley/qemu/build/../block/file-posix.c:2519:14 (qemu-img+0x1b51f7) #8 raw_co_create_opts /usr/local/google/home/pefoley/qemu/build/../block/file-posix.c:2635:12 (qemu-img+0x1b5678) #9 bdrv_create_co_entry /usr/local/google/home/pefoley/qemu/build/../block.c:516:11 (qemu-img+0xf87c5) #10 bdrv_create /usr/local/google/home/pefoley/qemu/build/../block.c:544:9 (qemu-img+0xf87c5) #11 bdrv_create_file /usr/local/google/home/pefoley/qemu/build/../block.c:734:11 (qemu-img+0xf8d3d) #12 qcow2_co_create_opts /usr/local/google/home/pefoley/qemu/build/../block/qcow2.c:3842:11 (qemu-img+0x170c63) #13 bdrv_create_co_entry /usr/local/google/home/pefoley/qemu/build/../block.c:516:11 (qemu-img+0xf8975) #14 coroutine_trampoline /usr/local/google/home/pefoley/qemu/build/../util/coroutine-ucontext.c:173:9 (qemu-img+0x23d008) #15 (libc.so.6+0x51a2f) Mutex M42 (0x7b3800000010) created at: #0 pthread_mutex_init (qemu-img+0x6bc0f) #1 qemu_mutex_init /usr/local/google/home/pefoley/qemu/build/../util/qemu-thread-posix.c:57:11 (qemu-img+0x223f69) #2 thread_pool_init_one /usr/local/google/home/pefoley/qemu/build/../util/thread-pool.c:306:5 (qemu-img+0x24f24d) #3 thread_pool_new /usr/local/google/home/pefoley/qemu/build/../util/thread-pool.c:319:5 (qemu-img+0x24f24d) #4 aio_get_thread_pool /usr/local/google/home/pefoley/qemu/build/../util/async.c:390:28 (qemu-img+0x239fd4) #5 raw_thread_pool_submit /usr/local/google/home/pefoley/qemu/build/../block/file-posix.c:2045:24 (qemu-img+0x1b51f7) #6 raw_regular_truncate /usr/local/google/home/pefoley/qemu/build/../block/file-posix.c:2231:12 (qemu-img+0x1b51f7) #7 raw_co_create /usr/local/google/home/pefoley/qemu/build/../block/file-posix.c:2519:14 (qemu-img+0x1b51f7) #8 raw_co_create_opts /usr/local/google/home/pefoley/qemu/build/../block/file-posix.c:2635:12 (qemu-img+0x1b5678) #9 bdrv_create_co_entry /usr/local/google/home/pefoley/qemu/build/../block.c:516:11 (qemu-img+0xf87c5) #10 bdrv_create /usr/local/google/home/pefoley/qemu/build/../block.c:544:9 (qemu-img+0xf87c5) #11 bdrv_create_file /usr/local/google/home/pefoley/qemu/build/../block.c:734:11 (qemu-img+0xf8d3d) #12 qcow2_co_create_opts /usr/local/google/home/pefoley/qemu/build/../block/qcow2.c:3842:11 (qemu-img+0x170c63) #13 bdrv_create_co_entry /usr/local/google/home/pefoley/qemu/build/../block.c:516:11 (qemu-img+0xf8975) #14 coroutine_trampoline /usr/local/google/home/pefoley/qemu/build/../util/coroutine-ucontext.c:173:9 (qemu-img+0x23d008) #15 (libc.so.6+0x51a2f) Thread T5 'worker' (tid=217829, running) created by main thread at: #0 pthread_create (qemu-img+0x6a49d) #1 qemu_thread_create /usr/local/google/home/pefoley/qemu/build/../util/qemu-thread-posix.c:596:11 (qemu-img+0x225800) #2 do_spawn_thread /usr/local/google/home/pefoley/qemu/build/../util/thread-pool.c:134:5 (qemu-img+0x24fac3) #3 spawn_thread_bh_fn /usr/local/google/home/pefoley/qemu/build/../util/thread-pool.c:142:5 (qemu-img+0x24fac3) #4 aio_bh_call /usr/local/google/home/pefoley/qemu/build/../util/async.c:141:5 (qemu-img+0x239a96) #5 aio_bh_poll /usr/local/google/home/pefoley/qemu/build/../util/async.c:169:13 (qemu-img+0x239a96) #6 aio_poll /usr/local/google/home/pefoley/qemu/build/../util/aio-posix.c:707:17 (qemu-img+0x220822) #7 bdrv_create /usr/local/google/home/pefoley/qemu/build/../block.c:549:13 (qemu-img+0xf88b1) #8 bdrv_img_create /usr/local/google/home/pefoley/qemu/build/../block.c:6911:11 (qemu-img+0x107c1b) #9 img_create /usr/local/google/home/pefoley/qemu/build/../qemu-img.c:585:5 (qemu-img+0xe2dad) #10 main /usr/local/google/home/pefoley/qemu/build/../qemu-img.c:5449:20 (qemu-img+0xddfc3) Thread T4 (tid=0, running) created by main thread at: #0 on_new_fiber /usr/local/google/home/pefoley/qemu/build/../util/coroutine-ucontext.c:90:25 (qemu-img+0x23cead) #1 qemu_coroutine_new /usr/local/google/home/pefoley/qemu/build/../util/coroutine-ucontext.c:219:5 (qemu-img+0x23cead) #2 qemu_coroutine_create /usr/local/google/home/pefoley/qemu/build/../util/qemu-coroutine.c:75:14 (qemu-img+0x24c7be) #3 bdrv_create /usr/local/google/home/pefoley/qemu/build/../block.c:546:14 (qemu-img+0xf8884) #4 bdrv_img_create /usr/local/google/home/pefoley/qemu/build/../block.c:6911:11 (qemu-img+0x107c1b) #5 img_create /usr/local/google/home/pefoley/qemu/build/../qemu-img.c:585:5 (qemu-img+0xe2dad) #6 main /usr/local/google/home/pefoley/qemu/build/../qemu-img.c:5449:20 (qemu-img+0xddfc3) SUMMARY: ThreadSanitizer: data race (/usr/local/google/home/pefoley/qemu/build/qemu-img+0xb9ec1) in __tsan_atomic32_fetch_or ================== ThreadSanitizer: reported 3 warnings ``` Steps to reproduce: 1. ./configure --target-list=x86_64-softmmu --enable-tsan --cc=clang --cxx=clang++ 2. make -j12 3. touch base.img 4. build/qemu-img create -b base.img -f qcow2 -F raw delta.img ./configure --target-list=x86_64-softmmu --enable-tsan --cc=clang --cxx=clang++ touch base.img build/qemu-img create -b base.img -f qcow2 -F raw delta.img