• Dan Williams's avatar
    fs, dax: use page->mapping to warn if truncate collides with a busy page · d2c997c0
    Dan Williams authored
    Catch cases where extent unmap operations encounter pages that are
    pinned / busy. Typically this is pinned pages that are under active dma.
    This warning is a canary for potential data corruption as truncated
    blocks could be allocated to a new file while the device is still
    performing i/o.
    
    Here is an example of a collision that this implementation catches:
    
     WARNING: CPU: 2 PID: 1286 at fs/dax.c:343 dax_disassociate_entry+0x55/0x80
     [..]
     Call Trace:
      __dax_invalidate_mapping_entry+0x6c/0xf0
      dax_delete_mapping_entry+0xf/0x20
      truncate_exceptional_pvec_entries.part.12+0x1af/0x200
      truncate_inode_pages_range+0x268/0x970
      ? tlb_gather_mmu+0x10/0x20
      ? up_write+0x1c/0x40
      ? unmap_mapping_range+0x73/0x140
      xfs_free_file_space+0x1b6/0x5b0 [xfs]
      ? xfs_file_fallocate+0x7f/0x320 [xfs]
      ? down_write_nested+0x40/0x70
      ? xfs_ilock+0x21d/0x2f0 [xfs]
      xfs_file_fallocate+0x162/0x320 [xfs]
      ? rcu_read_lock_sched_held+0x3f/0x70
      ? rcu_sync_lockdep_assert+0x2a/0x50
      ? __sb_start_write+0xd0/0x1b0
      ? vfs_fallocate+0x20c/0x270
      vfs_fallocate+0x154/0x270
      SyS_fallocate+0x43/0x80
      entry_SYSCALL_64_fastpath+0x1f/0x96
    
    Cc: Jeff Moyer <jmoyer@redhat.com>
    Cc: Matthew Wilcox <mawilcox@microsoft.com>
    Cc: Ross Zwisler <ross.zwisler@linux.intel.com>
    Reviewed-by: default avatarJan Kara <jack@suse.cz>
    Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
    Signed-off-by: default avatarDan Williams <dan.j.williams@intel.com>
    d2c997c0
dax.c 44.8 KB