[Devel] [RFC PATCH vz9 v6 02/62] dm-ploop: Use READ_ONCE/WRITE_ONCE to access md page data

Alexander Atanasov alexander.atanasov at virtuozzo.com
Mon Jan 20 11:03:06 MSK 2025


On 20.01.25 9:23, Pavel Tikhomirov wrote:
> 
> 
> On 12/6/24 05:55, Alexander Atanasov wrote:
>> @@ -1090,9 +1090,9 @@ static int ploop_alloc_cluster(struct ploop 
>> *ploop, struct ploop_index_wb *piwb,
>>       clu -= piwb->page_id * PAGE_SIZE / sizeof(map_index_t) - 
>> PLOOP_MAP_OFFSET;
>>       to = piwb->kmpage;
>> -    if (to[clu]) {
>> +    if (READ_ONCE(to[clu])) {
>>           /* Already mapped by one of previous bios */
>> -        *dst_clu = to[clu];
>> +        *dst_clu = READ_ONCE(to[clu]);
>>           already_alloced = true;
>>       }
> 
> The above hunk does not look good, we explicitly do "READ_ONCE(to[clu])" 
> twice, likely that's not what we want.


We can do without inner READ_ONCE but for consistency i think it is 
better. /it would be optimised by the compiler anyway/

The idea is that if a clu is already mapped we read !=0 in the if,
inside we will always read the !=0 too, since discard is synchronized by 
the holes bitmap.

-- 
Regards,
Alexander Atanasov



More information about the Devel mailing list