forked from Minki/linux
dax: convert to bitmask for flags
In preparation for adding more flags, convert the existing flag to a bit-flag. Signed-off-by: Dan Williams <dan.j.williams@intel.com>
This commit is contained in:
parent
5d61e43b39
commit
9a60c3ef57
@ -116,13 +116,18 @@ int __bdev_dax_supported(struct super_block *sb, int blocksize)
|
|||||||
EXPORT_SYMBOL_GPL(__bdev_dax_supported);
|
EXPORT_SYMBOL_GPL(__bdev_dax_supported);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
enum dax_device_flags {
|
||||||
|
/* !alive + rcu grace period == no new operations / mappings */
|
||||||
|
DAXDEV_ALIVE,
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* struct dax_device - anchor object for dax services
|
* struct dax_device - anchor object for dax services
|
||||||
* @inode: core vfs
|
* @inode: core vfs
|
||||||
* @cdev: optional character interface for "device dax"
|
* @cdev: optional character interface for "device dax"
|
||||||
* @host: optional name for lookups where the device path is not available
|
* @host: optional name for lookups where the device path is not available
|
||||||
* @private: dax driver private data
|
* @private: dax driver private data
|
||||||
* @alive: !alive + rcu grace period == no new operations / mappings
|
* @flags: state and boolean properties
|
||||||
*/
|
*/
|
||||||
struct dax_device {
|
struct dax_device {
|
||||||
struct hlist_node list;
|
struct hlist_node list;
|
||||||
@ -130,7 +135,7 @@ struct dax_device {
|
|||||||
struct cdev cdev;
|
struct cdev cdev;
|
||||||
const char *host;
|
const char *host;
|
||||||
void *private;
|
void *private;
|
||||||
bool alive;
|
unsigned long flags;
|
||||||
const struct dax_operations *ops;
|
const struct dax_operations *ops;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -197,7 +202,7 @@ EXPORT_SYMBOL_GPL(dax_flush);
|
|||||||
bool dax_alive(struct dax_device *dax_dev)
|
bool dax_alive(struct dax_device *dax_dev)
|
||||||
{
|
{
|
||||||
lockdep_assert_held(&dax_srcu);
|
lockdep_assert_held(&dax_srcu);
|
||||||
return dax_dev->alive;
|
return test_bit(DAXDEV_ALIVE, &dax_dev->flags);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(dax_alive);
|
EXPORT_SYMBOL_GPL(dax_alive);
|
||||||
|
|
||||||
@ -217,7 +222,7 @@ void kill_dax(struct dax_device *dax_dev)
|
|||||||
if (!dax_dev)
|
if (!dax_dev)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
dax_dev->alive = false;
|
clear_bit(DAXDEV_ALIVE, &dax_dev->flags);
|
||||||
|
|
||||||
synchronize_srcu(&dax_srcu);
|
synchronize_srcu(&dax_srcu);
|
||||||
|
|
||||||
@ -257,7 +262,7 @@ static void dax_destroy_inode(struct inode *inode)
|
|||||||
{
|
{
|
||||||
struct dax_device *dax_dev = to_dax_dev(inode);
|
struct dax_device *dax_dev = to_dax_dev(inode);
|
||||||
|
|
||||||
WARN_ONCE(dax_dev->alive,
|
WARN_ONCE(test_bit(DAXDEV_ALIVE, &dax_dev->flags),
|
||||||
"kill_dax() must be called before final iput()\n");
|
"kill_dax() must be called before final iput()\n");
|
||||||
call_rcu(&inode->i_rcu, dax_i_callback);
|
call_rcu(&inode->i_rcu, dax_i_callback);
|
||||||
}
|
}
|
||||||
@ -309,7 +314,7 @@ static struct dax_device *dax_dev_get(dev_t devt)
|
|||||||
|
|
||||||
dax_dev = to_dax_dev(inode);
|
dax_dev = to_dax_dev(inode);
|
||||||
if (inode->i_state & I_NEW) {
|
if (inode->i_state & I_NEW) {
|
||||||
dax_dev->alive = true;
|
set_bit(DAXDEV_ALIVE, &dax_dev->flags);
|
||||||
inode->i_cdev = &dax_dev->cdev;
|
inode->i_cdev = &dax_dev->cdev;
|
||||||
inode->i_mode = S_IFCHR;
|
inode->i_mode = S_IFCHR;
|
||||||
inode->i_flags = S_DAX;
|
inode->i_flags = S_DAX;
|
||||||
|
Loading…
Reference in New Issue
Block a user