Commit 1b764601 authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Dan Williams

dax: mark dax_get_by_host static

And move the code around a bit to avoid a forward declaration.
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarDan Williams <dan.j.williams@intel.com>
Link: https://lore.kernel.org/r/20210826135510.6293-5-hch@lst.deSigned-off-by: default avatarDan Williams <dan.j.williams@intel.com>
parent dfa584f6
...@@ -17,6 +17,24 @@ ...@@ -17,6 +17,24 @@
#include <linux/fs.h> #include <linux/fs.h>
#include "dax-private.h" #include "dax-private.h"
/**
* struct dax_device - anchor object for dax services
* @inode: core vfs
* @cdev: optional character interface for "device dax"
* @host: optional name for lookups where the device path is not available
* @private: dax driver private data
* @flags: state and boolean properties
*/
struct dax_device {
struct hlist_node list;
struct inode inode;
struct cdev cdev;
const char *host;
void *private;
unsigned long flags;
const struct dax_operations *ops;
};
static dev_t dax_devt; static dev_t dax_devt;
DEFINE_STATIC_SRCU(dax_srcu); DEFINE_STATIC_SRCU(dax_srcu);
static struct vfsmount *dax_mnt; static struct vfsmount *dax_mnt;
...@@ -40,6 +58,42 @@ void dax_read_unlock(int id) ...@@ -40,6 +58,42 @@ void dax_read_unlock(int id)
} }
EXPORT_SYMBOL_GPL(dax_read_unlock); EXPORT_SYMBOL_GPL(dax_read_unlock);
static int dax_host_hash(const char *host)
{
return hashlen_hash(hashlen_string("DAX", host)) % DAX_HASH_SIZE;
}
/**
* dax_get_by_host() - temporary lookup mechanism for filesystem-dax
* @host: alternate name for the device registered by a dax driver
*/
static struct dax_device *dax_get_by_host(const char *host)
{
struct dax_device *dax_dev, *found = NULL;
int hash, id;
if (!host)
return NULL;
hash = dax_host_hash(host);
id = dax_read_lock();
spin_lock(&dax_host_lock);
hlist_for_each_entry(dax_dev, &dax_host_list[hash], list) {
if (!dax_alive(dax_dev)
|| strcmp(host, dax_dev->host) != 0)
continue;
if (igrab(&dax_dev->inode))
found = dax_dev;
break;
}
spin_unlock(&dax_host_lock);
dax_read_unlock(id);
return found;
}
#ifdef CONFIG_BLOCK #ifdef CONFIG_BLOCK
#include <linux/blkdev.h> #include <linux/blkdev.h>
...@@ -202,24 +256,6 @@ enum dax_device_flags { ...@@ -202,24 +256,6 @@ enum dax_device_flags {
DAXDEV_SYNC, DAXDEV_SYNC,
}; };
/**
* struct dax_device - anchor object for dax services
* @inode: core vfs
* @cdev: optional character interface for "device dax"
* @host: optional name for lookups where the device path is not available
* @private: dax driver private data
* @flags: state and boolean properties
*/
struct dax_device {
struct hlist_node list;
struct inode inode;
struct cdev cdev;
const char *host;
void *private;
unsigned long flags;
const struct dax_operations *ops;
};
static ssize_t write_cache_show(struct device *dev, static ssize_t write_cache_show(struct device *dev,
struct device_attribute *attr, char *buf) struct device_attribute *attr, char *buf)
{ {
...@@ -417,11 +453,6 @@ bool dax_alive(struct dax_device *dax_dev) ...@@ -417,11 +453,6 @@ bool dax_alive(struct dax_device *dax_dev)
} }
EXPORT_SYMBOL_GPL(dax_alive); EXPORT_SYMBOL_GPL(dax_alive);
static int dax_host_hash(const char *host)
{
return hashlen_hash(hashlen_string("DAX", host)) % DAX_HASH_SIZE;
}
/* /*
* Note, rcu is not protecting the liveness of dax_dev, rcu is ensuring * Note, rcu is not protecting the liveness of dax_dev, rcu is ensuring
* that any fault handlers or operations that might have seen * that any fault handlers or operations that might have seen
...@@ -618,38 +649,6 @@ void put_dax(struct dax_device *dax_dev) ...@@ -618,38 +649,6 @@ void put_dax(struct dax_device *dax_dev)
} }
EXPORT_SYMBOL_GPL(put_dax); EXPORT_SYMBOL_GPL(put_dax);
/**
* dax_get_by_host() - temporary lookup mechanism for filesystem-dax
* @host: alternate name for the device registered by a dax driver
*/
struct dax_device *dax_get_by_host(const char *host)
{
struct dax_device *dax_dev, *found = NULL;
int hash, id;
if (!host)
return NULL;
hash = dax_host_hash(host);
id = dax_read_lock();
spin_lock(&dax_host_lock);
hlist_for_each_entry(dax_dev, &dax_host_list[hash], list) {
if (!dax_alive(dax_dev)
|| strcmp(host, dax_dev->host) != 0)
continue;
if (igrab(&dax_dev->inode))
found = dax_dev;
break;
}
spin_unlock(&dax_host_lock);
dax_read_unlock(id);
return found;
}
EXPORT_SYMBOL_GPL(dax_get_by_host);
/** /**
* inode_dax: convert a public inode into its dax_dev * inode_dax: convert a public inode into its dax_dev
* @inode: An inode with i_cdev pointing to a dax_dev * @inode: An inode with i_cdev pointing to a dax_dev
......
...@@ -41,7 +41,6 @@ struct dax_operations { ...@@ -41,7 +41,6 @@ struct dax_operations {
extern struct attribute_group dax_attribute_group; extern struct attribute_group dax_attribute_group;
#if IS_ENABLED(CONFIG_DAX) #if IS_ENABLED(CONFIG_DAX)
struct dax_device *dax_get_by_host(const char *host);
struct dax_device *alloc_dax(void *private, const char *host, struct dax_device *alloc_dax(void *private, const char *host,
const struct dax_operations *ops, unsigned long flags); const struct dax_operations *ops, unsigned long flags);
void put_dax(struct dax_device *dax_dev); void put_dax(struct dax_device *dax_dev);
...@@ -73,10 +72,6 @@ static inline bool daxdev_mapping_supported(struct vm_area_struct *vma, ...@@ -73,10 +72,6 @@ static inline bool daxdev_mapping_supported(struct vm_area_struct *vma,
return dax_synchronous(dax_dev); return dax_synchronous(dax_dev);
} }
#else #else
static inline struct dax_device *dax_get_by_host(const char *host)
{
return NULL;
}
static inline struct dax_device *alloc_dax(void *private, const char *host, static inline struct dax_device *alloc_dax(void *private, const char *host,
const struct dax_operations *ops, unsigned long flags) const struct dax_operations *ops, unsigned long flags)
{ {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment