• David Sterba's avatar
    btrfs: set blocking_writers directly, no increment or decrement · 40d38f53
    David Sterba authored
    The increment and decrement was inherited from previous version that
    used atomics, switched in commit 06297d8c ("btrfs: switch
    extent_buffer blocking_writers from atomic to int"). The only possible
    values are 0 and 1 so we can set them directly.
    
    The generated assembly (gcc 9.x) did the direct value assignment in
    btrfs_set_lock_blocking_write (asm diff after change in 06297d8c):
    
         5d:   test   %eax,%eax
         5f:   je     62 <btrfs_set_lock_blocking_write+0x22>
         61:   retq
    
      -  62:   lock incl 0x44(%rdi)
      -  66:   add    $0x50,%rdi
      -  6a:   jmpq   6f <btrfs_set_lock_blocking_write+0x2f>
    
      +  62:   movl   $0x1,0x44(%rdi)
      +  69:   add    $0x50,%rdi
      +  6d:   jmpq   72 <btrfs_set_lock_blocking_write+0x32>
    
    The part in btrfs_tree_unlock did a decrement because
    BUG_ON(blockers > 1) is probably not a strong hint for the compiler, but
    otherwise the output looks safe:
    
      - lock decl 0x44(%rdi)
    
      + sub    $0x1,%eax
      + mov    %eax,0x44(%rdi)
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    40d38f53
locking.c 9.72 KB