lockless file descriptor lookup

Jeff Roberson jroberson at jroberson.net
Wed May 13 00:25:56 UTC 2009


On Tue, 12 May 2009, Dag-Erling Sm?rgrav wrote:

> Jeff Roberson <jroberson at jroberson.net> writes:
>> I'd also appreciate it if someone could look at my volatile cast and
>> make sure I'm actually forcing the compiler to refresh the fd_ofiles
>> array here:
>>
>> +		if (fp == ((struct file *volatile*)fdp->fd_ofiles)[fd])
>
> The problem is that since it is not declared as volatile, some other
> piece of code may have modified it but not yet flushed it to RAM.

That is an acceptable race due to other guarantees.  If it hasn't been 
committed to memory yet, the old table still contains valid data.  I only 
need to be certain that the compiler doesn't cache the original ofiles 
value.  It can't anyway because atomics use inline assembly on all 
platforms but I'd like it to be explicit anyway.

Thanks,
Jeff

>
> DES
> -- 
> Dag-Erling Sm?rgrav - des at des.no
>


More information about the freebsd-arch mailing list