diff options
Diffstat (limited to 'include/linux/dax.h')
| -rw-r--r-- | include/linux/dax.h | 58 | 
1 files changed, 9 insertions, 49 deletions
| diff --git a/include/linux/dax.h b/include/linux/dax.h index 794811875732..895e16fcc62d 100644 --- a/include/linux/dax.h +++ b/include/linux/dax.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  #ifndef _LINUX_DAX_H  #define _LINUX_DAX_H @@ -19,8 +20,6 @@ struct dax_operations {  	/* copy_from_iter: required operation for fs-dax direct-i/o */  	size_t (*copy_from_iter)(struct dax_device *, pgoff_t, void *, size_t,  			struct iov_iter *); -	/* flush: optional driver-specific cache management after writes */ -	void (*flush)(struct dax_device *, pgoff_t, void *, size_t);  };  extern struct attribute_group dax_attribute_group; @@ -57,6 +56,7 @@ static inline void fs_put_dax(struct dax_device *dax_dev)  	put_dax(dax_dev);  } +struct dax_device *fs_dax_get_by_bdev(struct block_device *bdev);  #else  static inline int bdev_dax_supported(struct super_block *sb, int blocksize)  { @@ -71,6 +71,11 @@ static inline struct dax_device *fs_dax_get_by_host(const char *host)  static inline void fs_put_dax(struct dax_device *dax_dev)  {  } + +static inline struct dax_device *fs_dax_get_by_bdev(struct block_device *bdev) +{ +	return NULL; +}  #endif  int dax_read_lock(void); @@ -84,37 +89,9 @@ long dax_direct_access(struct dax_device *dax_dev, pgoff_t pgoff, long nr_pages,  		void **kaddr, pfn_t *pfn);  size_t dax_copy_from_iter(struct dax_device *dax_dev, pgoff_t pgoff, void *addr,  		size_t bytes, struct iov_iter *i); -void dax_flush(struct dax_device *dax_dev, pgoff_t pgoff, void *addr, -		size_t size); +void dax_flush(struct dax_device *dax_dev, void *addr, size_t size);  void dax_write_cache(struct dax_device *dax_dev, bool wc); - -/* - * We use lowest available bit in exceptional entry for locking, one bit for - * the entry size (PMD) and two more to tell us if the entry is a huge zero - * page (HZP) or an empty entry that is just used for locking.  In total four - * special bits. - * - * If the PMD bit isn't set the entry has size PAGE_SIZE, and if the HZP and - * EMPTY bits aren't set the entry is a normal DAX entry with a filesystem - * block allocation. - */ -#define RADIX_DAX_SHIFT	(RADIX_TREE_EXCEPTIONAL_SHIFT + 4) -#define RADIX_DAX_ENTRY_LOCK (1 << RADIX_TREE_EXCEPTIONAL_SHIFT) -#define RADIX_DAX_PMD (1 << (RADIX_TREE_EXCEPTIONAL_SHIFT + 1)) -#define RADIX_DAX_HZP (1 << (RADIX_TREE_EXCEPTIONAL_SHIFT + 2)) -#define RADIX_DAX_EMPTY (1 << (RADIX_TREE_EXCEPTIONAL_SHIFT + 3)) - -static inline unsigned long dax_radix_sector(void *entry) -{ -	return (unsigned long)entry >> RADIX_DAX_SHIFT; -} - -static inline void *dax_radix_locked_entry(sector_t sector, unsigned long flags) -{ -	return (void *)(RADIX_TREE_EXCEPTIONAL_ENTRY | flags | -			((unsigned long)sector << RADIX_DAX_SHIFT) | -			RADIX_DAX_ENTRY_LOCK); -} +bool dax_write_cache_enabled(struct dax_device *dax_dev);  ssize_t dax_iomap_rw(struct kiocb *iocb, struct iov_iter *iter,  		const struct iomap_ops *ops); @@ -123,8 +100,6 @@ int dax_iomap_fault(struct vm_fault *vmf, enum page_entry_size pe_size,  int dax_delete_mapping_entry(struct address_space *mapping, pgoff_t index);  int dax_invalidate_mapping_entry_sync(struct address_space *mapping,  				      pgoff_t index); -void dax_wake_mapping_entry_waiter(struct address_space *mapping, -		pgoff_t index, void *entry, bool wake_all);  #ifdef CONFIG_FS_DAX  int __dax_zero_page_range(struct block_device *bdev, @@ -139,21 +114,6 @@ static inline int __dax_zero_page_range(struct block_device *bdev,  }  #endif -#ifdef CONFIG_FS_DAX_PMD -static inline unsigned int dax_radix_order(void *entry) -{ -	if ((unsigned long)entry & RADIX_DAX_PMD) -		return PMD_SHIFT - PAGE_SHIFT; -	return 0; -} -#else -static inline unsigned int dax_radix_order(void *entry) -{ -	return 0; -} -#endif -int dax_pfn_mkwrite(struct vm_fault *vmf); -  static inline bool dax_mapping(struct address_space *mapping)  {  	return mapping->host && IS_DAX(mapping->host); |