| .. | .. | 
|---|
| 63 | 63 | struct dentry_stat_t { | 
|---|
| 64 | 64 | long nr_dentry; | 
|---|
| 65 | 65 | long nr_unused; | 
|---|
| 66 |  | -	long age_limit;          /* age in seconds */ | 
|---|
| 67 |  | -	long want_pages;         /* pages requested by system */ | 
|---|
| 68 |  | -	long dummy[2]; | 
|---|
|  | 66 | +	long age_limit;		/* age in seconds */ | 
|---|
|  | 67 | +	long want_pages;	/* pages requested by system */ | 
|---|
|  | 68 | +	long nr_negative;	/* # of unused negative dentries */ | 
|---|
|  | 69 | +	long dummy;		/* Reserved for future use */ | 
|---|
| 69 | 70 | }; | 
|---|
| 70 | 71 | extern struct dentry_stat_t dentry_stat; | 
|---|
| 71 | 72 |  | 
|---|
| .. | .. | 
|---|
| 89 | 90 | struct dentry { | 
|---|
| 90 | 91 | /* RCU lookup touched fields */ | 
|---|
| 91 | 92 | unsigned int d_flags;		/* protected by d_lock */ | 
|---|
| 92 |  | -	seqcount_t d_seq;		/* per dentry seqlock */ | 
|---|
|  | 93 | +	seqcount_spinlock_t d_seq;	/* per dentry seqlock */ | 
|---|
| 93 | 94 | struct hlist_bl_node d_hash;	/* lookup hash list */ | 
|---|
| 94 | 95 | struct dentry *d_parent;	/* parent directory */ | 
|---|
| 95 | 96 | struct qstr d_name; | 
|---|
| .. | .. | 
|---|
| 106 | 107 |  | 
|---|
| 107 | 108 | union { | 
|---|
| 108 | 109 | struct list_head d_lru;		/* LRU list */ | 
|---|
| 109 |  | -		struct swait_queue_head *d_wait;	/* in-lookup ones only */ | 
|---|
|  | 110 | +		wait_queue_head_t *d_wait;	/* in-lookup ones only */ | 
|---|
| 110 | 111 | }; | 
|---|
| 111 | 112 | struct list_head d_child;	/* child of parent list */ | 
|---|
| 112 | 113 | struct list_head d_subdirs;	/* our children */ | 
|---|
| .. | .. | 
|---|
| 150 | 151 | struct vfsmount *(*d_automount)(struct path *); | 
|---|
| 151 | 152 | int (*d_manage)(const struct path *, bool); | 
|---|
| 152 | 153 | struct dentry *(*d_real)(struct dentry *, const struct inode *); | 
|---|
| 153 |  | - | 
|---|
| 154 |  | -	ANDROID_KABI_USE(1, void (*d_canonical_path)(const struct path *, | 
|---|
| 155 |  | -						     struct path *)); | 
|---|
|  | 154 | +	void (*d_canonical_path)(const struct path *, struct path *); | 
|---|
|  | 155 | +	ANDROID_KABI_RESERVE(1); | 
|---|
| 156 | 156 | ANDROID_KABI_RESERVE(2); | 
|---|
| 157 | 157 | ANDROID_KABI_RESERVE(3); | 
|---|
| 158 | 158 | ANDROID_KABI_RESERVE(4); | 
|---|
| .. | .. | 
|---|
| 160 | 160 |  | 
|---|
| 161 | 161 | /* | 
|---|
| 162 | 162 | * Locking rules for dentry_operations callbacks are to be found in | 
|---|
| 163 |  | - * Documentation/filesystems/Locking. Keep it updated! | 
|---|
|  | 163 | + * Documentation/filesystems/locking.rst. Keep it updated! | 
|---|
| 164 | 164 | * | 
|---|
| 165 |  | - * FUrther descriptions are found in Documentation/filesystems/vfs.txt. | 
|---|
|  | 165 | + * FUrther descriptions are found in Documentation/filesystems/vfs.rst. | 
|---|
| 166 | 166 | * Keep it updated too! | 
|---|
| 167 | 167 | */ | 
|---|
| 168 | 168 |  | 
|---|
| .. | .. | 
|---|
| 185 | 185 | * typically using d_splice_alias. */ | 
|---|
| 186 | 186 |  | 
|---|
| 187 | 187 | #define DCACHE_REFERENCED		0x00000040 /* Recently used, don't discard. */ | 
|---|
|  | 188 | + | 
|---|
|  | 189 | +#define DCACHE_DONTCACHE		0x00000080 /* Purge from memory on final dput() */ | 
|---|
| 188 | 190 |  | 
|---|
| 189 | 191 | #define DCACHE_CANT_MOUNT		0x00000100 | 
|---|
| 190 | 192 | #define DCACHE_GENOCIDE			0x00000200 | 
|---|
| .. | .. | 
|---|
| 220 | 222 |  | 
|---|
| 221 | 223 | #define DCACHE_MAY_FREE			0x00800000 | 
|---|
| 222 | 224 | #define DCACHE_FALLTHRU			0x01000000 /* Fall through to lower layer */ | 
|---|
| 223 |  | -#define DCACHE_ENCRYPTED_NAME		0x02000000 /* Encrypted name (dir key was unavailable) */ | 
|---|
|  | 225 | +#define DCACHE_NOKEY_NAME		0x02000000 /* Encrypted name encoded without key */ | 
|---|
| 224 | 226 | #define DCACHE_OP_REAL			0x04000000 | 
|---|
| 225 | 227 |  | 
|---|
| 226 | 228 | #define DCACHE_PAR_LOOKUP		0x10000000 /* being looked up (with parent locked shared) */ | 
|---|
| .. | .. | 
|---|
| 244 | 246 | /* allocate/de-allocate */ | 
|---|
| 245 | 247 | extern struct dentry * d_alloc(struct dentry *, const struct qstr *); | 
|---|
| 246 | 248 | extern struct dentry * d_alloc_anon(struct super_block *); | 
|---|
| 247 |  | -extern struct dentry * d_alloc_pseudo(struct super_block *, const struct qstr *); | 
|---|
| 248 | 249 | extern struct dentry * d_alloc_parallel(struct dentry *, const struct qstr *, | 
|---|
| 249 |  | -					struct swait_queue_head *); | 
|---|
|  | 250 | +					wait_queue_head_t *); | 
|---|
| 250 | 251 | extern struct dentry * d_splice_alias(struct inode *, struct dentry *); | 
|---|
| 251 | 252 | extern struct dentry * d_add_ci(struct dentry *, struct inode *, struct qstr *); | 
|---|
| 252 | 253 | extern struct dentry * d_exact_alias(struct dentry *, struct inode *); | 
|---|
| .. | .. | 
|---|
| 301 | 302 | */ | 
|---|
| 302 | 303 | extern __printf(4, 5) | 
|---|
| 303 | 304 | char *dynamic_dname(struct dentry *, char *, int, const char *, ...); | 
|---|
| 304 |  | -extern char *simple_dname(struct dentry *, char *, int); | 
|---|
| 305 | 305 |  | 
|---|
| 306 | 306 | extern char *__d_path(const struct path *, const struct path *, char *, int); | 
|---|
| 307 | 307 | extern char *d_absolute_path(const struct path *, char *, int); | 
|---|
| .. | .. | 
|---|
| 451 | 451 | return d_is_miss(dentry); | 
|---|
| 452 | 452 | } | 
|---|
| 453 | 453 |  | 
|---|
|  | 454 | +static inline bool d_flags_negative(unsigned flags) | 
|---|
|  | 455 | +{ | 
|---|
|  | 456 | +	return (flags & DCACHE_ENTRY_TYPE) == DCACHE_MISS_TYPE; | 
|---|
|  | 457 | +} | 
|---|
|  | 458 | + | 
|---|
| 454 | 459 | static inline bool d_is_positive(const struct dentry *dentry) | 
|---|
| 455 | 460 | { | 
|---|
| 456 | 461 | return !d_is_negative(dentry); | 
|---|
| .. | .. | 
|---|
| 578 | 583 | * If dentry is on a union/overlay, then return the underlying, real dentry. | 
|---|
| 579 | 584 | * Otherwise return the dentry itself. | 
|---|
| 580 | 585 | * | 
|---|
| 581 |  | - * See also: Documentation/filesystems/vfs.txt | 
|---|
|  | 586 | + * See also: Documentation/filesystems/vfs.rst | 
|---|
| 582 | 587 | */ | 
|---|
| 583 | 588 | static inline struct dentry *d_real(struct dentry *dentry, | 
|---|
| 584 | 589 | const struct inode *inode) | 
|---|
| .. | .. | 
|---|
| 603 | 608 | } | 
|---|
| 604 | 609 |  | 
|---|
| 605 | 610 | struct name_snapshot { | 
|---|
| 606 |  | -	const unsigned char *name; | 
|---|
|  | 611 | +	struct qstr name; | 
|---|
| 607 | 612 | unsigned char inline_name[DNAME_INLINE_LEN]; | 
|---|
| 608 | 613 | }; | 
|---|
| 609 | 614 | void take_dentry_name_snapshot(struct name_snapshot *, struct dentry *); | 
|---|