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
> and one more question:
> Do we really have users, which accesses dirty bitmaps with only BQL?
> query-block uses dirty_bitmap_mutex..