[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