diff options
Diffstat (limited to 'fs/kernfs/kernfs-internal.h')
| -rw-r--r-- | fs/kernfs/kernfs-internal.h | 24 | 
1 files changed, 22 insertions, 2 deletions
diff --git a/fs/kernfs/kernfs-internal.h b/fs/kernfs/kernfs-internal.h index ccc3b44f6306..f9cc912c31e1 100644 --- a/fs/kernfs/kernfs-internal.h +++ b/fs/kernfs/kernfs-internal.h @@ -13,6 +13,7 @@  #include <linux/lockdep.h>  #include <linux/fs.h>  #include <linux/mutex.h> +#include <linux/rwsem.h>  #include <linux/xattr.h>  #include <linux/kernfs.h> @@ -69,7 +70,7 @@ struct kernfs_super_info {  	 */  	const void		*ns; -	/* anchored at kernfs_root->supers, protected by kernfs_mutex */ +	/* anchored at kernfs_root->supers, protected by kernfs_rwsem */  	struct list_head	node;  };  #define kernfs_info(SB) ((struct kernfs_super_info *)(SB->s_fs_info)) @@ -81,6 +82,25 @@ static inline struct kernfs_node *kernfs_dentry_node(struct dentry *dentry)  	return d_inode(dentry)->i_private;  } +static inline void kernfs_set_rev(struct kernfs_node *parent, +				  struct dentry *dentry) +{ +	dentry->d_time = parent->dir.rev; +} + +static inline void kernfs_inc_rev(struct kernfs_node *parent) +{ +	parent->dir.rev++; +} + +static inline bool kernfs_dir_changed(struct kernfs_node *parent, +				      struct dentry *dentry) +{ +	if (parent->dir.rev != dentry->d_time) +		return true; +	return false; +} +  extern const struct super_operations kernfs_sops;  extern struct kmem_cache *kernfs_node_cache, *kernfs_iattrs_cache; @@ -102,7 +122,7 @@ int __kernfs_setattr(struct kernfs_node *kn, const struct iattr *iattr);  /*   * dir.c   */ -extern struct mutex kernfs_mutex; +extern struct rw_semaphore kernfs_rwsem;  extern const struct dentry_operations kernfs_dops;  extern const struct file_operations kernfs_dir_fops;  extern const struct inode_operations kernfs_dir_iops;  |