6 #include <linux/radix-tree.h>
7 #include <asm/pgtable.h>
9 /* We use lowest available exceptional entry bit for locking */
10 #define RADIX_DAX_ENTRY_LOCK (1 << RADIX_TREE_EXCEPTIONAL_SHIFT)
12 ssize_t
dax_do_io(struct kiocb
*, struct inode
*, struct iov_iter
*,
13 get_block_t
, dio_iodone_t
, int flags
);
14 int dax_zero_page_range(struct inode
*, loff_t from
, unsigned len
, get_block_t
);
15 int dax_truncate_page(struct inode
*, loff_t from
, get_block_t
);
16 int dax_fault(struct vm_area_struct
*, struct vm_fault
*, get_block_t
);
17 int dax_delete_mapping_entry(struct address_space
*mapping
, pgoff_t index
);
18 void dax_wake_mapping_entry_waiter(struct address_space
*mapping
,
19 pgoff_t index
, bool wake_all
);
22 struct page
*read_dax_sector(struct block_device
*bdev
, sector_t n
);
23 void dax_unlock_mapping_entry(struct address_space
*mapping
, pgoff_t index
);
24 int __dax_zero_page_range(struct block_device
*bdev
, sector_t sector
,
25 unsigned int offset
, unsigned int length
);
27 static inline struct page
*read_dax_sector(struct block_device
*bdev
,
30 return ERR_PTR(-ENXIO
);
32 /* Shouldn't ever be called when dax is disabled. */
33 static inline void dax_unlock_mapping_entry(struct address_space
*mapping
,
38 static inline int __dax_zero_page_range(struct block_device
*bdev
,
39 sector_t sector
, unsigned int offset
, unsigned int length
)
45 #if defined(CONFIG_TRANSPARENT_HUGEPAGE)
46 int dax_pmd_fault(struct vm_area_struct
*, unsigned long addr
, pmd_t
*,
47 unsigned int flags
, get_block_t
);
49 static inline int dax_pmd_fault(struct vm_area_struct
*vma
, unsigned long addr
,
50 pmd_t
*pmd
, unsigned int flags
, get_block_t gb
)
52 return VM_FAULT_FALLBACK
;
55 int dax_pfn_mkwrite(struct vm_area_struct
*, struct vm_fault
*);
56 #define dax_mkwrite(vma, vmf, gb) dax_fault(vma, vmf, gb)
58 static inline bool vma_is_dax(struct vm_area_struct
*vma
)
60 return vma
->vm_file
&& IS_DAX(vma
->vm_file
->f_mapping
->host
);
63 static inline bool dax_mapping(struct address_space
*mapping
)
65 return mapping
->host
&& IS_DAX(mapping
->host
);
68 struct writeback_control
;
69 int dax_writeback_mapping_range(struct address_space
*mapping
,
70 struct block_device
*bdev
, struct writeback_control
*wbc
);