diff options
Diffstat (limited to 'drivers/nvdimm/nd.h')
| -rw-r--r-- | drivers/nvdimm/nd.h | 17 | 
1 files changed, 15 insertions, 2 deletions
| diff --git a/drivers/nvdimm/nd.h b/drivers/nvdimm/nd.h index 03852d738eec..e1b5715bd91f 100644 --- a/drivers/nvdimm/nd.h +++ b/drivers/nvdimm/nd.h @@ -42,7 +42,7 @@ struct nd_poison {  struct nvdimm_drvdata {  	struct device *dev; -	int nsindex_size; +	int nsindex_size, nslabel_size;  	struct nd_cmd_get_config_size nsarea;  	void *data;  	int ns_current, ns_next; @@ -96,6 +96,12 @@ static inline struct nd_namespace_index *to_next_namespace_index(  	return to_namespace_index(ndd, ndd->ns_next);  } +unsigned sizeof_namespace_label(struct nvdimm_drvdata *ndd); + +#define namespace_label_has(ndd, field) \ +	(offsetof(struct nd_namespace_label, field) \ +		< sizeof_namespace_label(ndd)) +  #define nd_dbg_dpa(r, d, res, fmt, arg...) \  	dev_dbg((r) ? &(r)->dev : (d)->dev, "%s: %.13s: %#llx @ %#llx " fmt, \  		(r) ? dev_name((d)->dev) : "", res ? res->name : "null", \ @@ -155,6 +161,7 @@ struct nd_region {  	u64 ndr_start;  	int id, num_lanes, ro, numa_node;  	void *provider_data; +	struct kernfs_node *bb_state;  	struct badblocks bb;  	struct nd_interleave_set *nd_set;  	struct nd_percpu_lane __percpu *lane; @@ -188,6 +195,9 @@ struct nd_btt {  	u64 size;  	u8 *uuid;  	int id; +	int initial_offset; +	u16 version_major; +	u16 version_minor;  };  enum nd_pfn_mode { @@ -229,6 +239,7 @@ ssize_t nd_sector_size_store(struct device *dev, const char *buf,  		unsigned long *current_lbasize, const unsigned long *supported);  int __init nvdimm_init(void);  int __init nd_region_init(void); +int __init nd_label_init(void);  void nvdimm_exit(void);  void nd_region_exit(void);  struct nvdimm; @@ -330,7 +341,8 @@ static inline struct device *nd_dax_create(struct nd_region *nd_region)  struct nd_region *to_nd_region(struct device *dev);  int nd_region_to_nstype(struct nd_region *nd_region);  int nd_region_register_namespaces(struct nd_region *nd_region, int *err); -u64 nd_region_interleave_set_cookie(struct nd_region *nd_region); +u64 nd_region_interleave_set_cookie(struct nd_region *nd_region, +		struct nd_namespace_index *nsindex);  u64 nd_region_interleave_set_altcookie(struct nd_region *nd_region);  void nvdimm_bus_lock(struct device *dev);  void nvdimm_bus_unlock(struct device *dev); @@ -349,6 +361,7 @@ int nvdimm_namespace_attach_btt(struct nd_namespace_common *ndns);  int nvdimm_namespace_detach_btt(struct nd_btt *nd_btt);  const char *nvdimm_namespace_disk_name(struct nd_namespace_common *ndns,  		char *name); +unsigned int pmem_sector_size(struct nd_namespace_common *ndns);  void nvdimm_badblocks_populate(struct nd_region *nd_region,  		struct badblocks *bb, const struct resource *res);  #if IS_ENABLED(CONFIG_ND_CLAIM) |