Skip to content
  • Josef Bacik's avatar
    Btrfs: improve replacing nocow extents · 652f25a2
    Josef Bacik authored
    
    
    Various people have hit a deadlock when running btrfs/011.  This is because when
    replacing nocow extents we will take the i_mutex to make sure nobody messes with
    the file while we are replacing the extent.  The problem is we are already
    holding a transaction open, which is a locking inversion, so instead we need to
    save these inodes we find and then process them outside of the transaction.
    
    Further we can't just lock the inode and assume we are good to go.  We need to
    lock the extent range and then read back the extent cache for the inode to make
    sure the extent really still points at the physical block we want.  If it
    doesn't we don't have to copy it.  Thanks,
    
    Signed-off-by: default avatarJosef Bacik <jbacik@fusionio.com>
    Signed-off-by: default avatarChris Mason <chris.mason@fusionio.com>
    652f25a2