• David Sterba's avatar
    btrfs: access eb::blocking_writers according to ACCESS_ONCE policies · a4477988
    David Sterba authored
    A nice writeup of the LKMM (Linux Kernel Memory Model) rules for access
    once policies can be found here
    https://lwn.net/Articles/799218/#Access-Marking%20Policies .
    
    The locked and unlocked access to eb::blocking_writers should be
    annotated accordingly, following this:
    
    Writes:
    
    - locked write must use ONCE, may use plain read
    - unlocked write must use ONCE
    
    Reads:
    
    - unlocked read must use ONCE
    - locked read may use plain read iff not mixed with unlocked read
    - unlocked read then locked must use ONCE
    
    There's one difference on the assembly level, where
    btrfs_tree_read_lock_atomic and btrfs_try_tree_read_lock used the cached
    value and did not reevaluate it after taking the lock. This could have
    missed some opportunities to take the lock in case blocking writers
    changed between the calls, but the window is just a few instructions
    long. As this is in try-lock, the callers handle that.
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    a4477988
locking.c 10.1 KB