On 12/02/2018 18:30, Vladimir Sementsov-Ogievskiy wrote: > 18.01.2018 13:09, Paolo Bonzini wrote:>> We have three cases: >> >> 1) monitor creates and destroy bitmaps. >> >> 2) monitor also has to read the list. We know it operates with BQL. >> >> 3) users such as mirror.c create a dirty bitmap in the monitor command >> (under BQL), but they can operate without BQL in a separate iothread so >> we create a separate lock (bitmap->mutex). >> >> While in the second and third case, bitmaps cannot disappear. So in the >> first case you operate with BQL+dirty bitmap mutex. The result is that >> you lock out both the second and the third case while creating and >> destroying bitmaps. >> >>> Why do we do not need them >>> on read from the bitmap, only on write? >> >> Indeed, reading the bitmap also requires taking the lock. So >> s/Modifying/Accessing/ in that comment. > > So, finally, the whole thing is: > > 1. any access to dirty_bitmaps list needs BQL or dirty_bitmap_mutex > 2. bitmap creation or removing needs both BQL and dirty_bitmap_mutex
3. any access to a dirty bitmap needs dirty_bitmap_mutex Paolo > yes? > > and one more question: > Do we really have users, which accesses dirty bitmaps with only BQL? > query-block uses dirty_bitmap_mutex.. > >