forked from mirrors/linux
		
	We want dax capable drivers to be able to publish a set of dax operations [1]. However, we do not want to further abuse block_devices to advertise these operations. Instead we will attach these operations to a dax device and add a lookup mechanism to go from block device path to a dax device. A dax capable driver like pmem or brd is responsible for registering a dax device, alongside a block device, and then a dax capable filesystem is responsible for retrieving the dax device by path name if it wants to call dax_operations. For now, we refactor the dax pseudo-fs to be a generic facility, rather than an implementation detail, of the device-dax use case. Where a "dax device" is just an inode + dax infrastructure, and "Device DAX" is a mapping service layered on top of that base 'struct dax_device'. "Filesystem DAX" is then a mapping service that layers a filesystem on top of that same base device. Filesystem DAX is associated with a block_device for now, but perhaps directly to a dax device in the future, or for new pmem-only filesystems. [1]: https://lkml.org/lkml/2017/1/19/880 Suggested-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Dan Williams <dan.j.williams@intel.com>
		
			
				
	
	
		
			25 lines
		
	
	
	
		
			966 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			25 lines
		
	
	
	
		
			966 B
		
	
	
	
		
			C
		
	
	
	
	
	
/*
 | 
						|
 * Copyright(c) 2016 Intel Corporation. All rights reserved.
 | 
						|
 *
 | 
						|
 * This program is free software; you can redistribute it and/or modify
 | 
						|
 * it under the terms of version 2 of the GNU General Public License as
 | 
						|
 * published by the Free Software Foundation.
 | 
						|
 *
 | 
						|
 * This program is distributed in the hope that it will be useful, but
 | 
						|
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
						|
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | 
						|
 * General Public License for more details.
 | 
						|
 */
 | 
						|
#ifndef __DEVICE_DAX_H__
 | 
						|
#define __DEVICE_DAX_H__
 | 
						|
struct device;
 | 
						|
struct dev_dax;
 | 
						|
struct resource;
 | 
						|
struct dax_region;
 | 
						|
void dax_region_put(struct dax_region *dax_region);
 | 
						|
struct dax_region *alloc_dax_region(struct device *parent,
 | 
						|
		int region_id, struct resource *res, unsigned int align,
 | 
						|
		void *addr, unsigned long flags);
 | 
						|
struct dev_dax *devm_create_dev_dax(struct dax_region *dax_region,
 | 
						|
		struct resource *res, int count);
 | 
						|
#endif /* __DEVICE_DAX_H__ */
 |