diff options
Diffstat (limited to 'include/linux/fs.h')
-rw-r--r-- | include/linux/fs.h | 38 |
1 files changed, 21 insertions, 17 deletions
diff --git a/include/linux/fs.h b/include/linux/fs.h index c72048c5520e..b45e951c14b7 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h @@ -39,6 +39,7 @@ #include <linux/fs_types.h> #include <linux/build_bug.h> #include <linux/stddef.h> +#include <linux/rhashtable-types.h> #include <asm/byteorder.h> #include <uapi/linux/fs.h> @@ -70,7 +71,6 @@ struct fs_context; struct fs_parameter_spec; extern void __init inode_init(void); -extern void __init inode_init_early(void); extern void __init files_init(void); extern void __init files_maxfiles_init(void); @@ -667,7 +667,7 @@ struct inode { unsigned long dirtied_when; /* jiffies of first dirtying */ unsigned long dirtied_time_when; - struct hlist_node i_hash; + struct rhash_head i_hash; struct list_head i_io_list; /* backing dev IO list */ #ifdef CONFIG_CGROUP_WRITEBACK struct bdi_writeback *i_wb; /* the associated cgroup wb */ @@ -734,7 +734,7 @@ static inline unsigned int i_blocksize(const struct inode *node) static inline int inode_unhashed(struct inode *inode) { - return hlist_unhashed(&inode->i_hash); + return inode->i_hash.next == NULL; } /* @@ -745,7 +745,7 @@ static inline int inode_unhashed(struct inode *inode) */ static inline void inode_fake_hash(struct inode *inode) { - hlist_add_fake(&inode->i_hash); + inode->i_hash.next = (void *) 2; } /* @@ -1536,6 +1536,9 @@ struct super_block { */ int s_stack_depth; + struct rhashtable s_inode_table; + bool s_inode_table_init_done; + /* s_inode_list_lock protects s_inodes */ spinlock_t s_inode_list_lock ____cacheline_aligned_in_smp; struct list_head s_inodes; /* all inodes */ @@ -2927,24 +2930,24 @@ static inline int generic_drop_inode(struct inode *inode) } extern void d_mark_dontcache(struct inode *inode); +extern const struct rhashtable_params default_inode_table_params; +extern int super_setup_inode_table(struct super_block *sb, + const struct rhashtable_params *params); + extern struct inode *ilookup5_nowait(struct super_block *sb, - unsigned long hashval, int (*test)(struct inode *, void *), - void *data); -extern struct inode *ilookup5(struct super_block *sb, unsigned long hashval, - int (*test)(struct inode *, void *), void *data); + const void *key); +extern struct inode *ilookup5(struct super_block *sb, const void *key); extern struct inode *ilookup(struct super_block *sb, unsigned long ino); -extern struct inode *inode_insert5(struct inode *inode, unsigned long hashval, - int (*test)(struct inode *, void *), - int (*set)(struct inode *, void *), - void *data); -extern struct inode * iget5_locked(struct super_block *, unsigned long, int (*test)(struct inode *, void *), int (*set)(struct inode *, void *), void *); +extern struct inode *inode_insert5(struct inode *inode); +extern struct inode * iget5_locked(struct super_block *, + int (*set)(struct inode *, const void *), + const void *); extern struct inode * iget_locked(struct super_block *, unsigned long); -extern struct inode *find_inode_rcu(struct super_block *, unsigned long, - int (*)(struct inode *, void *), void *); +extern struct inode *find_inode_rcu(struct super_block *, const void *); extern struct inode *find_inode_by_ino_rcu(struct super_block *, unsigned long); -extern int insert_inode_locked4(struct inode *, unsigned long, int (*test)(struct inode *, void *), void *); extern int insert_inode_locked(struct inode *); + #ifdef CONFIG_DEBUG_LOCK_ALLOC extern void lockdep_annotate_inode_mutex_key(struct inode *inode); #else @@ -2989,7 +2992,8 @@ static inline void insert_inode_hash(struct inode *inode) extern void __remove_inode_hash(struct inode *); static inline void remove_inode_hash(struct inode *inode) { - if (!inode_unhashed(inode) && !hlist_fake(&inode->i_hash)) + if (!inode_unhashed(inode) && + inode->i_hash.next != (void *) 2) __remove_inode_hash(inode); } |