• Filipe Manana's avatar
    btrfs: avoid attempt to drop extents when logging inode for the first time · 5328b2a7
    Filipe Manana authored
    When logging an extent, in the fast fsync path, we always attempt do drop
    or trim any existing extents with a range that match or overlap the range
    of the extent we are about to log. We do that through a call to
    btrfs_drop_extents().
    
    However this is not needed when we are logging the inode for the first
    time in the current transaction, since we have no inode items of the
    inode in the log tree. Calling btrfs_drop_extents() does a deletion search
    on the log tree, which is expensive when we have concurrent tasks
    accessing the log tree because a deletion search always acquires a write
    lock on the extent buffers at levels 2, 1 and 0, adding significant lock
    contention, specially taking into account the height of a log tree rarely
    (if ever) goes beyond 2 or 3, due to its short life.
    
    So skip the call to btrfs_drop_extents() when the inode was not previously
    logged in the current transaction.
    
    This patch is part of a patch set comprised of the following patches:
    
      btrfs: check if a log tree exists at inode_logged()
      btrfs: remove no longer needed checks for NULL log context
      btrfs: do not log new dentries when logging that a new name exists
      btrfs: always update the logged transaction when logging new names
      btrfs: avoid expensive search when dropping inode items from log
      btrfs: add helper to truncate inode items when logging inode
      btrfs: avoid expensive search when truncating inode items from the log
      btrfs: avoid search for logged i_size when logging inode if possible
      btrfs: avoid attempt to drop extents when logging inode for the first time
      btrfs: do not commit delayed inode when logging a file in full sync mode
    
    This is patch 9/10 and test results are listed in the change log of the
    last patch in the set.
    Signed-off-by: default avatarFilipe Manana <fdmanana@suse.com>
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    5328b2a7
tree-log.c 180 KB