#ifndef __LINUX_DCACHE_H
#define __LINUX_DCACHE_H
#include <linux/atomic.h>
#include <linux/list.h>
#include <linux/math.h>
#include <linux/rculist.h>
#include <linux/rculist_bl.h>
#include <linux/spinlock.h>
#include <linux/seqlock.h>
#include <linux/cache.h>
#include <linux/rcupdate.h>
#include <linux/lockref.h>
#include <linux/stringhash.h>
#include <linux/wait.h>
struct path;
struct file;
struct vfsmount;
#define IS_ROOT(x) …
#ifdef __LITTLE_ENDIAN
#define HASH_LEN_DECLARE …
#define bytemask_from_count(cnt) …
#else
#define HASH_LEN_DECLARE …
#define bytemask_from_count …
#endif
struct qstr { … };
#define QSTR_INIT(n,l) …
extern const struct qstr empty_name;
extern const struct qstr slash_name;
extern const struct qstr dotdot_name;
#ifdef CONFIG_64BIT
#define DNAME_INLINE_LEN …
#else
# ifdef CONFIG_SMP
#define DNAME_INLINE_LEN …
# else
#define DNAME_INLINE_LEN …
# endif
#endif
#define d_lock …
struct dentry { … };
enum dentry_d_lock_class
{ … };
enum d_real_type { … };
struct dentry_operations { … } ____cacheline_aligned;
#define DCACHE_OP_HASH …
#define DCACHE_OP_COMPARE …
#define DCACHE_OP_REVALIDATE …
#define DCACHE_OP_DELETE …
#define DCACHE_OP_PRUNE …
#define DCACHE_DISCONNECTED …
#define DCACHE_REFERENCED …
#define DCACHE_DONTCACHE …
#define DCACHE_CANT_MOUNT …
#define DCACHE_GENOCIDE …
#define DCACHE_SHRINK_LIST …
#define DCACHE_OP_WEAK_REVALIDATE …
#define DCACHE_NFSFS_RENAMED …
#define DCACHE_FSNOTIFY_PARENT_WATCHED …
#define DCACHE_DENTRY_KILLED …
#define DCACHE_MOUNTED …
#define DCACHE_NEED_AUTOMOUNT …
#define DCACHE_MANAGE_TRANSIT …
#define DCACHE_MANAGED_DENTRY …
#define DCACHE_LRU_LIST …
#define DCACHE_ENTRY_TYPE …
#define DCACHE_MISS_TYPE …
#define DCACHE_WHITEOUT_TYPE …
#define DCACHE_DIRECTORY_TYPE …
#define DCACHE_AUTODIR_TYPE …
#define DCACHE_REGULAR_TYPE …
#define DCACHE_SPECIAL_TYPE …
#define DCACHE_SYMLINK_TYPE …
#define DCACHE_NOKEY_NAME …
#define DCACHE_OP_REAL …
#define DCACHE_PAR_LOOKUP …
#define DCACHE_DENTRY_CURSOR …
#define DCACHE_NORCU …
extern seqlock_t rename_lock;
extern void d_instantiate(struct dentry *, struct inode *);
extern void d_instantiate_new(struct dentry *, struct inode *);
extern void __d_drop(struct dentry *dentry);
extern void d_drop(struct dentry *dentry);
extern void d_delete(struct dentry *);
extern void d_set_d_op(struct dentry *dentry, const struct dentry_operations *op);
extern struct dentry * d_alloc(struct dentry *, const struct qstr *);
extern struct dentry * d_alloc_anon(struct super_block *);
extern struct dentry * d_alloc_parallel(struct dentry *, const struct qstr *,
wait_queue_head_t *);
extern struct dentry * d_splice_alias(struct inode *, struct dentry *);
extern struct dentry * d_add_ci(struct dentry *, struct inode *, struct qstr *);
extern bool d_same_name(const struct dentry *dentry, const struct dentry *parent,
const struct qstr *name);
extern struct dentry * d_exact_alias(struct dentry *, struct inode *);
extern struct dentry *d_find_any_alias(struct inode *inode);
extern struct dentry * d_obtain_alias(struct inode *);
extern struct dentry * d_obtain_root(struct inode *);
extern void shrink_dcache_sb(struct super_block *);
extern void shrink_dcache_parent(struct dentry *);
extern void d_invalidate(struct dentry *);
extern struct dentry * d_make_root(struct inode *);
extern void d_mark_tmpfile(struct file *, struct inode *);
extern void d_tmpfile(struct file *, struct inode *);
extern struct dentry *d_find_alias(struct inode *);
extern void d_prune_aliases(struct inode *);
extern struct dentry *d_find_alias_rcu(struct inode *);
extern int path_has_submounts(const struct path *);
extern void d_rehash(struct dentry *);
extern void d_add(struct dentry *, struct inode *);
extern void d_move(struct dentry *, struct dentry *);
extern void d_exchange(struct dentry *, struct dentry *);
extern struct dentry *d_ancestor(struct dentry *, struct dentry *);
extern struct dentry *d_lookup(const struct dentry *, const struct qstr *);
extern struct dentry *d_hash_and_lookup(struct dentry *, struct qstr *);
static inline unsigned d_count(const struct dentry *dentry)
{ … }
ino_t d_parent_ino(struct dentry *dentry);
extern __printf(3, 4)
char *dynamic_dname(char *, int, const char *, ...);
extern char *__d_path(const struct path *, const struct path *, char *, int);
extern char *d_absolute_path(const struct path *, char *, int);
extern char *d_path(const struct path *, char *, int);
extern char *dentry_path_raw(const struct dentry *, char *, int);
extern char *dentry_path(const struct dentry *, char *, int);
static inline struct dentry *dget_dlock(struct dentry *dentry)
{ … }
static inline struct dentry *dget(struct dentry *dentry)
{ … }
extern struct dentry *dget_parent(struct dentry *dentry);
static inline int d_unhashed(const struct dentry *dentry)
{ … }
static inline int d_unlinked(const struct dentry *dentry)
{ … }
static inline int cant_mount(const struct dentry *dentry)
{ … }
static inline void dont_mount(struct dentry *dentry)
{ … }
extern void __d_lookup_unhash_wake(struct dentry *dentry);
static inline int d_in_lookup(const struct dentry *dentry)
{ … }
static inline void d_lookup_done(struct dentry *dentry)
{ … }
extern void dput(struct dentry *);
static inline bool d_managed(const struct dentry *dentry)
{ … }
static inline bool d_mountpoint(const struct dentry *dentry)
{ … }
static inline unsigned __d_entry_type(const struct dentry *dentry)
{ … }
static inline bool d_is_miss(const struct dentry *dentry)
{ … }
static inline bool d_is_whiteout(const struct dentry *dentry)
{ … }
static inline bool d_can_lookup(const struct dentry *dentry)
{ … }
static inline bool d_is_autodir(const struct dentry *dentry)
{ … }
static inline bool d_is_dir(const struct dentry *dentry)
{ … }
static inline bool d_is_symlink(const struct dentry *dentry)
{ … }
static inline bool d_is_reg(const struct dentry *dentry)
{ … }
static inline bool d_is_special(const struct dentry *dentry)
{ … }
static inline bool d_is_file(const struct dentry *dentry)
{ … }
static inline bool d_is_negative(const struct dentry *dentry)
{ … }
static inline bool d_flags_negative(unsigned flags)
{ … }
static inline bool d_is_positive(const struct dentry *dentry)
{ … }
static inline bool d_really_is_negative(const struct dentry *dentry)
{ … }
static inline bool d_really_is_positive(const struct dentry *dentry)
{ … }
static inline int simple_positive(const struct dentry *dentry)
{ … }
extern int sysctl_vfs_cache_pressure;
static inline unsigned long vfs_pressure_ratio(unsigned long val)
{ … }
static inline struct inode *d_inode(const struct dentry *dentry)
{ … }
static inline struct inode *d_inode_rcu(const struct dentry *dentry)
{ … }
static inline struct inode *d_backing_inode(const struct dentry *upper)
{ … }
static inline struct dentry *d_real(struct dentry *dentry, enum d_real_type type)
{ … }
static inline struct inode *d_real_inode(const struct dentry *dentry)
{ … }
struct name_snapshot { … };
void take_dentry_name_snapshot(struct name_snapshot *, struct dentry *);
void release_dentry_name_snapshot(struct name_snapshot *);
static inline struct dentry *d_first_child(const struct dentry *dentry)
{ … }
static inline struct dentry *d_next_sibling(const struct dentry *dentry)
{ … }
#endif