• Nikolay Borisov's avatar
    btrfs: Use ihold instead of igrab in cow_file_range_async · bd4691a0
    Nikolay Borisov authored
    ihold is supposed to be used when the caller already has a reference to
    the inode. In the case of cow_file_range_async this invariants holds,
    since the 3 call chains leading to this function all take a reference:
    
    btrfs_writepage  <--- does igrab
     extent_write_full_page
      __extent_writepage
       writepage_delalloc
         btrfs_run_delalloc_range
          cow_file_range_async
    
    extent_write_cache_pages <--- does igrab
     __extent_writepage (same callchain as above)
    
    and
    
    submit_compressed_extents <-- already called from async CoW submit path,
    			      which would have done ihold.
     extent_write_locked_range
      __extent_writepage
    Signed-off-by: default avatarNikolay Borisov <nborisov@suse.com>
    Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
    [ add comment ]
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    bd4691a0
inode.c 292 KB