On 13/08/20 18:34, Vladimir Sementsov-Ogievskiy wrote: > I thought bs is attached to one aio context and aio context attached to > one iothread.
For now yes, but with multiqueue there would be many iothreads sending requests to the AioContext. The BDS would still have a "home" aiocontext to request socket readiness events, but io_uring/linux_aio/threadpool requests could be issued from any iothread. > And all normal request processing of the bs is done in this one iothread. > And when we need to access bs externally, we do it in > aio_context_acquire / aio_context_release, which protects from parallel > access to BlockDriverState fields... > > But you say, that block/io.c is not protected by AioContext lock.. > Does it mean that everything must be thread-safe in block/io.c and all > block drivers? Yes. > > Are tracked_requests different from other fields? A lot of other > BlockDriverState > fields are not protected by any mutex.. For example: total_sectors, > file, backing.. Rules are documented in include/block/block_int.h. It seems however that never_freeze was blindly added at the end. Paolo > Could you give an example of parallel access to tracked_requests? >
