~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/fs/dcache.c

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /fs/dcache.c (Version linux-6.12-rc7) and /fs/dcache.c (Version linux-4.19.322)


** Warning: Cannot open xref database.

  1 // SPDX-License-Identifier: GPL-2.0-only            1 
  2 /*                                                
  3  * fs/dcache.c                                    
  4  *                                                
  5  * Complete reimplementation                      
  6  * (C) 1997 Thomas Schoebel-Theuer,               
  7  * with heavy changes by Linus Torvalds           
  8  */                                               
  9                                                   
 10 /*                                                
 11  * Notes on the allocation strategy:              
 12  *                                                
 13  * The dcache is a master of the icache - when    
 14  * exists, the inode will always exist. "iput(    
 15  * the dcache entry is deleted or garbage coll    
 16  */                                               
 17                                                   
 18 #include <linux/ratelimit.h>                      
 19 #include <linux/string.h>                         
 20 #include <linux/mm.h>                             
 21 #include <linux/fs.h>                             
 22 #include <linux/fscrypt.h>                        
 23 #include <linux/fsnotify.h>                       
 24 #include <linux/slab.h>                           
 25 #include <linux/init.h>                           
 26 #include <linux/hash.h>                           
 27 #include <linux/cache.h>                          
 28 #include <linux/export.h>                         
 29 #include <linux/security.h>                       
 30 #include <linux/seqlock.h>                        
 31 #include <linux/memblock.h>                       
 32 #include <linux/bit_spinlock.h>                   
 33 #include <linux/rculist_bl.h>                     
 34 #include <linux/list_lru.h>                       
 35 #include "internal.h"                             
 36 #include "mount.h"                                
 37                                                   
 38 #include <asm/runtime-const.h>                    
 39                                                   
 40 /*                                                
 41  * Usage:                                         
 42  * dcache->d_inode->i_lock protects:              
 43  *   - i_dentry, d_u.d_alias, d_inode of alias    
 44  * dcache_hash_bucket lock protects:              
 45  *   - the dcache hash table                      
 46  * s_roots bl list spinlock protects:             
 47  *   - the s_roots list (see __d_drop)            
 48  * dentry->d_sb->s_dentry_lru_lock protects:      
 49  *   - the dcache lru lists and counters          
 50  * d_lock protects:                               
 51  *   - d_flags                                    
 52  *   - d_name                                     
 53  *   - d_lru                                      
 54  *   - d_count                                    
 55  *   - d_unhashed()                               
 56  *   - d_parent and d_chilren                     
 57  *   - childrens' d_sib and d_parent              
 58  *   - d_u.d_alias, d_inode                       
 59  *                                                
 60  * Ordering:                                      
 61  * dentry->d_inode->i_lock                        
 62  *   dentry->d_lock                               
 63  *     dentry->d_sb->s_dentry_lru_lock            
 64  *     dcache_hash_bucket lock                    
 65  *     s_roots lock                               
 66  *                                                
 67  * If there is an ancestor relationship:          
 68  * dentry->d_parent->...->d_parent->d_lock        
 69  *   ...                                          
 70  *     dentry->d_parent->d_lock                   
 71  *       dentry->d_lock                           
 72  *                                                
 73  * If no ancestor relationship:                   
 74  * arbitrary, since it's serialized on rename_    
 75  */                                               
 76 int sysctl_vfs_cache_pressure __read_mostly =     
 77 EXPORT_SYMBOL_GPL(sysctl_vfs_cache_pressure);     
 78                                                   
 79 __cacheline_aligned_in_smp DEFINE_SEQLOCK(rena    
 80                                                   
 81 EXPORT_SYMBOL(rename_lock);                       
 82                                                   
 83 static struct kmem_cache *dentry_cache __ro_af    
 84                                                   
 85 const struct qstr empty_name = QSTR_INIT("", 0    
 86 EXPORT_SYMBOL(empty_name);                        
 87 const struct qstr slash_name = QSTR_INIT("/",     
 88 EXPORT_SYMBOL(slash_name);                        
 89 const struct qstr dotdot_name = QSTR_INIT(".."    
 90 EXPORT_SYMBOL(dotdot_name);                       
 91                                                   
 92 /*                                                
 93  * This is the single most critical data struc    
 94  * to the dcache: the hashtable for lookups. S    
 95  * to make this good - I've just made it work.    
 96  *                                                
 97  * This hash-function tries to avoid losing to    
 98  * information, yet avoid using a prime hash-s    
 99  *                                                
100  * Marking the variables "used" ensures that t    
101  * optimize them away completely on architectu    
102  * constant infrastructure, this allows debugg    
103  * values. But updating these values has no ef    
104  */                                               
105                                                   
106 static unsigned int d_hash_shift __ro_after_in    
107                                                   
108 static struct hlist_bl_head *dentry_hashtable     
109                                                   
110 static inline struct hlist_bl_head *d_hash(uns    
111 {                                                 
112         return runtime_const_ptr(dentry_hashta    
113                 runtime_const_shift_right_32(h    
114 }                                                 
115                                                   
116 #define IN_LOOKUP_SHIFT 10                        
117 static struct hlist_bl_head in_lookup_hashtabl    
118                                                   
119 static inline struct hlist_bl_head *in_lookup_    
120                                         unsign    
121 {                                                 
122         hash += (unsigned long) parent / L1_CA    
123         return in_lookup_hashtable + hash_32(h    
124 }                                                 
125                                                   
126 struct dentry_stat_t {                            
127         long nr_dentry;                           
128         long nr_unused;                           
129         long age_limit;         /* age in seco    
130         long want_pages;        /* pages reque    
131         long nr_negative;       /* # of unused    
132         long dummy;             /* Reserved fo    
133 };                                                
134                                                   
135 static DEFINE_PER_CPU(long, nr_dentry);           
136 static DEFINE_PER_CPU(long, nr_dentry_unused);    
137 static DEFINE_PER_CPU(long, nr_dentry_negative    
138                                                   
139 #if defined(CONFIG_SYSCTL) && defined(CONFIG_P    
140 /* Statistics gathering. */                       
141 static struct dentry_stat_t dentry_stat = {       
142         .age_limit = 45,                          
143 };                                                
144                                                   
145 /*                                                
146  * Here we resort to our own counters instead     
147  * for consistency with what the vfs inode cod    
148  * better code and performance by having our o    
149  *                                                
150  * Please note that the loop is done over all     
151  * CPUs. The reason for this is that we don't     
152  * on and off. If one of them goes off, we wil    
153  *                                                
154  * glommer: See cffbc8a for details, and if yo    
155  * please update all vfs counters to match.       
156  */                                               
157 static long get_nr_dentry(void)                   
158 {                                                 
159         int i;                                    
160         long sum = 0;                             
161         for_each_possible_cpu(i)                  
162                 sum += per_cpu(nr_dentry, i);     
163         return sum < 0 ? 0 : sum;                 
164 }                                                 
165                                                   
166 static long get_nr_dentry_unused(void)            
167 {                                                 
168         int i;                                    
169         long sum = 0;                             
170         for_each_possible_cpu(i)                  
171                 sum += per_cpu(nr_dentry_unuse    
172         return sum < 0 ? 0 : sum;                 
173 }                                                 
174                                                   
175 static long get_nr_dentry_negative(void)          
176 {                                                 
177         int i;                                    
178         long sum = 0;                             
179                                                   
180         for_each_possible_cpu(i)                  
181                 sum += per_cpu(nr_dentry_negat    
182         return sum < 0 ? 0 : sum;                 
183 }                                                 
184                                                   
185 static int proc_nr_dentry(const struct ctl_tab    
186                           size_t *lenp, loff_t    
187 {                                                 
188         dentry_stat.nr_dentry = get_nr_dentry(    
189         dentry_stat.nr_unused = get_nr_dentry_    
190         dentry_stat.nr_negative = get_nr_dentr    
191         return proc_doulongvec_minmax(table, w    
192 }                                                 
193                                                   
194 static struct ctl_table fs_dcache_sysctls[] =     
195         {                                         
196                 .procname       = "dentry-stat    
197                 .data           = &dentry_stat    
198                 .maxlen         = 6*sizeof(lon    
199                 .mode           = 0444,           
200                 .proc_handler   = proc_nr_dent    
201         },                                        
202 };                                                
203                                                   
204 static int __init init_fs_dcache_sysctls(void)    
205 {                                                 
206         register_sysctl_init("fs", fs_dcache_s    
207         return 0;                                 
208 }                                                 
209 fs_initcall(init_fs_dcache_sysctls);              
210 #endif                                            
211                                                   
212 /*                                                
213  * Compare 2 name strings, return 0 if they ma    
214  * The strings are both count bytes long, and     
215  */                                               
216 #ifdef CONFIG_DCACHE_WORD_ACCESS                  
217                                                   
218 #include <asm/word-at-a-time.h>                   
219 /*                                                
220  * NOTE! 'cs' and 'scount' come from a dentry,    
221  * aligned allocation for this particular comp    
222  * strictly need the load_unaligned_zeropad()     
223  * doesn't hurt either.                           
224  *                                                
225  * In contrast, 'ct' and 'tcount' can be from     
226  * need the careful unaligned handling.           
227  */                                               
228 static inline int dentry_string_cmp(const unsi    
229 {                                                 
230         unsigned long a,b,mask;                   
231                                                   
232         for (;;) {                                
233                 a = read_word_at_a_time(cs);      
234                 b = load_unaligned_zeropad(ct)    
235                 if (tcount < sizeof(unsigned l    
236                         break;                    
237                 if (unlikely(a != b))             
238                         return 1;                 
239                 cs += sizeof(unsigned long);      
240                 ct += sizeof(unsigned long);      
241                 tcount -= sizeof(unsigned long    
242                 if (!tcount)                      
243                         return 0;                 
244         }                                         
245         mask = bytemask_from_count(tcount);       
246         return unlikely(!!((a ^ b) & mask));      
247 }                                                 
248                                                   
249 #else                                             
250                                                   
251 static inline int dentry_string_cmp(const unsi    
252 {                                                 
253         do {                                      
254                 if (*cs != *ct)                   
255                         return 1;                 
256                 cs++;                             
257                 ct++;                             
258                 tcount--;                         
259         } while (tcount);                         
260         return 0;                                 
261 }                                                 
262                                                   
263 #endif                                            
264                                                   
265 static inline int dentry_cmp(const struct dent    
266 {                                                 
267         /*                                        
268          * Be careful about RCU walk racing wi    
269          * use 'READ_ONCE' to fetch the name p    
270          *                                        
271          * NOTE! Even if a rename will mean th    
272          * was not loaded atomically, we don't    
273          * RCU walk will check the sequence co    
274          * and catch it. And we won't overrun     
275          * because we're reading the name poin    
276          * and a dentry name is guaranteed to     
277          * terminated with a NUL byte.            
278          *                                        
279          * End result: even if 'len' is wrong,    
280          * early because the data cannot match    
281          * be no NUL in the ct/tcount data)       
282          */                                       
283         const unsigned char *cs = READ_ONCE(de    
284                                                   
285         return dentry_string_cmp(cs, ct, tcoun    
286 }                                                 
287                                                   
288 struct external_name {                            
289         union {                                   
290                 atomic_t count;                   
291                 struct rcu_head head;             
292         } u;                                      
293         unsigned char name[];                     
294 };                                                
295                                                   
296 static inline struct external_name *external_n    
297 {                                                 
298         return container_of(dentry->d_name.nam    
299 }                                                 
300                                                   
301 static void __d_free(struct rcu_head *head)       
302 {                                                 
303         struct dentry *dentry = container_of(h    
304                                                   
305         kmem_cache_free(dentry_cache, dentry);    
306 }                                                 
307                                                   
308 static void __d_free_external(struct rcu_head     
309 {                                                 
310         struct dentry *dentry = container_of(h    
311         kfree(external_name(dentry));             
312         kmem_cache_free(dentry_cache, dentry);    
313 }                                                 
314                                                   
315 static inline int dname_external(const struct     
316 {                                                 
317         return dentry->d_name.name != dentry->    
318 }                                                 
319                                                   
320 void take_dentry_name_snapshot(struct name_sna    
321 {                                                 
322         spin_lock(&dentry->d_lock);               
323         name->name = dentry->d_name;              
324         if (unlikely(dname_external(dentry)))     
325                 atomic_inc(&external_name(dent    
326         } else {                                  
327                 memcpy(name->inline_name, dent    
328                        dentry->d_name.len + 1)    
329                 name->name.name = name->inline    
330         }                                         
331         spin_unlock(&dentry->d_lock);             
332 }                                                 
333 EXPORT_SYMBOL(take_dentry_name_snapshot);         
334                                                   
335 void release_dentry_name_snapshot(struct name_    
336 {                                                 
337         if (unlikely(name->name.name != name->    
338                 struct external_name *p;          
339                 p = container_of(name->name.na    
340                 if (unlikely(atomic_dec_and_te    
341                         kfree_rcu(p, u.head);     
342         }                                         
343 }                                                 
344 EXPORT_SYMBOL(release_dentry_name_snapshot);      
345                                                   
346 static inline void __d_set_inode_and_type(stru    
347                                           stru    
348                                           unsi    
349 {                                                 
350         unsigned flags;                           
351                                                   
352         dentry->d_inode = inode;                  
353         flags = READ_ONCE(dentry->d_flags);       
354         flags &= ~DCACHE_ENTRY_TYPE;              
355         flags |= type_flags;                      
356         smp_store_release(&dentry->d_flags, fl    
357 }                                                 
358                                                   
359 static inline void __d_clear_type_and_inode(st    
360 {                                                 
361         unsigned flags = READ_ONCE(dentry->d_f    
362                                                   
363         flags &= ~DCACHE_ENTRY_TYPE;              
364         WRITE_ONCE(dentry->d_flags, flags);       
365         dentry->d_inode = NULL;                   
366         /*                                        
367          * The negative counter only tracks de    
368          * d_lru is on another list.              
369          */                                       
370         if ((flags & (DCACHE_LRU_LIST|DCACHE_S    
371                 this_cpu_inc(nr_dentry_negativ    
372 }                                                 
373                                                   
374 static void dentry_free(struct dentry *dentry)    
375 {                                                 
376         WARN_ON(!hlist_unhashed(&dentry->d_u.d    
377         if (unlikely(dname_external(dentry)))     
378                 struct external_name *p = exte    
379                 if (likely(atomic_dec_and_test    
380                         call_rcu(&dentry->d_u.    
381                         return;                   
382                 }                                 
383         }                                         
384         /* if dentry was never visible to RCU,    
385         if (dentry->d_flags & DCACHE_NORCU)       
386                 __d_free(&dentry->d_u.d_rcu);     
387         else                                      
388                 call_rcu(&dentry->d_u.d_rcu, _    
389 }                                                 
390                                                   
391 /*                                                
392  * Release the dentry's inode, using the files    
393  * d_iput() operation if defined.                 
394  */                                               
395 static void dentry_unlink_inode(struct dentry     
396         __releases(dentry->d_lock)                
397         __releases(dentry->d_inode->i_lock)       
398 {                                                 
399         struct inode *inode = dentry->d_inode;    
400                                                   
401         raw_write_seqcount_begin(&dentry->d_se    
402         __d_clear_type_and_inode(dentry);         
403         hlist_del_init(&dentry->d_u.d_alias);     
404         raw_write_seqcount_end(&dentry->d_seq)    
405         spin_unlock(&dentry->d_lock);             
406         spin_unlock(&inode->i_lock);              
407         if (!inode->i_nlink)                      
408                 fsnotify_inoderemove(inode);      
409         if (dentry->d_op && dentry->d_op->d_ip    
410                 dentry->d_op->d_iput(dentry, i    
411         else                                      
412                 iput(inode);                      
413 }                                                 
414                                                   
415 /*                                                
416  * The DCACHE_LRU_LIST bit is set whenever the    
417  * is in use - which includes both the "real"     
418  * LRU list _and_ the DCACHE_SHRINK_LIST use.     
419  *                                                
420  * The DCACHE_SHRINK_LIST bit is set whenever     
421  * on the shrink list (ie not on the superbloc    
422  *                                                
423  * The per-cpu "nr_dentry_unused" counters are    
424  * the DCACHE_LRU_LIST bit.                       
425  *                                                
426  * The per-cpu "nr_dentry_negative" counters a    
427  * when deleted from or added to the per-super    
428  * from/to the shrink list. That is to avoid a    
429  * pair when moving from LRU to shrink list in    
430  *                                                
431  * These helper functions make sure we always     
432  * rules. d_lock must be held by the caller.      
433  */                                               
434 #define D_FLAG_VERIFY(dentry,x) WARN_ON_ONCE((    
435 static void d_lru_add(struct dentry *dentry)      
436 {                                                 
437         D_FLAG_VERIFY(dentry, 0);                 
438         dentry->d_flags |= DCACHE_LRU_LIST;       
439         this_cpu_inc(nr_dentry_unused);           
440         if (d_is_negative(dentry))                
441                 this_cpu_inc(nr_dentry_negativ    
442         WARN_ON_ONCE(!list_lru_add_obj(           
443                         &dentry->d_sb->s_dentr    
444 }                                                 
445                                                   
446 static void d_lru_del(struct dentry *dentry)      
447 {                                                 
448         D_FLAG_VERIFY(dentry, DCACHE_LRU_LIST)    
449         dentry->d_flags &= ~DCACHE_LRU_LIST;      
450         this_cpu_dec(nr_dentry_unused);           
451         if (d_is_negative(dentry))                
452                 this_cpu_dec(nr_dentry_negativ    
453         WARN_ON_ONCE(!list_lru_del_obj(           
454                         &dentry->d_sb->s_dentr    
455 }                                                 
456                                                   
457 static void d_shrink_del(struct dentry *dentry    
458 {                                                 
459         D_FLAG_VERIFY(dentry, DCACHE_SHRINK_LI    
460         list_del_init(&dentry->d_lru);            
461         dentry->d_flags &= ~(DCACHE_SHRINK_LIS    
462         this_cpu_dec(nr_dentry_unused);           
463 }                                                 
464                                                   
465 static void d_shrink_add(struct dentry *dentry    
466 {                                                 
467         D_FLAG_VERIFY(dentry, 0);                 
468         list_add(&dentry->d_lru, list);           
469         dentry->d_flags |= DCACHE_SHRINK_LIST     
470         this_cpu_inc(nr_dentry_unused);           
471 }                                                 
472                                                   
473 /*                                                
474  * These can only be called under the global L    
475  * callback for freeing the LRU list. "isolate    
476  * LRU lists entirely, while shrink_move moves    
477  * private list.                                  
478  */                                               
479 static void d_lru_isolate(struct list_lru_one     
480 {                                                 
481         D_FLAG_VERIFY(dentry, DCACHE_LRU_LIST)    
482         dentry->d_flags &= ~DCACHE_LRU_LIST;      
483         this_cpu_dec(nr_dentry_unused);           
484         if (d_is_negative(dentry))                
485                 this_cpu_dec(nr_dentry_negativ    
486         list_lru_isolate(lru, &dentry->d_lru);    
487 }                                                 
488                                                   
489 static void d_lru_shrink_move(struct list_lru_    
490                               struct list_head    
491 {                                                 
492         D_FLAG_VERIFY(dentry, DCACHE_LRU_LIST)    
493         dentry->d_flags |= DCACHE_SHRINK_LIST;    
494         if (d_is_negative(dentry))                
495                 this_cpu_dec(nr_dentry_negativ    
496         list_lru_isolate_move(lru, &dentry->d_    
497 }                                                 
498                                                   
499 static void ___d_drop(struct dentry *dentry)      
500 {                                                 
501         struct hlist_bl_head *b;                  
502         /*                                        
503          * Hashed dentries are normally on the    
504          * with the exception of those newly a    
505          * d_obtain_root, which are always IS_    
506          */                                       
507         if (unlikely(IS_ROOT(dentry)))            
508                 b = &dentry->d_sb->s_roots;       
509         else                                      
510                 b = d_hash(dentry->d_name.hash    
511                                                   
512         hlist_bl_lock(b);                         
513         __hlist_bl_del(&dentry->d_hash);          
514         hlist_bl_unlock(b);                       
515 }                                                 
516                                                   
517 void __d_drop(struct dentry *dentry)              
518 {                                                 
519         if (!d_unhashed(dentry)) {                
520                 ___d_drop(dentry);                
521                 dentry->d_hash.pprev = NULL;      
522                 write_seqcount_invalidate(&den    
523         }                                         
524 }                                                 
525 EXPORT_SYMBOL(__d_drop);                          
526                                                   
527 /**                                               
528  * d_drop - drop a dentry                         
529  * @dentry: dentry to drop                        
530  *                                                
531  * d_drop() unhashes the entry from the parent    
532  * be found through a VFS lookup any more. Not    
533  * deleting the dentry - d_delete will try to     
534  * possible, giving a successful _negative_ lo    
535  * just make the cache lookup fail.               
536  *                                                
537  * d_drop() is used mainly for stuff that want    
538  * reason (NFS timeouts or autofs deletes).       
539  *                                                
540  * __d_drop requires dentry->d_lock               
541  *                                                
542  * ___d_drop doesn't mark dentry as "unhashed"    
543  * (dentry->d_hash.pprev will be LIST_POISON2,    
544  */                                               
545 void d_drop(struct dentry *dentry)                
546 {                                                 
547         spin_lock(&dentry->d_lock);               
548         __d_drop(dentry);                         
549         spin_unlock(&dentry->d_lock);             
550 }                                                 
551 EXPORT_SYMBOL(d_drop);                            
552                                                   
553 static inline void dentry_unlist(struct dentry    
554 {                                                 
555         struct dentry *next;                      
556         /*                                        
557          * Inform d_walk() and shrink_dentry_l    
558          * attached to the dentry tree            
559          */                                       
560         dentry->d_flags |= DCACHE_DENTRY_KILLE    
561         if (unlikely(hlist_unhashed(&dentry->d    
562                 return;                           
563         __hlist_del(&dentry->d_sib);              
564         /*                                        
565          * Cursors can move around the list of    
566          * a normal list member, it didn't mat    
567          * been updated.  However, from now on    
568          * things like d_walk() it might end u    
569          * Normally d_walk() doesn't care abou    
570          * ->d_lock on parent prevents that an    
571          * of its own, we get through it witho    
572          * There is one exception, though - if    
573          * gets killed as soon as we unlock it    
574          * using the value left in its ->d_sib    
575          * pointed to a cursor, and cursor got    
576          * before d_walk() regains parent->d_l    
577          * everything the cursor had been move    
578          *                                        
579          * Solution: make sure that the pointe    
580          * points to something that won't be m    
581          * cursors.                               
582          */                                       
583         while (dentry->d_sib.next) {              
584                 next = hlist_entry(dentry->d_s    
585                 if (likely(!(next->d_flags & D    
586                         break;                    
587                 dentry->d_sib.next = next->d_s    
588         }                                         
589 }                                                 
590                                                   
591 static struct dentry *__dentry_kill(struct den    
592 {                                                 
593         struct dentry *parent = NULL;             
594         bool can_free = true;                     
595                                                   
596         /*                                        
597          * The dentry is now unrecoverably dea    
598          */                                       
599         lockref_mark_dead(&dentry->d_lockref);    
600                                                   
601         /*                                        
602          * inform the fs via d_prune that this    
603          * unhashed and destroyed.                
604          */                                       
605         if (dentry->d_flags & DCACHE_OP_PRUNE)    
606                 dentry->d_op->d_prune(dentry);    
607                                                   
608         if (dentry->d_flags & DCACHE_LRU_LIST)    
609                 if (!(dentry->d_flags & DCACHE    
610                         d_lru_del(dentry);        
611         }                                         
612         /* if it was on the hash then remove i    
613         __d_drop(dentry);                         
614         if (dentry->d_inode)                      
615                 dentry_unlink_inode(dentry);      
616         else                                      
617                 spin_unlock(&dentry->d_lock);     
618         this_cpu_dec(nr_dentry);                  
619         if (dentry->d_op && dentry->d_op->d_re    
620                 dentry->d_op->d_release(dentry    
621                                                   
622         cond_resched();                           
623         /* now that it's negative, ->d_parent     
624         if (!IS_ROOT(dentry)) {                   
625                 parent = dentry->d_parent;        
626                 spin_lock(&parent->d_lock);       
627         }                                         
628         spin_lock_nested(&dentry->d_lock, DENT    
629         dentry_unlist(dentry);                    
630         if (dentry->d_flags & DCACHE_SHRINK_LI    
631                 can_free = false;                 
632         spin_unlock(&dentry->d_lock);             
633         if (likely(can_free))                     
634                 dentry_free(dentry);              
635         if (parent && --parent->d_lockref.coun    
636                 spin_unlock(&parent->d_lock);     
637                 return NULL;                      
638         }                                         
639         return parent;                            
640 }                                                 
641                                                   
642 /*                                                
643  * Lock a dentry for feeding it to __dentry_ki    
644  * Called under rcu_read_lock() and dentry->d_    
645  * guarantees that nothing we access will be f    
646  * Note that dentry is *not* protected from co    
647  * d_delete(), etc.                               
648  *                                                
649  * Return false if dentry is busy.  Otherwise,    
650  * that dentry's inode locked.                    
651  */                                               
652                                                   
653 static bool lock_for_kill(struct dentry *dentr    
654 {                                                 
655         struct inode *inode = dentry->d_inode;    
656                                                   
657         if (unlikely(dentry->d_lockref.count))    
658                 return false;                     
659                                                   
660         if (!inode || likely(spin_trylock(&ino    
661                 return true;                      
662                                                   
663         do {                                      
664                 spin_unlock(&dentry->d_lock);     
665                 spin_lock(&inode->i_lock);        
666                 spin_lock(&dentry->d_lock);       
667                 if (likely(inode == dentry->d_    
668                         break;                    
669                 spin_unlock(&inode->i_lock);      
670                 inode = dentry->d_inode;          
671         } while (inode);                          
672         if (likely(!dentry->d_lockref.count))     
673                 return true;                      
674         if (inode)                                
675                 spin_unlock(&inode->i_lock);      
676         return false;                             
677 }                                                 
678                                                   
679 /*                                                
680  * Decide if dentry is worth retaining.  Usual    
681  * locked; if not locked, we are more limited     
682  * without a lock.  False in this case means "    
683  *                                                
684  * In case we aren't locked, these predicates     
685  * sufficient that at some point after we drop    
686  * hashed and the flags had the proper value.     
687  * re-gotten a reference to the dentry and cha    
688  * we can leave the dentry around with a zero     
689  */                                               
690 static inline bool retain_dentry(struct dentry    
691 {                                                 
692         unsigned int d_flags;                     
693                                                   
694         smp_rmb();                                
695         d_flags = READ_ONCE(dentry->d_flags);     
696                                                   
697         // Unreachable? Nobody would be able t    
698         if (unlikely(d_unhashed(dentry)))         
699                 return false;                     
700                                                   
701         // Same if it's disconnected              
702         if (unlikely(d_flags & DCACHE_DISCONNE    
703                 return false;                     
704                                                   
705         // ->d_delete() might tell us not to b    
706         // ->d_lock; can't decide without it      
707         if (unlikely(d_flags & DCACHE_OP_DELET    
708                 if (!locked || dentry->d_op->d    
709                         return false;             
710         }                                         
711                                                   
712         // Explicitly told not to bother          
713         if (unlikely(d_flags & DCACHE_DONTCACH    
714                 return false;                     
715                                                   
716         // At this point it looks like we ough    
717         // need to do something - put it on LR    
718         // and mark it referenced if it was on    
719         // Unfortunately, both actions require    
720         // case we'd have to punt rather than     
721         if (unlikely(!(d_flags & DCACHE_LRU_LI    
722                 if (!locked)                      
723                         return false;             
724                 d_lru_add(dentry);                
725         } else if (unlikely(!(d_flags & DCACHE    
726                 if (!locked)                      
727                         return false;             
728                 dentry->d_flags |= DCACHE_REFE    
729         }                                         
730         return true;                              
731 }                                                 
732                                                   
733 void d_mark_dontcache(struct inode *inode)        
734 {                                                 
735         struct dentry *de;                        
736                                                   
737         spin_lock(&inode->i_lock);                
738         hlist_for_each_entry(de, &inode->i_den    
739                 spin_lock(&de->d_lock);           
740                 de->d_flags |= DCACHE_DONTCACH    
741                 spin_unlock(&de->d_lock);         
742         }                                         
743         inode->i_state |= I_DONTCACHE;            
744         spin_unlock(&inode->i_lock);              
745 }                                                 
746 EXPORT_SYMBOL(d_mark_dontcache);                  
747                                                   
748 /*                                                
749  * Try to do a lockless dput(), and return whe    
750  *                                                
751  * If unsuccessful, we return false, having al    
752  * In that case refcount is guaranteed to be z    
753  * decided that it's not worth keeping around.    
754  *                                                
755  * The caller needs to hold the RCU read lock,    
756  * guaranteed to stay around even if the refco    
757  */                                               
758 static inline bool fast_dput(struct dentry *de    
759 {                                                 
760         int ret;                                  
761                                                   
762         /*                                        
763          * try to decrement the lockref optimi    
764          */                                       
765         ret = lockref_put_return(&dentry->d_lo    
766                                                   
767         /*                                        
768          * If the lockref_put_return() failed     
769          * by somebody else, the fast path has    
770          * get the lock, and then check the co    
771          */                                       
772         if (unlikely(ret < 0)) {                  
773                 spin_lock(&dentry->d_lock);       
774                 if (WARN_ON_ONCE(dentry->d_loc    
775                         spin_unlock(&dentry->d    
776                         return true;              
777                 }                                 
778                 dentry->d_lockref.count--;        
779                 goto locked;                      
780         }                                         
781                                                   
782         /*                                        
783          * If we weren't the last ref, we're d    
784          */                                       
785         if (ret)                                  
786                 return true;                      
787                                                   
788         /*                                        
789          * Can we decide that decrement of ref    
790          * taking the lock?  There's a very co    
791          * dentry looks like it ought to be re    
792          * to do.                                 
793          */                                       
794         if (retain_dentry(dentry, false))         
795                 return true;                      
796                                                   
797         /*                                        
798          * Either not worth retaining or we ca    
799          * Get the lock, then.  We've already     
800          * but we'll need to re-check the situ    
801          */                                       
802         spin_lock(&dentry->d_lock);               
803                                                   
804         /*                                        
805          * Did somebody else grab a reference     
806          * we're no longer the last user after    
807          * else could have killed it and marke    
808          * don't need to do anything else.        
809          */                                       
810 locked:                                           
811         if (dentry->d_lockref.count || retain_    
812                 spin_unlock(&dentry->d_lock);     
813                 return true;                      
814         }                                         
815         return false;                             
816 }                                                 
817                                                   
818                                                   
819 /*                                                
820  * This is dput                                   
821  *                                                
822  * This is complicated by the fact that we do     
823  * dentries that are no longer on any hash cha    
824  * list: we'd much rather just get rid of them    
825  *                                                
826  * However, that implies that we have to trave    
827  * tree upwards to the parents which might _al    
828  * scheduled for deletion (it may have been on    
829  * its last child to go away).                    
830  *                                                
831  * This tail recursion is done by hand as we d    
832  * on the compiler to always get this right (g    
833  * Real recursion would eat up our stack space    
834  */                                               
835                                                   
836 /*                                                
837  * dput - release a dentry                        
838  * @dentry: dentry to release                     
839  *                                                
840  * Release a dentry. This will drop the usage     
841  * call the dentry unlink method as well as re    
842  * releasing its resources. If the parent dent    
843  * they too may now get deleted.                  
844  */                                               
845 void dput(struct dentry *dentry)                  
846 {                                                 
847         if (!dentry)                              
848                 return;                           
849         might_sleep();                            
850         rcu_read_lock();                          
851         if (likely(fast_dput(dentry))) {          
852                 rcu_read_unlock();                
853                 return;                           
854         }                                         
855         while (lock_for_kill(dentry)) {           
856                 rcu_read_unlock();                
857                 dentry = __dentry_kill(dentry)    
858                 if (!dentry)                      
859                         return;                   
860                 if (retain_dentry(dentry, true    
861                         spin_unlock(&dentry->d    
862                         return;                   
863                 }                                 
864                 rcu_read_lock();                  
865         }                                         
866         rcu_read_unlock();                        
867         spin_unlock(&dentry->d_lock);             
868 }                                                 
869 EXPORT_SYMBOL(dput);                              
870                                                   
871 static void to_shrink_list(struct dentry *dent    
872 __must_hold(&dentry->d_lock)                      
873 {                                                 
874         if (!(dentry->d_flags & DCACHE_SHRINK_    
875                 if (dentry->d_flags & DCACHE_L    
876                         d_lru_del(dentry);        
877                 d_shrink_add(dentry, list);       
878         }                                         
879 }                                                 
880                                                   
881 void dput_to_list(struct dentry *dentry, struc    
882 {                                                 
883         rcu_read_lock();                          
884         if (likely(fast_dput(dentry))) {          
885                 rcu_read_unlock();                
886                 return;                           
887         }                                         
888         rcu_read_unlock();                        
889         to_shrink_list(dentry, list);             
890         spin_unlock(&dentry->d_lock);             
891 }                                                 
892                                                   
893 struct dentry *dget_parent(struct dentry *dent    
894 {                                                 
895         int gotref;                               
896         struct dentry *ret;                       
897         unsigned seq;                             
898                                                   
899         /*                                        
900          * Do optimistic parent lookup without    
901          * locking.                               
902          */                                       
903         rcu_read_lock();                          
904         seq = raw_seqcount_begin(&dentry->d_se    
905         ret = READ_ONCE(dentry->d_parent);        
906         gotref = lockref_get_not_zero(&ret->d_    
907         rcu_read_unlock();                        
908         if (likely(gotref)) {                     
909                 if (!read_seqcount_retry(&dent    
910                         return ret;               
911                 dput(ret);                        
912         }                                         
913                                                   
914 repeat:                                           
915         /*                                        
916          * Don't need rcu_dereference because     
917          * the lock.                              
918          */                                       
919         rcu_read_lock();                          
920         ret = dentry->d_parent;                   
921         spin_lock(&ret->d_lock);                  
922         if (unlikely(ret != dentry->d_parent))    
923                 spin_unlock(&ret->d_lock);        
924                 rcu_read_unlock();                
925                 goto repeat;                      
926         }                                         
927         rcu_read_unlock();                        
928         BUG_ON(!ret->d_lockref.count);            
929         ret->d_lockref.count++;                   
930         spin_unlock(&ret->d_lock);                
931         return ret;                               
932 }                                                 
933 EXPORT_SYMBOL(dget_parent);                       
934                                                   
935 static struct dentry * __d_find_any_alias(stru    
936 {                                                 
937         struct dentry *alias;                     
938                                                   
939         if (hlist_empty(&inode->i_dentry))        
940                 return NULL;                      
941         alias = hlist_entry(inode->i_dentry.fi    
942         lockref_get(&alias->d_lockref);           
943         return alias;                             
944 }                                                 
945                                                   
946 /**                                               
947  * d_find_any_alias - find any alias for a giv    
948  * @inode: inode to find an alias for             
949  *                                                
950  * If any aliases exist for the given inode, t    
951  * reference for one of them.  If no aliases e    
952  */                                               
953 struct dentry *d_find_any_alias(struct inode *    
954 {                                                 
955         struct dentry *de;                        
956                                                   
957         spin_lock(&inode->i_lock);                
958         de = __d_find_any_alias(inode);           
959         spin_unlock(&inode->i_lock);              
960         return de;                                
961 }                                                 
962 EXPORT_SYMBOL(d_find_any_alias);                  
963                                                   
964 static struct dentry *__d_find_alias(struct in    
965 {                                                 
966         struct dentry *alias;                     
967                                                   
968         if (S_ISDIR(inode->i_mode))               
969                 return __d_find_any_alias(inod    
970                                                   
971         hlist_for_each_entry(alias, &inode->i_    
972                 spin_lock(&alias->d_lock);        
973                 if (!d_unhashed(alias)) {         
974                         dget_dlock(alias);        
975                         spin_unlock(&alias->d_    
976                         return alias;             
977                 }                                 
978                 spin_unlock(&alias->d_lock);      
979         }                                         
980         return NULL;                              
981 }                                                 
982                                                   
983 /**                                               
984  * d_find_alias - grab a hashed alias of inode    
985  * @inode: inode in question                      
986  *                                                
987  * If inode has a hashed alias, or is a direct    
988  * acquire the reference to alias and return i    
989  * Notice that if inode is a directory there c    
990  * it can be unhashed only if it has no childr    
991  * of a filesystem, or if the directory was re    
992  * was the first vfs operation to notice.         
993  *                                                
994  * If the inode has an IS_ROOT, DCACHE_DISCONN    
995  * any other hashed alias over that one.          
996  */                                               
997 struct dentry *d_find_alias(struct inode *inod    
998 {                                                 
999         struct dentry *de = NULL;                 
1000                                                  
1001         if (!hlist_empty(&inode->i_dentry)) {    
1002                 spin_lock(&inode->i_lock);       
1003                 de = __d_find_alias(inode);      
1004                 spin_unlock(&inode->i_lock);     
1005         }                                        
1006         return de;                               
1007 }                                                
1008 EXPORT_SYMBOL(d_find_alias);                     
1009                                                  
1010 /*                                               
1011  *  Caller MUST be holding rcu_read_lock() an    
1012  *  that inode won't get freed until rcu_read    
1013  */                                              
1014 struct dentry *d_find_alias_rcu(struct inode     
1015 {                                                
1016         struct hlist_head *l = &inode->i_dent    
1017         struct dentry *de = NULL;                
1018                                                  
1019         spin_lock(&inode->i_lock);               
1020         // ->i_dentry and ->i_rcu are colocat    
1021         // used without having I_FREEING set,    
1022         if (likely(!(inode->i_state & I_FREEI    
1023                 if (S_ISDIR(inode->i_mode)) {    
1024                         de = hlist_entry(l->f    
1025                 } else {                         
1026                         hlist_for_each_entry(    
1027                                 if (!d_unhash    
1028                                         break    
1029                 }                                
1030         }                                        
1031         spin_unlock(&inode->i_lock);             
1032         return de;                               
1033 }                                                
1034                                                  
1035 /*                                               
1036  *      Try to kill dentries associated with     
1037  * WARNING: you must own a reference to inode    
1038  */                                              
1039 void d_prune_aliases(struct inode *inode)        
1040 {                                                
1041         LIST_HEAD(dispose);                      
1042         struct dentry *dentry;                   
1043                                                  
1044         spin_lock(&inode->i_lock);               
1045         hlist_for_each_entry(dentry, &inode->    
1046                 spin_lock(&dentry->d_lock);      
1047                 if (!dentry->d_lockref.count)    
1048                         to_shrink_list(dentry    
1049                 spin_unlock(&dentry->d_lock);    
1050         }                                        
1051         spin_unlock(&inode->i_lock);             
1052         shrink_dentry_list(&dispose);            
1053 }                                                
1054 EXPORT_SYMBOL(d_prune_aliases);                  
1055                                                  
1056 static inline void shrink_kill(struct dentry     
1057 {                                                
1058         do {                                     
1059                 rcu_read_unlock();               
1060                 victim = __dentry_kill(victim    
1061                 rcu_read_lock();                 
1062         } while (victim && lock_for_kill(vict    
1063         rcu_read_unlock();                       
1064         if (victim)                              
1065                 spin_unlock(&victim->d_lock);    
1066 }                                                
1067                                                  
1068 void shrink_dentry_list(struct list_head *lis    
1069 {                                                
1070         while (!list_empty(list)) {              
1071                 struct dentry *dentry;           
1072                                                  
1073                 dentry = list_entry(list->pre    
1074                 spin_lock(&dentry->d_lock);      
1075                 rcu_read_lock();                 
1076                 if (!lock_for_kill(dentry)) {    
1077                         bool can_free;           
1078                         rcu_read_unlock();       
1079                         d_shrink_del(dentry);    
1080                         can_free = dentry->d_    
1081                         spin_unlock(&dentry->    
1082                         if (can_free)            
1083                                 dentry_free(d    
1084                         continue;                
1085                 }                                
1086                 d_shrink_del(dentry);            
1087                 shrink_kill(dentry);             
1088         }                                        
1089 }                                                
1090                                                  
1091 static enum lru_status dentry_lru_isolate(str    
1092                 struct list_lru_one *lru, spi    
1093 {                                                
1094         struct list_head *freeable = arg;        
1095         struct dentry   *dentry = container_o    
1096                                                  
1097                                                  
1098         /*                                       
1099          * we are inverting the lru lock/dent    
1100          * so use a trylock. If we fail to ge    
1101          * it                                    
1102          */                                      
1103         if (!spin_trylock(&dentry->d_lock))      
1104                 return LRU_SKIP;                 
1105                                                  
1106         /*                                       
1107          * Referenced dentries are still in u    
1108          * counts, just remove them from the     
1109          * another pass through the LRU.         
1110          */                                      
1111         if (dentry->d_lockref.count) {           
1112                 d_lru_isolate(lru, dentry);      
1113                 spin_unlock(&dentry->d_lock);    
1114                 return LRU_REMOVED;              
1115         }                                        
1116                                                  
1117         if (dentry->d_flags & DCACHE_REFERENC    
1118                 dentry->d_flags &= ~DCACHE_RE    
1119                 spin_unlock(&dentry->d_lock);    
1120                                                  
1121                 /*                               
1122                  * The list move itself will     
1123                  * this point, we've dropped     
1124                  * lru lock. This is safe to     
1125                  * protected by the lru lock     
1126                  *                               
1127                  * This is guaranteed by the     
1128                  * functions are intermediate    
1129                  * list_lru_add_obj and list_    
1130                  * only ever occur through th    
1131                  * like this one, that are ca    
1132                  *                               
1133                  * The only exceptions to thi    
1134                  * shrink_dentry_list, and co    
1135                  * DCACHE_SHRINK_LIST flag.      
1136                  * operating only with stack     
1137                  * properly isolated from the    
1138                  * local access.                 
1139                  */                              
1140                 return LRU_ROTATE;               
1141         }                                        
1142                                                  
1143         d_lru_shrink_move(lru, dentry, freeab    
1144         spin_unlock(&dentry->d_lock);            
1145                                                  
1146         return LRU_REMOVED;                      
1147 }                                                
1148                                                  
1149 /**                                              
1150  * prune_dcache_sb - shrink the dcache           
1151  * @sb: superblock                               
1152  * @sc: shrink control, passed to list_lru_sh    
1153  *                                               
1154  * Attempt to shrink the superblock dcache LR    
1155  * is done when we need more memory and calle    
1156  * function.                                     
1157  *                                               
1158  * This function may fail to free any resourc    
1159  * use.                                          
1160  */                                              
1161 long prune_dcache_sb(struct super_block *sb,     
1162 {                                                
1163         LIST_HEAD(dispose);                      
1164         long freed;                              
1165                                                  
1166         freed = list_lru_shrink_walk(&sb->s_d    
1167                                      dentry_l    
1168         shrink_dentry_list(&dispose);            
1169         return freed;                            
1170 }                                                
1171                                                  
1172 static enum lru_status dentry_lru_isolate_shr    
1173                 struct list_lru_one *lru, spi    
1174 {                                                
1175         struct list_head *freeable = arg;        
1176         struct dentry   *dentry = container_o    
1177                                                  
1178         /*                                       
1179          * we are inverting the lru lock/dent    
1180          * so use a trylock. If we fail to ge    
1181          * it                                    
1182          */                                      
1183         if (!spin_trylock(&dentry->d_lock))      
1184                 return LRU_SKIP;                 
1185                                                  
1186         d_lru_shrink_move(lru, dentry, freeab    
1187         spin_unlock(&dentry->d_lock);            
1188                                                  
1189         return LRU_REMOVED;                      
1190 }                                                
1191                                                  
1192                                                  
1193 /**                                              
1194  * shrink_dcache_sb - shrink dcache for a sup    
1195  * @sb: superblock                               
1196  *                                               
1197  * Shrink the dcache for the specified super     
1198  * the dcache before unmounting a file system    
1199  */                                              
1200 void shrink_dcache_sb(struct super_block *sb)    
1201 {                                                
1202         do {                                     
1203                 LIST_HEAD(dispose);              
1204                                                  
1205                 list_lru_walk(&sb->s_dentry_l    
1206                         dentry_lru_isolate_sh    
1207                 shrink_dentry_list(&dispose);    
1208         } while (list_lru_count(&sb->s_dentry    
1209 }                                                
1210 EXPORT_SYMBOL(shrink_dcache_sb);                 
1211                                                  
1212 /**                                              
1213  * enum d_walk_ret - action to talke during t    
1214  * @D_WALK_CONTINUE:    contrinue walk           
1215  * @D_WALK_QUIT:        quit walk                
1216  * @D_WALK_NORETRY:     quit when retry is ne    
1217  * @D_WALK_SKIP:        skip this dentry and     
1218  */                                              
1219 enum d_walk_ret {                                
1220         D_WALK_CONTINUE,                         
1221         D_WALK_QUIT,                             
1222         D_WALK_NORETRY,                          
1223         D_WALK_SKIP,                             
1224 };                                               
1225                                                  
1226 /**                                              
1227  * d_walk - walk the dentry tree                 
1228  * @parent:     start of walk                    
1229  * @data:       data passed to @enter() and @    
1230  * @enter:      callback when first entering     
1231  *                                               
1232  * The @enter() callbacks are called with d_l    
1233  */                                              
1234 static void d_walk(struct dentry *parent, voi    
1235                    enum d_walk_ret (*enter)(v    
1236 {                                                
1237         struct dentry *this_parent, *dentry;     
1238         unsigned seq = 0;                        
1239         enum d_walk_ret ret;                     
1240         bool retry = true;                       
1241                                                  
1242 again:                                           
1243         read_seqbegin_or_lock(&rename_lock, &    
1244         this_parent = parent;                    
1245         spin_lock(&this_parent->d_lock);         
1246                                                  
1247         ret = enter(data, this_parent);          
1248         switch (ret) {                           
1249         case D_WALK_CONTINUE:                    
1250                 break;                           
1251         case D_WALK_QUIT:                        
1252         case D_WALK_SKIP:                        
1253                 goto out_unlock;                 
1254         case D_WALK_NORETRY:                     
1255                 retry = false;                   
1256                 break;                           
1257         }                                        
1258 repeat:                                          
1259         dentry = d_first_child(this_parent);     
1260 resume:                                          
1261         hlist_for_each_entry_from(dentry, d_s    
1262                 if (unlikely(dentry->d_flags     
1263                         continue;                
1264                                                  
1265                 spin_lock_nested(&dentry->d_l    
1266                                                  
1267                 ret = enter(data, dentry);       
1268                 switch (ret) {                   
1269                 case D_WALK_CONTINUE:            
1270                         break;                   
1271                 case D_WALK_QUIT:                
1272                         spin_unlock(&dentry->    
1273                         goto out_unlock;         
1274                 case D_WALK_NORETRY:             
1275                         retry = false;           
1276                         break;                   
1277                 case D_WALK_SKIP:                
1278                         spin_unlock(&dentry->    
1279                         continue;                
1280                 }                                
1281                                                  
1282                 if (!hlist_empty(&dentry->d_c    
1283                         spin_unlock(&this_par    
1284                         spin_release(&dentry-    
1285                         this_parent = dentry;    
1286                         spin_acquire(&this_pa    
1287                         goto repeat;             
1288                 }                                
1289                 spin_unlock(&dentry->d_lock);    
1290         }                                        
1291         /*                                       
1292          * All done at this level ... ascend     
1293          */                                      
1294         rcu_read_lock();                         
1295 ascend:                                          
1296         if (this_parent != parent) {             
1297                 dentry = this_parent;            
1298                 this_parent = dentry->d_paren    
1299                                                  
1300                 spin_unlock(&dentry->d_lock);    
1301                 spin_lock(&this_parent->d_loc    
1302                                                  
1303                 /* might go back up the wrong    
1304                 if (need_seqretry(&rename_loc    
1305                         goto rename_retry;       
1306                 /* go into the first sibling     
1307                 hlist_for_each_entry_continue    
1308                         if (likely(!(dentry->    
1309                                 rcu_read_unlo    
1310                                 goto resume;     
1311                         }                        
1312                 }                                
1313                 goto ascend;                     
1314         }                                        
1315         if (need_seqretry(&rename_lock, seq))    
1316                 goto rename_retry;               
1317         rcu_read_unlock();                       
1318                                                  
1319 out_unlock:                                      
1320         spin_unlock(&this_parent->d_lock);       
1321         done_seqretry(&rename_lock, seq);        
1322         return;                                  
1323                                                  
1324 rename_retry:                                    
1325         spin_unlock(&this_parent->d_lock);       
1326         rcu_read_unlock();                       
1327         BUG_ON(seq & 1);                         
1328         if (!retry)                              
1329                 return;                          
1330         seq = 1;                                 
1331         goto again;                              
1332 }                                                
1333                                                  
1334 struct check_mount {                             
1335         struct vfsmount *mnt;                    
1336         unsigned int mounted;                    
1337 };                                               
1338                                                  
1339 static enum d_walk_ret path_check_mount(void     
1340 {                                                
1341         struct check_mount *info = data;         
1342         struct path path = { .mnt = info->mnt    
1343                                                  
1344         if (likely(!d_mountpoint(dentry)))       
1345                 return D_WALK_CONTINUE;          
1346         if (__path_is_mountpoint(&path)) {       
1347                 info->mounted = 1;               
1348                 return D_WALK_QUIT;              
1349         }                                        
1350         return D_WALK_CONTINUE;                  
1351 }                                                
1352                                                  
1353 /**                                              
1354  * path_has_submounts - check for mounts over    
1355  *                      current namespace.       
1356  * @parent: path to check.                       
1357  *                                               
1358  * Return true if the parent or its subdirect    
1359  * a mount point in the current namespace.       
1360  */                                              
1361 int path_has_submounts(const struct path *par    
1362 {                                                
1363         struct check_mount data = { .mnt = pa    
1364                                                  
1365         read_seqlock_excl(&mount_lock);          
1366         d_walk(parent->dentry, &data, path_ch    
1367         read_sequnlock_excl(&mount_lock);        
1368                                                  
1369         return data.mounted;                     
1370 }                                                
1371 EXPORT_SYMBOL(path_has_submounts);               
1372                                                  
1373 /*                                               
1374  * Called by mount code to set a mountpoint a    
1375  * reachable (e.g. NFS can unhash a directory    
1376  * subtree can become unreachable).              
1377  *                                               
1378  * Only one of d_invalidate() and d_set_mount    
1379  * this reason take rename_lock and d_lock on    
1380  */                                              
1381 int d_set_mounted(struct dentry *dentry)         
1382 {                                                
1383         struct dentry *p;                        
1384         int ret = -ENOENT;                       
1385         write_seqlock(&rename_lock);             
1386         for (p = dentry->d_parent; !IS_ROOT(p    
1387                 /* Need exclusion wrt. d_inva    
1388                 spin_lock(&p->d_lock);           
1389                 if (unlikely(d_unhashed(p)))     
1390                         spin_unlock(&p->d_loc    
1391                         goto out;                
1392                 }                                
1393                 spin_unlock(&p->d_lock);         
1394         }                                        
1395         spin_lock(&dentry->d_lock);              
1396         if (!d_unlinked(dentry)) {               
1397                 ret = -EBUSY;                    
1398                 if (!d_mountpoint(dentry)) {     
1399                         dentry->d_flags |= DC    
1400                         ret = 0;                 
1401                 }                                
1402         }                                        
1403         spin_unlock(&dentry->d_lock);            
1404 out:                                             
1405         write_sequnlock(&rename_lock);           
1406         return ret;                              
1407 }                                                
1408                                                  
1409 /*                                               
1410  * Search the dentry child list of the specif    
1411  * and move any unused dentries to the end of    
1412  * list for prune_dcache(). We descend to the    
1413  * whenever the d_children list is non-empty     
1414  * searching.                                    
1415  *                                               
1416  * It returns zero iff there are no unused ch    
1417  * otherwise  it returns the number of childr    
1418  * the end of the unused list. This may not b    
1419  * number of unused children, because select_    
1420  * drop the lock and return early due to late    
1421  * constraints.                                  
1422  */                                              
1423                                                  
1424 struct select_data {                             
1425         struct dentry *start;                    
1426         union {                                  
1427                 long found;                      
1428                 struct dentry *victim;           
1429         };                                       
1430         struct list_head dispose;                
1431 };                                               
1432                                                  
1433 static enum d_walk_ret select_collect(void *_    
1434 {                                                
1435         struct select_data *data = _data;        
1436         enum d_walk_ret ret = D_WALK_CONTINUE    
1437                                                  
1438         if (data->start == dentry)               
1439                 goto out;                        
1440                                                  
1441         if (dentry->d_flags & DCACHE_SHRINK_L    
1442                 data->found++;                   
1443         } else if (!dentry->d_lockref.count)     
1444                 to_shrink_list(dentry, &data-    
1445                 data->found++;                   
1446         } else if (dentry->d_lockref.count <     
1447                 data->found++;                   
1448         }                                        
1449         /*                                       
1450          * We can return to the caller if we     
1451          * ensures forward progress). We'll b    
1452          * the rest.                             
1453          */                                      
1454         if (!list_empty(&data->dispose))         
1455                 ret = need_resched() ? D_WALK    
1456 out:                                             
1457         return ret;                              
1458 }                                                
1459                                                  
1460 static enum d_walk_ret select_collect2(void *    
1461 {                                                
1462         struct select_data *data = _data;        
1463         enum d_walk_ret ret = D_WALK_CONTINUE    
1464                                                  
1465         if (data->start == dentry)               
1466                 goto out;                        
1467                                                  
1468         if (!dentry->d_lockref.count) {          
1469                 if (dentry->d_flags & DCACHE_    
1470                         rcu_read_lock();         
1471                         data->victim = dentry    
1472                         return D_WALK_QUIT;      
1473                 }                                
1474                 to_shrink_list(dentry, &data-    
1475         }                                        
1476         /*                                       
1477          * We can return to the caller if we     
1478          * ensures forward progress). We'll b    
1479          * the rest.                             
1480          */                                      
1481         if (!list_empty(&data->dispose))         
1482                 ret = need_resched() ? D_WALK    
1483 out:                                             
1484         return ret;                              
1485 }                                                
1486                                                  
1487 /**                                              
1488  * shrink_dcache_parent - prune dcache           
1489  * @parent: parent of entries to prune           
1490  *                                               
1491  * Prune the dcache to remove unused children    
1492  */                                              
1493 void shrink_dcache_parent(struct dentry *pare    
1494 {                                                
1495         for (;;) {                               
1496                 struct select_data data = {.s    
1497                                                  
1498                 INIT_LIST_HEAD(&data.dispose)    
1499                 d_walk(parent, &data, select_    
1500                                                  
1501                 if (!list_empty(&data.dispose    
1502                         shrink_dentry_list(&d    
1503                         continue;                
1504                 }                                
1505                                                  
1506                 cond_resched();                  
1507                 if (!data.found)                 
1508                         break;                   
1509                 data.victim = NULL;              
1510                 d_walk(parent, &data, select_    
1511                 if (data.victim) {               
1512                         spin_lock(&data.victi    
1513                         if (!lock_for_kill(da    
1514                                 spin_unlock(&    
1515                                 rcu_read_unlo    
1516                         } else {                 
1517                                 shrink_kill(d    
1518                         }                        
1519                 }                                
1520                 if (!list_empty(&data.dispose    
1521                         shrink_dentry_list(&d    
1522         }                                        
1523 }                                                
1524 EXPORT_SYMBOL(shrink_dcache_parent);             
1525                                                  
1526 static enum d_walk_ret umount_check(void *_da    
1527 {                                                
1528         /* it has busy descendents; complain     
1529         if (!hlist_empty(&dentry->d_children)    
1530                 return D_WALK_CONTINUE;          
1531                                                  
1532         /* root with refcount 1 is fine */       
1533         if (dentry == _data && dentry->d_lock    
1534                 return D_WALK_CONTINUE;          
1535                                                  
1536         WARN(1, "BUG: Dentry %p{i=%lx,n=%pd}     
1537                         " still in use (%d) [    
1538                        dentry,                   
1539                        dentry->d_inode ?         
1540                        dentry->d_inode->i_ino    
1541                        dentry,                   
1542                        dentry->d_lockref.coun    
1543                        dentry->d_sb->s_type->    
1544                        dentry->d_sb->s_id);      
1545         return D_WALK_CONTINUE;                  
1546 }                                                
1547                                                  
1548 static void do_one_tree(struct dentry *dentry    
1549 {                                                
1550         shrink_dcache_parent(dentry);            
1551         d_walk(dentry, dentry, umount_check);    
1552         d_drop(dentry);                          
1553         dput(dentry);                            
1554 }                                                
1555                                                  
1556 /*                                               
1557  * destroy the dentries attached to a superbl    
1558  */                                              
1559 void shrink_dcache_for_umount(struct super_bl    
1560 {                                                
1561         struct dentry *dentry;                   
1562                                                  
1563         rwsem_assert_held_write(&sb->s_umount    
1564                                                  
1565         dentry = sb->s_root;                     
1566         sb->s_root = NULL;                       
1567         do_one_tree(dentry);                     
1568                                                  
1569         while (!hlist_bl_empty(&sb->s_roots))    
1570                 dentry = dget(hlist_bl_entry(    
1571                 do_one_tree(dentry);             
1572         }                                        
1573 }                                                
1574                                                  
1575 static enum d_walk_ret find_submount(void *_d    
1576 {                                                
1577         struct dentry **victim = _data;          
1578         if (d_mountpoint(dentry)) {              
1579                 *victim = dget_dlock(dentry);    
1580                 return D_WALK_QUIT;              
1581         }                                        
1582         return D_WALK_CONTINUE;                  
1583 }                                                
1584                                                  
1585 /**                                              
1586  * d_invalidate - detach submounts, prune dca    
1587  * @dentry: dentry to invalidate (aka detach,    
1588  */                                              
1589 void d_invalidate(struct dentry *dentry)         
1590 {                                                
1591         bool had_submounts = false;              
1592         spin_lock(&dentry->d_lock);              
1593         if (d_unhashed(dentry)) {                
1594                 spin_unlock(&dentry->d_lock);    
1595                 return;                          
1596         }                                        
1597         __d_drop(dentry);                        
1598         spin_unlock(&dentry->d_lock);            
1599                                                  
1600         /* Negative dentries can be dropped w    
1601         if (!dentry->d_inode)                    
1602                 return;                          
1603                                                  
1604         shrink_dcache_parent(dentry);            
1605         for (;;) {                               
1606                 struct dentry *victim = NULL;    
1607                 d_walk(dentry, &victim, find_    
1608                 if (!victim) {                   
1609                         if (had_submounts)       
1610                                 shrink_dcache    
1611                         return;                  
1612                 }                                
1613                 had_submounts = true;            
1614                 detach_mounts(victim);           
1615                 dput(victim);                    
1616         }                                        
1617 }                                                
1618 EXPORT_SYMBOL(d_invalidate);                     
1619                                                  
1620 /**                                              
1621  * __d_alloc    -       allocate a dcache ent    
1622  * @sb: filesystem it will belong to             
1623  * @name: qstr of the name                       
1624  *                                               
1625  * Allocates a dentry. It returns %NULL if th    
1626  * available. On a success the dentry is retu    
1627  * copied and the copy passed in may be reuse    
1628  */                                              
1629                                                  
1630 static struct dentry *__d_alloc(struct super_    
1631 {                                                
1632         struct dentry *dentry;                   
1633         char *dname;                             
1634         int err;                                 
1635                                                  
1636         dentry = kmem_cache_alloc_lru(dentry_    
1637                                       GFP_KER    
1638         if (!dentry)                             
1639                 return NULL;                     
1640                                                  
1641         /*                                       
1642          * We guarantee that the inline name     
1643          * This way the memcpy() done by the     
1644          * will still always have a NUL at th    
1645          * be overwriting an internal NUL cha    
1646          */                                      
1647         dentry->d_iname[DNAME_INLINE_LEN-1] =    
1648         if (unlikely(!name)) {                   
1649                 name = &slash_name;              
1650                 dname = dentry->d_iname;         
1651         } else if (name->len > DNAME_INLINE_L    
1652                 size_t size = offsetof(struct    
1653                 struct external_name *p = kma    
1654                                                  
1655                                                  
1656                 if (!p) {                        
1657                         kmem_cache_free(dentr    
1658                         return NULL;             
1659                 }                                
1660                 atomic_set(&p->u.count, 1);      
1661                 dname = p->name;                 
1662         } else  {                                
1663                 dname = dentry->d_iname;         
1664         }                                        
1665                                                  
1666         dentry->d_name.len = name->len;          
1667         dentry->d_name.hash = name->hash;        
1668         memcpy(dname, name->name, name->len);    
1669         dname[name->len] = 0;                    
1670                                                  
1671         /* Make sure we always see the termin    
1672         smp_store_release(&dentry->d_name.nam    
1673                                                  
1674         dentry->d_lockref.count = 1;             
1675         dentry->d_flags = 0;                     
1676         spin_lock_init(&dentry->d_lock);         
1677         seqcount_spinlock_init(&dentry->d_seq    
1678         dentry->d_inode = NULL;                  
1679         dentry->d_parent = dentry;               
1680         dentry->d_sb = sb;                       
1681         dentry->d_op = NULL;                     
1682         dentry->d_fsdata = NULL;                 
1683         INIT_HLIST_BL_NODE(&dentry->d_hash);     
1684         INIT_LIST_HEAD(&dentry->d_lru);          
1685         INIT_HLIST_HEAD(&dentry->d_children);    
1686         INIT_HLIST_NODE(&dentry->d_u.d_alias)    
1687         INIT_HLIST_NODE(&dentry->d_sib);         
1688         d_set_d_op(dentry, dentry->d_sb->s_d_    
1689                                                  
1690         if (dentry->d_op && dentry->d_op->d_i    
1691                 err = dentry->d_op->d_init(de    
1692                 if (err) {                       
1693                         if (dname_external(de    
1694                                 kfree(externa    
1695                         kmem_cache_free(dentr    
1696                         return NULL;             
1697                 }                                
1698         }                                        
1699                                                  
1700         this_cpu_inc(nr_dentry);                 
1701                                                  
1702         return dentry;                           
1703 }                                                
1704                                                  
1705 /**                                              
1706  * d_alloc      -       allocate a dcache ent    
1707  * @parent: parent of entry to allocate          
1708  * @name: qstr of the name                       
1709  *                                               
1710  * Allocates a dentry. It returns %NULL if th    
1711  * available. On a success the dentry is retu    
1712  * copied and the copy passed in may be reuse    
1713  */                                              
1714 struct dentry *d_alloc(struct dentry * parent    
1715 {                                                
1716         struct dentry *dentry = __d_alloc(par    
1717         if (!dentry)                             
1718                 return NULL;                     
1719         spin_lock(&parent->d_lock);              
1720         /*                                       
1721          * don't need child lock because it i    
1722          * to concurrency here                   
1723          */                                      
1724         dentry->d_parent = dget_dlock(parent)    
1725         hlist_add_head(&dentry->d_sib, &paren    
1726         spin_unlock(&parent->d_lock);            
1727                                                  
1728         return dentry;                           
1729 }                                                
1730 EXPORT_SYMBOL(d_alloc);                          
1731                                                  
1732 struct dentry *d_alloc_anon(struct super_bloc    
1733 {                                                
1734         return __d_alloc(sb, NULL);              
1735 }                                                
1736 EXPORT_SYMBOL(d_alloc_anon);                     
1737                                                  
1738 struct dentry *d_alloc_cursor(struct dentry *    
1739 {                                                
1740         struct dentry *dentry = d_alloc_anon(    
1741         if (dentry) {                            
1742                 dentry->d_flags |= DCACHE_DEN    
1743                 dentry->d_parent = dget(paren    
1744         }                                        
1745         return dentry;                           
1746 }                                                
1747                                                  
1748 /**                                              
1749  * d_alloc_pseudo - allocate a dentry (for lo    
1750  * @sb: the superblock                           
1751  * @name: qstr of the name                       
1752  *                                               
1753  * For a filesystem that just pins its dentri    
1754  * performs lookups at all, return an unhashe    
1755  * This is used for pipes, sockets et.al. - t    
1756  * never be anyone's children or parents.  Un    
1757  * dentries, these will not have RCU delay be    
1758  * last reference and freeing them.              
1759  *                                               
1760  * The only user is alloc_file_pseudo() and t    
1761  * be considered a public interface.  Don't u    
1762  */                                              
1763 struct dentry *d_alloc_pseudo(struct super_bl    
1764 {                                                
1765         static const struct dentry_operations    
1766                 .d_dname = simple_dname          
1767         };                                       
1768         struct dentry *dentry = __d_alloc(sb,    
1769         if (likely(dentry)) {                    
1770                 dentry->d_flags |= DCACHE_NOR    
1771                 if (!sb->s_d_op)                 
1772                         d_set_d_op(dentry, &a    
1773         }                                        
1774         return dentry;                           
1775 }                                                
1776                                                  
1777 struct dentry *d_alloc_name(struct dentry *pa    
1778 {                                                
1779         struct qstr q;                           
1780                                                  
1781         q.name = name;                           
1782         q.hash_len = hashlen_string(parent, n    
1783         return d_alloc(parent, &q);              
1784 }                                                
1785 EXPORT_SYMBOL(d_alloc_name);                     
1786                                                  
1787 void d_set_d_op(struct dentry *dentry, const     
1788 {                                                
1789         WARN_ON_ONCE(dentry->d_op);              
1790         WARN_ON_ONCE(dentry->d_flags & (DCACH    
1791                                 DCACHE_OP_COM    
1792                                 DCACHE_OP_REV    
1793                                 DCACHE_OP_WEA    
1794                                 DCACHE_OP_DEL    
1795                                 DCACHE_OP_REA    
1796         dentry->d_op = op;                       
1797         if (!op)                                 
1798                 return;                          
1799         if (op->d_hash)                          
1800                 dentry->d_flags |= DCACHE_OP_    
1801         if (op->d_compare)                       
1802                 dentry->d_flags |= DCACHE_OP_    
1803         if (op->d_revalidate)                    
1804                 dentry->d_flags |= DCACHE_OP_    
1805         if (op->d_weak_revalidate)               
1806                 dentry->d_flags |= DCACHE_OP_    
1807         if (op->d_delete)                        
1808                 dentry->d_flags |= DCACHE_OP_    
1809         if (op->d_prune)                         
1810                 dentry->d_flags |= DCACHE_OP_    
1811         if (op->d_real)                          
1812                 dentry->d_flags |= DCACHE_OP_    
1813                                                  
1814 }                                                
1815 EXPORT_SYMBOL(d_set_d_op);                       
1816                                                  
1817 static unsigned d_flags_for_inode(struct inod    
1818 {                                                
1819         unsigned add_flags = DCACHE_REGULAR_T    
1820                                                  
1821         if (!inode)                              
1822                 return DCACHE_MISS_TYPE;         
1823                                                  
1824         if (S_ISDIR(inode->i_mode)) {            
1825                 add_flags = DCACHE_DIRECTORY_    
1826                 if (unlikely(!(inode->i_opfla    
1827                         if (unlikely(!inode->    
1828                                 add_flags = D    
1829                         else                     
1830                                 inode->i_opfl    
1831                 }                                
1832                 goto type_determined;            
1833         }                                        
1834                                                  
1835         if (unlikely(!(inode->i_opflags & IOP    
1836                 if (unlikely(inode->i_op->get    
1837                         add_flags = DCACHE_SY    
1838                         goto type_determined;    
1839                 }                                
1840                 inode->i_opflags |= IOP_NOFOL    
1841         }                                        
1842                                                  
1843         if (unlikely(!S_ISREG(inode->i_mode))    
1844                 add_flags = DCACHE_SPECIAL_TY    
1845                                                  
1846 type_determined:                                 
1847         if (unlikely(IS_AUTOMOUNT(inode)))       
1848                 add_flags |= DCACHE_NEED_AUTO    
1849         return add_flags;                        
1850 }                                                
1851                                                  
1852 static void __d_instantiate(struct dentry *de    
1853 {                                                
1854         unsigned add_flags = d_flags_for_inod    
1855         WARN_ON(d_in_lookup(dentry));            
1856                                                  
1857         spin_lock(&dentry->d_lock);              
1858         /*                                       
1859          * The negative counter only tracks d    
1860          * d_lru is on another list.             
1861          */                                      
1862         if ((dentry->d_flags &                   
1863              (DCACHE_LRU_LIST|DCACHE_SHRINK_L    
1864                 this_cpu_dec(nr_dentry_negati    
1865         hlist_add_head(&dentry->d_u.d_alias,     
1866         raw_write_seqcount_begin(&dentry->d_s    
1867         __d_set_inode_and_type(dentry, inode,    
1868         raw_write_seqcount_end(&dentry->d_seq    
1869         fsnotify_update_flags(dentry);           
1870         spin_unlock(&dentry->d_lock);            
1871 }                                                
1872                                                  
1873 /**                                              
1874  * d_instantiate - fill in inode information     
1875  * @entry: dentry to complete                    
1876  * @inode: inode to attach to this dentry        
1877  *                                               
1878  * Fill in inode information in the entry.       
1879  *                                               
1880  * This turns negative dentries into producti    
1881  * of society.                                   
1882  *                                               
1883  * NOTE! This assumes that the inode count ha    
1884  * (or otherwise set) by the caller to indica    
1885  * in use by the dcache.                         
1886  */                                              
1887                                                  
1888 void d_instantiate(struct dentry *entry, stru    
1889 {                                                
1890         BUG_ON(!hlist_unhashed(&entry->d_u.d_    
1891         if (inode) {                             
1892                 security_d_instantiate(entry,    
1893                 spin_lock(&inode->i_lock);       
1894                 __d_instantiate(entry, inode)    
1895                 spin_unlock(&inode->i_lock);     
1896         }                                        
1897 }                                                
1898 EXPORT_SYMBOL(d_instantiate);                    
1899                                                  
1900 /*                                               
1901  * This should be equivalent to d_instantiate    
1902  * with lockdep-related part of unlock_new_in    
1903  * anything else.  Use that instead of open-c    
1904  * unlock_new_inode() combinations.              
1905  */                                              
1906 void d_instantiate_new(struct dentry *entry,     
1907 {                                                
1908         BUG_ON(!hlist_unhashed(&entry->d_u.d_    
1909         BUG_ON(!inode);                          
1910         lockdep_annotate_inode_mutex_key(inod    
1911         security_d_instantiate(entry, inode);    
1912         spin_lock(&inode->i_lock);               
1913         __d_instantiate(entry, inode);           
1914         WARN_ON(!(inode->i_state & I_NEW));      
1915         inode->i_state &= ~I_NEW & ~I_CREATIN    
1916         /*                                       
1917          * Pairs with the barrier in prepare_    
1918          * ___wait_var_event() either sees th    
1919          * waitqueue_active() check in wake_u    
1920          */                                      
1921         smp_mb();                                
1922         inode_wake_up_bit(inode, __I_NEW);       
1923         spin_unlock(&inode->i_lock);             
1924 }                                                
1925 EXPORT_SYMBOL(d_instantiate_new);                
1926                                                  
1927 struct dentry *d_make_root(struct inode *root    
1928 {                                                
1929         struct dentry *res = NULL;               
1930                                                  
1931         if (root_inode) {                        
1932                 res = d_alloc_anon(root_inode    
1933                 if (res)                         
1934                         d_instantiate(res, ro    
1935                 else                             
1936                         iput(root_inode);        
1937         }                                        
1938         return res;                              
1939 }                                                
1940 EXPORT_SYMBOL(d_make_root);                      
1941                                                  
1942 static struct dentry *__d_obtain_alias(struct    
1943 {                                                
1944         struct super_block *sb;                  
1945         struct dentry *new, *res;                
1946                                                  
1947         if (!inode)                              
1948                 return ERR_PTR(-ESTALE);         
1949         if (IS_ERR(inode))                       
1950                 return ERR_CAST(inode);          
1951                                                  
1952         sb = inode->i_sb;                        
1953                                                  
1954         res = d_find_any_alias(inode); /* exi    
1955         if (res)                                 
1956                 goto out;                        
1957                                                  
1958         new = d_alloc_anon(sb);                  
1959         if (!new) {                              
1960                 res = ERR_PTR(-ENOMEM);          
1961                 goto out;                        
1962         }                                        
1963                                                  
1964         security_d_instantiate(new, inode);      
1965         spin_lock(&inode->i_lock);               
1966         res = __d_find_any_alias(inode); /* r    
1967         if (likely(!res)) { /* still no alias    
1968                 unsigned add_flags = d_flags_    
1969                                                  
1970                 if (disconnected)                
1971                         add_flags |= DCACHE_D    
1972                                                  
1973                 spin_lock(&new->d_lock);         
1974                 __d_set_inode_and_type(new, i    
1975                 hlist_add_head(&new->d_u.d_al    
1976                 if (!disconnected) {             
1977                         hlist_bl_lock(&sb->s_    
1978                         hlist_bl_add_head(&ne    
1979                         hlist_bl_unlock(&sb->    
1980                 }                                
1981                 spin_unlock(&new->d_lock);       
1982                 spin_unlock(&inode->i_lock);     
1983                 inode = NULL; /* consumed by     
1984                 res = new;                       
1985         } else {                                 
1986                 spin_unlock(&inode->i_lock);     
1987                 dput(new);                       
1988         }                                        
1989                                                  
1990  out:                                            
1991         iput(inode);                             
1992         return res;                              
1993 }                                                
1994                                                  
1995 /**                                              
1996  * d_obtain_alias - find or allocate a DISCON    
1997  * @inode: inode to allocate the dentry for      
1998  *                                               
1999  * Obtain a dentry for an inode resulting fro    
2000  * similar open by handle operations.  The re    
2001  * or may have a full name (if the inode was     
2002  *                                               
2003  * When called on a directory inode, we must     
2004  * has one dentry.  If a dentry is found, tha    
2005  * allocating a new one.                         
2006  *                                               
2007  * On successful return, the reference to the    
2008  * to the dentry.  In case of an error the re    
2009  * To make it easier to use in export operati    
2010  * be passed in and the error will be propaga    
2011  * with a %NULL @inode replaced by ERR_PTR(-E    
2012  */                                              
2013 struct dentry *d_obtain_alias(struct inode *i    
2014 {                                                
2015         return __d_obtain_alias(inode, true);    
2016 }                                                
2017 EXPORT_SYMBOL(d_obtain_alias);                   
2018                                                  
2019 /**                                              
2020  * d_obtain_root - find or allocate a dentry     
2021  * @inode: inode to allocate the dentry for      
2022  *                                               
2023  * Obtain an IS_ROOT dentry for the root of a    
2024  *                                               
2025  * We must ensure that directory inodes only     
2026  * dentry is found, that is returned instead     
2027  *                                               
2028  * On successful return, the reference to the    
2029  * to the dentry.  In case of an error the re    
2030  * released.  A %NULL or IS_ERR inode may be     
2031  * error will be propagate to the return valu    
2032  * replaced by ERR_PTR(-ESTALE).                 
2033  */                                              
2034 struct dentry *d_obtain_root(struct inode *in    
2035 {                                                
2036         return __d_obtain_alias(inode, false)    
2037 }                                                
2038 EXPORT_SYMBOL(d_obtain_root);                    
2039                                                  
2040 /**                                              
2041  * d_add_ci - lookup or allocate new dentry w    
2042  * @inode:  the inode case-insensitive lookup    
2043  * @dentry: the negative dentry that was pass    
2044  * @name:   the case-exact name to be associa    
2045  *                                               
2046  * This is to avoid filling the dcache with c    
2047  * same inode, only the actual correct case i    
2048  * case-insensitive filesystems.                 
2049  *                                               
2050  * For a case-insensitive lookup match and if    
2051  * already exists in the dcache, use it and r    
2052  *                                               
2053  * If no entry exists with the exact case nam    
2054  * the exact case, and return the spliced ent    
2055  */                                              
2056 struct dentry *d_add_ci(struct dentry *dentry    
2057                         struct qstr *name)       
2058 {                                                
2059         struct dentry *found, *res;              
2060                                                  
2061         /*                                       
2062          * First check if a dentry matching t    
2063          * if not go ahead and create it now.    
2064          */                                      
2065         found = d_hash_and_lookup(dentry->d_p    
2066         if (found) {                             
2067                 iput(inode);                     
2068                 return found;                    
2069         }                                        
2070         if (d_in_lookup(dentry)) {               
2071                 found = d_alloc_parallel(dent    
2072                                         dentr    
2073                 if (IS_ERR(found) || !d_in_lo    
2074                         iput(inode);             
2075                         return found;            
2076                 }                                
2077         } else {                                 
2078                 found = d_alloc(dentry->d_par    
2079                 if (!found) {                    
2080                         iput(inode);             
2081                         return ERR_PTR(-ENOME    
2082                 }                                
2083         }                                        
2084         res = d_splice_alias(inode, found);      
2085         if (res) {                               
2086                 d_lookup_done(found);            
2087                 dput(found);                     
2088                 return res;                      
2089         }                                        
2090         return found;                            
2091 }                                                
2092 EXPORT_SYMBOL(d_add_ci);                         
2093                                                  
2094 /**                                              
2095  * d_same_name - compare dentry name with cas    
2096  * @parent: parent dentry                        
2097  * @dentry: the negative dentry that was pass    
2098  * @name:   the case-exact name to be associa    
2099  *                                               
2100  * Return: true if names are same, or false      
2101  */                                              
2102 bool d_same_name(const struct dentry *dentry,    
2103                  const struct qstr *name)        
2104 {                                                
2105         if (likely(!(parent->d_flags & DCACHE    
2106                 if (dentry->d_name.len != nam    
2107                         return false;            
2108                 return dentry_cmp(dentry, nam    
2109         }                                        
2110         return parent->d_op->d_compare(dentry    
2111                                        dentry    
2112                                        name)     
2113 }                                                
2114 EXPORT_SYMBOL_GPL(d_same_name);                  
2115                                                  
2116 /*                                               
2117  * This is __d_lookup_rcu() when the parent d    
2118  * DCACHE_OP_COMPARE, which makes things much    
2119  */                                              
2120 static noinline struct dentry *__d_lookup_rcu    
2121         const struct dentry *parent,             
2122         const struct qstr *name,                 
2123         unsigned *seqp)                          
2124 {                                                
2125         u64 hashlen = name->hash_len;            
2126         struct hlist_bl_head *b = d_hash(hash    
2127         struct hlist_bl_node *node;              
2128         struct dentry *dentry;                   
2129                                                  
2130         hlist_bl_for_each_entry_rcu(dentry, n    
2131                 int tlen;                        
2132                 const char *tname;               
2133                 unsigned seq;                    
2134                                                  
2135 seqretry:                                        
2136                 seq = raw_seqcount_begin(&den    
2137                 if (dentry->d_parent != paren    
2138                         continue;                
2139                 if (d_unhashed(dentry))          
2140                         continue;                
2141                 if (dentry->d_name.hash != ha    
2142                         continue;                
2143                 tlen = dentry->d_name.len;       
2144                 tname = dentry->d_name.name;     
2145                 /* we want a consistent (name    
2146                 if (read_seqcount_retry(&dent    
2147                         cpu_relax();             
2148                         goto seqretry;           
2149                 }                                
2150                 if (parent->d_op->d_compare(d    
2151                         continue;                
2152                 *seqp = seq;                     
2153                 return dentry;                   
2154         }                                        
2155         return NULL;                             
2156 }                                                
2157                                                  
2158 /**                                              
2159  * __d_lookup_rcu - search for a dentry (racy    
2160  * @parent: parent dentry                        
2161  * @name: qstr of name we wish to find           
2162  * @seqp: returns d_seq value at the point wh    
2163  * Returns: dentry, or NULL                      
2164  *                                               
2165  * __d_lookup_rcu is the dcache lookup functi    
2166  * resolution (store-free path walking) desig    
2167  * Documentation/filesystems/path-lookup.txt.    
2168  *                                               
2169  * This is not to be used outside core vfs.      
2170  *                                               
2171  * __d_lookup_rcu must only be used in rcu-wa    
2172  * held, and rcu_read_lock held. The returned    
2173  * without taking d_lock and checking d_seq s    
2174  * returned here.                                
2175  *                                               
2176  * Alternatively, __d_lookup_rcu may be calle    
2177  * the returned dentry, so long as its parent    
2178  * child is looked up. Thus, an interlocking     
2179  * is formed, giving integrity down the path     
2180  *                                               
2181  * NOTE! The caller *has* to check the result    
2182  * number we've returned before using any of     
2183  */                                              
2184 struct dentry *__d_lookup_rcu(const struct de    
2185                                 const struct     
2186                                 unsigned *seq    
2187 {                                                
2188         u64 hashlen = name->hash_len;            
2189         const unsigned char *str = name->name    
2190         struct hlist_bl_head *b = d_hash(hash    
2191         struct hlist_bl_node *node;              
2192         struct dentry *dentry;                   
2193                                                  
2194         /*                                       
2195          * Note: There is significant duplica    
2196          * required to prevent single threade    
2197          * especially on architectures where     
2198          * Keep the two functions in sync.       
2199          */                                      
2200                                                  
2201         if (unlikely(parent->d_flags & DCACHE    
2202                 return __d_lookup_rcu_op_comp    
2203                                                  
2204         /*                                       
2205          * The hash list is protected using R    
2206          *                                       
2207          * Carefully use d_seq when comparing    
2208          * races with d_move().                  
2209          *                                       
2210          * It is possible that concurrent ren    
2211          * walk here and result in missing ou    
2212          * false-negative result. d_lookup()     
2213          * renames using rename_lock seqlock.    
2214          *                                       
2215          * See Documentation/filesystems/path    
2216          */                                      
2217         hlist_bl_for_each_entry_rcu(dentry, n    
2218                 unsigned seq;                    
2219                                                  
2220                 /*                               
2221                  * The dentry sequence count     
2222                  * renames, and thus protects    
2223                  *                               
2224                  * The caller must perform a     
2225                  * to do anything useful with    
2226                  *                               
2227                  * NOTE! We do a "raw" seqcou    
2228                  * we don't wait for the sequ    
2229                  * is in the middle of a sequ    
2230                  * dentry compare, we will do    
2231                  * and if we end up with a su    
2232                  * want to exit RCU lookup an    
2233                  *                               
2234                  * Note that raw_seqcount_beg    
2235                  * we are still guaranteed NU    
2236                  */                              
2237                 seq = raw_seqcount_begin(&den    
2238                 if (dentry->d_parent != paren    
2239                         continue;                
2240                 if (d_unhashed(dentry))          
2241                         continue;                
2242                 if (dentry->d_name.hash_len !    
2243                         continue;                
2244                 if (dentry_cmp(dentry, str, h    
2245                         continue;                
2246                 *seqp = seq;                     
2247                 return dentry;                   
2248         }                                        
2249         return NULL;                             
2250 }                                                
2251                                                  
2252 /**                                              
2253  * d_lookup - search for a dentry                
2254  * @parent: parent dentry                        
2255  * @name: qstr of name we wish to find           
2256  * Returns: dentry, or NULL                      
2257  *                                               
2258  * d_lookup searches the children of the pare    
2259  * question. If the dentry is found its refer    
2260  * dentry is returned. The caller must use dp    
2261  * finished using it. %NULL is returned if th    
2262  */                                              
2263 struct dentry *d_lookup(const struct dentry *    
2264 {                                                
2265         struct dentry *dentry;                   
2266         unsigned seq;                            
2267                                                  
2268         do {                                     
2269                 seq = read_seqbegin(&rename_l    
2270                 dentry = __d_lookup(parent, n    
2271                 if (dentry)                      
2272                         break;                   
2273         } while (read_seqretry(&rename_lock,     
2274         return dentry;                           
2275 }                                                
2276 EXPORT_SYMBOL(d_lookup);                         
2277                                                  
2278 /**                                              
2279  * __d_lookup - search for a dentry (racy)       
2280  * @parent: parent dentry                        
2281  * @name: qstr of name we wish to find           
2282  * Returns: dentry, or NULL                      
2283  *                                               
2284  * __d_lookup is like d_lookup, however it ma    
2285  * false-negative result due to unrelated ren    
2286  *                                               
2287  * __d_lookup is slightly faster by avoiding     
2288  * however it must be used carefully, eg. wit    
2289  * the case of failure.                          
2290  *                                               
2291  * __d_lookup callers must be commented.         
2292  */                                              
2293 struct dentry *__d_lookup(const struct dentry    
2294 {                                                
2295         unsigned int hash = name->hash;          
2296         struct hlist_bl_head *b = d_hash(hash    
2297         struct hlist_bl_node *node;              
2298         struct dentry *found = NULL;             
2299         struct dentry *dentry;                   
2300                                                  
2301         /*                                       
2302          * Note: There is significant duplica    
2303          * required to prevent single threade    
2304          * especially on architectures where     
2305          * Keep the two functions in sync.       
2306          */                                      
2307                                                  
2308         /*                                       
2309          * The hash list is protected using R    
2310          *                                       
2311          * Take d_lock when comparing a candi    
2312          * with d_move().                        
2313          *                                       
2314          * It is possible that concurrent ren    
2315          * walk here and result in missing ou    
2316          * false-negative result. d_lookup()     
2317          * renames using rename_lock seqlock.    
2318          *                                       
2319          * See Documentation/filesystems/path    
2320          */                                      
2321         rcu_read_lock();                         
2322                                                  
2323         hlist_bl_for_each_entry_rcu(dentry, n    
2324                                                  
2325                 if (dentry->d_name.hash != ha    
2326                         continue;                
2327                                                  
2328                 spin_lock(&dentry->d_lock);      
2329                 if (dentry->d_parent != paren    
2330                         goto next;               
2331                 if (d_unhashed(dentry))          
2332                         goto next;               
2333                                                  
2334                 if (!d_same_name(dentry, pare    
2335                         goto next;               
2336                                                  
2337                 dentry->d_lockref.count++;       
2338                 found = dentry;                  
2339                 spin_unlock(&dentry->d_lock);    
2340                 break;                           
2341 next:                                            
2342                 spin_unlock(&dentry->d_lock);    
2343         }                                        
2344         rcu_read_unlock();                       
2345                                                  
2346         return found;                            
2347 }                                                
2348                                                  
2349 /**                                              
2350  * d_hash_and_lookup - hash the qstr then sea    
2351  * @dir: Directory to search in                  
2352  * @name: qstr of name we wish to find           
2353  *                                               
2354  * On lookup failure NULL is returned; on bad    
2355  */                                              
2356 struct dentry *d_hash_and_lookup(struct dentr    
2357 {                                                
2358         /*                                       
2359          * Check for a fs-specific hash funct    
2360          * calculate the standard hash first,    
2361          * routine may choose to leave the ha    
2362          */                                      
2363         name->hash = full_name_hash(dir, name    
2364         if (dir->d_flags & DCACHE_OP_HASH) {     
2365                 int err = dir->d_op->d_hash(d    
2366                 if (unlikely(err < 0))           
2367                         return ERR_PTR(err);     
2368         }                                        
2369         return d_lookup(dir, name);              
2370 }                                                
2371 EXPORT_SYMBOL(d_hash_and_lookup);                
2372                                                  
2373 /*                                               
2374  * When a file is deleted, we have two option    
2375  * - turn this dentry into a negative dentry     
2376  * - unhash this dentry and free it.             
2377  *                                               
2378  * Usually, we want to just turn this into       
2379  * a negative dentry, but if anybody else is     
2380  * currently using the dentry or the inode       
2381  * we can't do that and we fall back on remov    
2382  * it from the hash queues and waiting for       
2383  * it to be deleted later when it has no user    
2384  */                                              
2385                                                  
2386 /**                                              
2387  * d_delete - delete a dentry                    
2388  * @dentry: The dentry to delete                 
2389  *                                               
2390  * Turn the dentry into a negative dentry if     
2391  * remove it from the hash queues so it can b    
2392  */                                              
2393                                                  
2394 void d_delete(struct dentry * dentry)            
2395 {                                                
2396         struct inode *inode = dentry->d_inode    
2397                                                  
2398         spin_lock(&inode->i_lock);               
2399         spin_lock(&dentry->d_lock);              
2400         /*                                       
2401          * Are we the only user?                 
2402          */                                      
2403         if (dentry->d_lockref.count == 1) {      
2404                 dentry->d_flags &= ~DCACHE_CA    
2405                 dentry_unlink_inode(dentry);     
2406         } else {                                 
2407                 __d_drop(dentry);                
2408                 spin_unlock(&dentry->d_lock);    
2409                 spin_unlock(&inode->i_lock);     
2410         }                                        
2411 }                                                
2412 EXPORT_SYMBOL(d_delete);                         
2413                                                  
2414 static void __d_rehash(struct dentry *entry)     
2415 {                                                
2416         struct hlist_bl_head *b = d_hash(entr    
2417                                                  
2418         hlist_bl_lock(b);                        
2419         hlist_bl_add_head_rcu(&entry->d_hash,    
2420         hlist_bl_unlock(b);                      
2421 }                                                
2422                                                  
2423 /**                                              
2424  * d_rehash     - add an entry back to the ha    
2425  * @entry: dentry to add to the hash             
2426  *                                               
2427  * Adds a dentry to the hash according to its    
2428  */                                              
2429                                                  
2430 void d_rehash(struct dentry * entry)             
2431 {                                                
2432         spin_lock(&entry->d_lock);               
2433         __d_rehash(entry);                       
2434         spin_unlock(&entry->d_lock);             
2435 }                                                
2436 EXPORT_SYMBOL(d_rehash);                         
2437                                                  
2438 static inline unsigned start_dir_add(struct i    
2439 {                                                
2440         preempt_disable_nested();                
2441         for (;;) {                               
2442                 unsigned n = dir->i_dir_seq;     
2443                 if (!(n & 1) && cmpxchg(&dir-    
2444                         return n;                
2445                 cpu_relax();                     
2446         }                                        
2447 }                                                
2448                                                  
2449 static inline void end_dir_add(struct inode *    
2450                                wait_queue_hea    
2451 {                                                
2452         smp_store_release(&dir->i_dir_seq, n     
2453         preempt_enable_nested();                 
2454         wake_up_all(d_wait);                     
2455 }                                                
2456                                                  
2457 static void d_wait_lookup(struct dentry *dent    
2458 {                                                
2459         if (d_in_lookup(dentry)) {               
2460                 DECLARE_WAITQUEUE(wait, curre    
2461                 add_wait_queue(dentry->d_wait    
2462                 do {                             
2463                         set_current_state(TAS    
2464                         spin_unlock(&dentry->    
2465                         schedule();              
2466                         spin_lock(&dentry->d_    
2467                 } while (d_in_lookup(dentry))    
2468         }                                        
2469 }                                                
2470                                                  
2471 struct dentry *d_alloc_parallel(struct dentry    
2472                                 const struct     
2473                                 wait_queue_he    
2474 {                                                
2475         unsigned int hash = name->hash;          
2476         struct hlist_bl_head *b = in_lookup_h    
2477         struct hlist_bl_node *node;              
2478         struct dentry *new = d_alloc(parent,     
2479         struct dentry *dentry;                   
2480         unsigned seq, r_seq, d_seq;              
2481                                                  
2482         if (unlikely(!new))                      
2483                 return ERR_PTR(-ENOMEM);         
2484                                                  
2485 retry:                                           
2486         rcu_read_lock();                         
2487         seq = smp_load_acquire(&parent->d_ino    
2488         r_seq = read_seqbegin(&rename_lock);     
2489         dentry = __d_lookup_rcu(parent, name,    
2490         if (unlikely(dentry)) {                  
2491                 if (!lockref_get_not_dead(&de    
2492                         rcu_read_unlock();       
2493                         goto retry;              
2494                 }                                
2495                 if (read_seqcount_retry(&dent    
2496                         rcu_read_unlock();       
2497                         dput(dentry);            
2498                         goto retry;              
2499                 }                                
2500                 rcu_read_unlock();               
2501                 dput(new);                       
2502                 return dentry;                   
2503         }                                        
2504         if (unlikely(read_seqretry(&rename_lo    
2505                 rcu_read_unlock();               
2506                 goto retry;                      
2507         }                                        
2508                                                  
2509         if (unlikely(seq & 1)) {                 
2510                 rcu_read_unlock();               
2511                 goto retry;                      
2512         }                                        
2513                                                  
2514         hlist_bl_lock(b);                        
2515         if (unlikely(READ_ONCE(parent->d_inod    
2516                 hlist_bl_unlock(b);              
2517                 rcu_read_unlock();               
2518                 goto retry;                      
2519         }                                        
2520         /*                                       
2521          * No changes for the parent since th    
2522          * Since all removals from the chain     
2523          * any potential in-lookup matches ar    
2524          * we unlock the chain.  All fields a    
2525          * we encounter.                         
2526          */                                      
2527         hlist_bl_for_each_entry(dentry, node,    
2528                 if (dentry->d_name.hash != ha    
2529                         continue;                
2530                 if (dentry->d_parent != paren    
2531                         continue;                
2532                 if (!d_same_name(dentry, pare    
2533                         continue;                
2534                 hlist_bl_unlock(b);              
2535                 /* now we can try to grab a r    
2536                 if (!lockref_get_not_dead(&de    
2537                         rcu_read_unlock();       
2538                         goto retry;              
2539                 }                                
2540                                                  
2541                 rcu_read_unlock();               
2542                 /*                               
2543                  * somebody is likely to be s    
2544                  * wait for them to finish       
2545                  */                              
2546                 spin_lock(&dentry->d_lock);      
2547                 d_wait_lookup(dentry);           
2548                 /*                               
2549                  * it's not in-lookup anymore    
2550                  * everything from dcache loo    
2551                  * d_lookup() would've found     
2552                  * otherwise we really have t    
2553                  */                              
2554                 if (unlikely(dentry->d_name.h    
2555                         goto mismatch;           
2556                 if (unlikely(dentry->d_parent    
2557                         goto mismatch;           
2558                 if (unlikely(d_unhashed(dentr    
2559                         goto mismatch;           
2560                 if (unlikely(!d_same_name(den    
2561                         goto mismatch;           
2562                 /* OK, it *is* a hashed match    
2563                 spin_unlock(&dentry->d_lock);    
2564                 dput(new);                       
2565                 return dentry;                   
2566         }                                        
2567         rcu_read_unlock();                       
2568         /* we can't take ->d_lock here; it's     
2569         new->d_flags |= DCACHE_PAR_LOOKUP;       
2570         new->d_wait = wq;                        
2571         hlist_bl_add_head(&new->d_u.d_in_look    
2572         hlist_bl_unlock(b);                      
2573         return new;                              
2574 mismatch:                                        
2575         spin_unlock(&dentry->d_lock);            
2576         dput(dentry);                            
2577         goto retry;                              
2578 }                                                
2579 EXPORT_SYMBOL(d_alloc_parallel);                 
2580                                                  
2581 /*                                               
2582  * - Unhash the dentry                           
2583  * - Retrieve and clear the waitqueue head in    
2584  * - Return the waitqueue head                   
2585  */                                              
2586 static wait_queue_head_t *__d_lookup_unhash(s    
2587 {                                                
2588         wait_queue_head_t *d_wait;               
2589         struct hlist_bl_head *b;                 
2590                                                  
2591         lockdep_assert_held(&dentry->d_lock);    
2592                                                  
2593         b = in_lookup_hash(dentry->d_parent,     
2594         hlist_bl_lock(b);                        
2595         dentry->d_flags &= ~DCACHE_PAR_LOOKUP    
2596         __hlist_bl_del(&dentry->d_u.d_in_look    
2597         d_wait = dentry->d_wait;                 
2598         dentry->d_wait = NULL;                   
2599         hlist_bl_unlock(b);                      
2600         INIT_HLIST_NODE(&dentry->d_u.d_alias)    
2601         INIT_LIST_HEAD(&dentry->d_lru);          
2602         return d_wait;                           
2603 }                                                
2604                                                  
2605 void __d_lookup_unhash_wake(struct dentry *de    
2606 {                                                
2607         spin_lock(&dentry->d_lock);              
2608         wake_up_all(__d_lookup_unhash(dentry)    
2609         spin_unlock(&dentry->d_lock);            
2610 }                                                
2611 EXPORT_SYMBOL(__d_lookup_unhash_wake);           
2612                                                  
2613 /* inode->i_lock held if inode is non-NULL */    
2614                                                  
2615 static inline void __d_add(struct dentry *den    
2616 {                                                
2617         wait_queue_head_t *d_wait;               
2618         struct inode *dir = NULL;                
2619         unsigned n;                              
2620         spin_lock(&dentry->d_lock);              
2621         if (unlikely(d_in_lookup(dentry))) {     
2622                 dir = dentry->d_parent->d_ino    
2623                 n = start_dir_add(dir);          
2624                 d_wait = __d_lookup_unhash(de    
2625         }                                        
2626         if (inode) {                             
2627                 unsigned add_flags = d_flags_    
2628                 hlist_add_head(&dentry->d_u.d    
2629                 raw_write_seqcount_begin(&den    
2630                 __d_set_inode_and_type(dentry    
2631                 raw_write_seqcount_end(&dentr    
2632                 fsnotify_update_flags(dentry)    
2633         }                                        
2634         __d_rehash(dentry);                      
2635         if (dir)                                 
2636                 end_dir_add(dir, n, d_wait);     
2637         spin_unlock(&dentry->d_lock);            
2638         if (inode)                               
2639                 spin_unlock(&inode->i_lock);     
2640 }                                                
2641                                                  
2642 /**                                              
2643  * d_add - add dentry to hash queues             
2644  * @entry: dentry to add                         
2645  * @inode: The inode to attach to this dentry    
2646  *                                               
2647  * This adds the entry to the hash queues and    
2648  * The entry was actually filled in earlier d    
2649  */                                              
2650                                                  
2651 void d_add(struct dentry *entry, struct inode    
2652 {                                                
2653         if (inode) {                             
2654                 security_d_instantiate(entry,    
2655                 spin_lock(&inode->i_lock);       
2656         }                                        
2657         __d_add(entry, inode);                   
2658 }                                                
2659 EXPORT_SYMBOL(d_add);                            
2660                                                  
2661 /**                                              
2662  * d_exact_alias - find and hash an exact unh    
2663  * @entry: dentry to add                         
2664  * @inode: The inode to go with this dentry      
2665  *                                               
2666  * If an unhashed dentry with the same name/p    
2667  * inode already exists, hash and return it.     
2668  * NULL.                                         
2669  *                                               
2670  * Parent directory should be locked.            
2671  */                                              
2672 struct dentry *d_exact_alias(struct dentry *e    
2673 {                                                
2674         struct dentry *alias;                    
2675         unsigned int hash = entry->d_name.has    
2676                                                  
2677         spin_lock(&inode->i_lock);               
2678         hlist_for_each_entry(alias, &inode->i    
2679                 /*                               
2680                  * Don't need alias->d_lock h    
2681                  * d_parent == entry->d_paren    
2682                  * parent changes, because th    
2683                  */                              
2684                 if (alias->d_name.hash != has    
2685                         continue;                
2686                 if (alias->d_parent != entry-    
2687                         continue;                
2688                 if (!d_same_name(alias, entry    
2689                         continue;                
2690                 spin_lock(&alias->d_lock);       
2691                 if (!d_unhashed(alias)) {        
2692                         spin_unlock(&alias->d    
2693                         alias = NULL;            
2694                 } else {                         
2695                         dget_dlock(alias);       
2696                         __d_rehash(alias);       
2697                         spin_unlock(&alias->d    
2698                 }                                
2699                 spin_unlock(&inode->i_lock);     
2700                 return alias;                    
2701         }                                        
2702         spin_unlock(&inode->i_lock);             
2703         return NULL;                             
2704 }                                                
2705 EXPORT_SYMBOL(d_exact_alias);                    
2706                                                  
2707 static void swap_names(struct dentry *dentry,    
2708 {                                                
2709         if (unlikely(dname_external(target)))    
2710                 if (unlikely(dname_external(d    
2711                         /*                       
2712                          * Both external: swa    
2713                          */                      
2714                         swap(target->d_name.n    
2715                 } else {                         
2716                         /*                       
2717                          * dentry:internal, t    
2718                          * storage and make t    
2719                          */                      
2720                         memcpy(target->d_inam    
2721                                         dentr    
2722                         dentry->d_name.name =    
2723                         target->d_name.name =    
2724                 }                                
2725         } else {                                 
2726                 if (unlikely(dname_external(d    
2727                         /*                       
2728                          * dentry:external, t    
2729                          * storage to target     
2730                          */                      
2731                         memcpy(dentry->d_inam    
2732                                         targe    
2733                         target->d_name.name =    
2734                         dentry->d_name.name =    
2735                 } else {                         
2736                         /*                       
2737                          * Both are internal.    
2738                          */                      
2739                         unsigned int i;          
2740                         BUILD_BUG_ON(!IS_ALIG    
2741                         for (i = 0; i < DNAME    
2742                                 swap(((long *    
2743                                      ((long *    
2744                         }                        
2745                 }                                
2746         }                                        
2747         swap(dentry->d_name.hash_len, target-    
2748 }                                                
2749                                                  
2750 static void copy_name(struct dentry *dentry,     
2751 {                                                
2752         struct external_name *old_name = NULL    
2753         if (unlikely(dname_external(dentry)))    
2754                 old_name = external_name(dent    
2755         if (unlikely(dname_external(target)))    
2756                 atomic_inc(&external_name(tar    
2757                 dentry->d_name = target->d_na    
2758         } else {                                 
2759                 memcpy(dentry->d_iname, targe    
2760                                 target->d_nam    
2761                 dentry->d_name.name = dentry-    
2762                 dentry->d_name.hash_len = tar    
2763         }                                        
2764         if (old_name && likely(atomic_dec_and    
2765                 kfree_rcu(old_name, u.head);     
2766 }                                                
2767                                                  
2768 /*                                               
2769  * __d_move - move a dentry                      
2770  * @dentry: entry to move                        
2771  * @target: new dentry                           
2772  * @exchange: exchange the two dentries          
2773  *                                               
2774  * Update the dcache to reflect the move of a    
2775  * dcache entries should not be moved in this    
2776  * rename_lock, the i_mutex of the source and    
2777  * and the sb->s_vfs_rename_mutex if they dif    
2778  */                                              
2779 static void __d_move(struct dentry *dentry, s    
2780                      bool exchange)              
2781 {                                                
2782         struct dentry *old_parent, *p;           
2783         wait_queue_head_t *d_wait;               
2784         struct inode *dir = NULL;                
2785         unsigned n;                              
2786                                                  
2787         WARN_ON(!dentry->d_inode);               
2788         if (WARN_ON(dentry == target))           
2789                 return;                          
2790                                                  
2791         BUG_ON(d_ancestor(target, dentry));      
2792         old_parent = dentry->d_parent;           
2793         p = d_ancestor(old_parent, target);      
2794         if (IS_ROOT(dentry)) {                   
2795                 BUG_ON(p);                       
2796                 spin_lock(&target->d_parent->    
2797         } else if (!p) {                         
2798                 /* target is not a descendent    
2799                 spin_lock(&target->d_parent->    
2800                 spin_lock_nested(&old_parent-    
2801         } else {                                 
2802                 BUG_ON(p == dentry);             
2803                 spin_lock(&old_parent->d_lock    
2804                 if (p != target)                 
2805                         spin_lock_nested(&tar    
2806                                         DENTR    
2807         }                                        
2808         spin_lock_nested(&dentry->d_lock, 2);    
2809         spin_lock_nested(&target->d_lock, 3);    
2810                                                  
2811         if (unlikely(d_in_lookup(target))) {     
2812                 dir = target->d_parent->d_ino    
2813                 n = start_dir_add(dir);          
2814                 d_wait = __d_lookup_unhash(ta    
2815         }                                        
2816                                                  
2817         write_seqcount_begin(&dentry->d_seq);    
2818         write_seqcount_begin_nested(&target->    
2819                                                  
2820         /* unhash both */                        
2821         if (!d_unhashed(dentry))                 
2822                 ___d_drop(dentry);               
2823         if (!d_unhashed(target))                 
2824                 ___d_drop(target);               
2825                                                  
2826         /* ... and switch them in the tree */    
2827         dentry->d_parent = target->d_parent;     
2828         if (!exchange) {                         
2829                 copy_name(dentry, target);       
2830                 target->d_hash.pprev = NULL;     
2831                 dentry->d_parent->d_lockref.c    
2832                 if (dentry != old_parent) /*     
2833                         WARN_ON(!--old_parent    
2834         } else {                                 
2835                 target->d_parent = old_parent    
2836                 swap_names(dentry, target);      
2837                 if (!hlist_unhashed(&target->    
2838                         __hlist_del(&target->    
2839                 hlist_add_head(&target->d_sib    
2840                 __d_rehash(target);              
2841                 fsnotify_update_flags(target)    
2842         }                                        
2843         if (!hlist_unhashed(&dentry->d_sib))     
2844                 __hlist_del(&dentry->d_sib);     
2845         hlist_add_head(&dentry->d_sib, &dentr    
2846         __d_rehash(dentry);                      
2847         fsnotify_update_flags(dentry);           
2848         fscrypt_handle_d_move(dentry);           
2849                                                  
2850         write_seqcount_end(&target->d_seq);      
2851         write_seqcount_end(&dentry->d_seq);      
2852                                                  
2853         if (dir)                                 
2854                 end_dir_add(dir, n, d_wait);     
2855                                                  
2856         if (dentry->d_parent != old_parent)      
2857                 spin_unlock(&dentry->d_parent    
2858         if (dentry != old_parent)                
2859                 spin_unlock(&old_parent->d_lo    
2860         spin_unlock(&target->d_lock);            
2861         spin_unlock(&dentry->d_lock);            
2862 }                                                
2863                                                  
2864 /*                                               
2865  * d_move - move a dentry                        
2866  * @dentry: entry to move                        
2867  * @target: new dentry                           
2868  *                                               
2869  * Update the dcache to reflect the move of a    
2870  * dcache entries should not be moved in this    
2871  * requirements for __d_move.                    
2872  */                                              
2873 void d_move(struct dentry *dentry, struct den    
2874 {                                                
2875         write_seqlock(&rename_lock);             
2876         __d_move(dentry, target, false);         
2877         write_sequnlock(&rename_lock);           
2878 }                                                
2879 EXPORT_SYMBOL(d_move);                           
2880                                                  
2881 /*                                               
2882  * d_exchange - exchange two dentries            
2883  * @dentry1: first dentry                        
2884  * @dentry2: second dentry                       
2885  */                                              
2886 void d_exchange(struct dentry *dentry1, struc    
2887 {                                                
2888         write_seqlock(&rename_lock);             
2889                                                  
2890         WARN_ON(!dentry1->d_inode);              
2891         WARN_ON(!dentry2->d_inode);              
2892         WARN_ON(IS_ROOT(dentry1));               
2893         WARN_ON(IS_ROOT(dentry2));               
2894                                                  
2895         __d_move(dentry1, dentry2, true);        
2896                                                  
2897         write_sequnlock(&rename_lock);           
2898 }                                                
2899                                                  
2900 /**                                              
2901  * d_ancestor - search for an ancestor           
2902  * @p1: ancestor dentry                          
2903  * @p2: child dentry                             
2904  *                                               
2905  * Returns the ancestor dentry of p2 which is    
2906  * an ancestor of p2, else NULL.                 
2907  */                                              
2908 struct dentry *d_ancestor(struct dentry *p1,     
2909 {                                                
2910         struct dentry *p;                        
2911                                                  
2912         for (p = p2; !IS_ROOT(p); p = p->d_pa    
2913                 if (p->d_parent == p1)           
2914                         return p;                
2915         }                                        
2916         return NULL;                             
2917 }                                                
2918                                                  
2919 /*                                               
2920  * This helper attempts to cope with remotely    
2921  *                                               
2922  * It assumes that the caller is already hold    
2923  * dentry->d_parent->d_inode->i_mutex, and re    
2924  *                                               
2925  * Note: If ever the locking in lock_rename()    
2926  * remember to update this too...                
2927  */                                              
2928 static int __d_unalias(struct dentry *dentry,    
2929 {                                                
2930         struct mutex *m1 = NULL;                 
2931         struct rw_semaphore *m2 = NULL;          
2932         int ret = -ESTALE;                       
2933                                                  
2934         /* If alias and dentry share a parent    
2935         if (alias->d_parent == dentry->d_pare    
2936                 goto out_unalias;                
2937                                                  
2938         /* See lock_rename() */                  
2939         if (!mutex_trylock(&dentry->d_sb->s_v    
2940                 goto out_err;                    
2941         m1 = &dentry->d_sb->s_vfs_rename_mute    
2942         if (!inode_trylock_shared(alias->d_pa    
2943                 goto out_err;                    
2944         m2 = &alias->d_parent->d_inode->i_rws    
2945 out_unalias:                                     
2946         __d_move(alias, dentry, false);          
2947         ret = 0;                                 
2948 out_err:                                         
2949         if (m2)                                  
2950                 up_read(m2);                     
2951         if (m1)                                  
2952                 mutex_unlock(m1);                
2953         return ret;                              
2954 }                                                
2955                                                  
2956 /**                                              
2957  * d_splice_alias - splice a disconnected den    
2958  * @inode:  the inode which may have a discon    
2959  * @dentry: a negative dentry which we want t    
2960  *                                               
2961  * If inode is a directory and has an IS_ROOT    
2962  * place of the given dentry and return it, e    
2963  * to the dentry and return NULL.                
2964  *                                               
2965  * If a non-IS_ROOT directory is found, the f    
2966  * we should error out: directories can't hav    
2967  *                                               
2968  * This is needed in the lookup routine of an    
2969  * (via knfsd) so that we can build dcache pa    
2970  *                                               
2971  * If a dentry was found and moved, then it i    
2972  * is returned.  This matches the expected re    
2973  *                                               
2974  * Cluster filesystems may call this function    
2975  * In that case, we know that the inode will     
2976  * will only occur during atomic_open. So we     
2977  * being already hashed only in the final cas    
2978  */                                              
2979 struct dentry *d_splice_alias(struct inode *i    
2980 {                                                
2981         if (IS_ERR(inode))                       
2982                 return ERR_CAST(inode);          
2983                                                  
2984         BUG_ON(!d_unhashed(dentry));             
2985                                                  
2986         if (!inode)                              
2987                 goto out;                        
2988                                                  
2989         security_d_instantiate(dentry, inode)    
2990         spin_lock(&inode->i_lock);               
2991         if (S_ISDIR(inode->i_mode)) {            
2992                 struct dentry *new = __d_find    
2993                 if (unlikely(new)) {             
2994                         /* The reference to n    
2995                         spin_unlock(&inode->i    
2996                         write_seqlock(&rename    
2997                         if (unlikely(d_ancest    
2998                                 write_sequnlo    
2999                                 dput(new);       
3000                                 new = ERR_PTR    
3001                                 pr_warn_ratel    
3002                                         "VFS:    
3003                                         " wou    
3004                                         dentr    
3005                                         inode    
3006                                         inode    
3007                         } else if (!IS_ROOT(n    
3008                                 struct dentry    
3009                                 int err = __d    
3010                                 write_sequnlo    
3011                                 if (err) {       
3012                                         dput(    
3013                                         new =    
3014                                 }                
3015                                 dput(old_pare    
3016                         } else {                 
3017                                 __d_move(new,    
3018                                 write_sequnlo    
3019                         }                        
3020                         iput(inode);             
3021                         return new;              
3022                 }                                
3023         }                                        
3024 out:                                             
3025         __d_add(dentry, inode);                  
3026         return NULL;                             
3027 }                                                
3028 EXPORT_SYMBOL(d_splice_alias);                   
3029                                                  
3030 /*                                               
3031  * Test whether new_dentry is a subdirectory     
3032  *                                               
3033  * Trivially implemented using the dcache str    
3034  */                                              
3035                                                  
3036 /**                                              
3037  * is_subdir - is new dentry a subdirectory o    
3038  * @new_dentry: new dentry                       
3039  * @old_dentry: old dentry                       
3040  *                                               
3041  * Returns true if new_dentry is a subdirecto    
3042  * Returns false otherwise.                      
3043  * Caller must ensure that "new_dentry" is pi    
3044  */                                              
3045                                                  
3046 bool is_subdir(struct dentry *new_dentry, str    
3047 {                                                
3048         bool subdir;                             
3049         unsigned seq;                            
3050                                                  
3051         if (new_dentry == old_dentry)            
3052                 return true;                     
3053                                                  
3054         /* Access d_parent under rcu as d_mov    
3055         rcu_read_lock();                         
3056         seq = read_seqbegin(&rename_lock);       
3057         subdir = d_ancestor(old_dentry, new_d    
3058          /* Try lockless once... */              
3059         if (read_seqretry(&rename_lock, seq))    
3060                 /* ...else acquire lock for p    
3061                 read_seqlock_excl(&rename_loc    
3062                 subdir = d_ancestor(old_dentr    
3063                 read_sequnlock_excl(&rename_l    
3064         }                                        
3065         rcu_read_unlock();                       
3066         return subdir;                           
3067 }                                                
3068 EXPORT_SYMBOL(is_subdir);                        
3069                                                  
3070 static enum d_walk_ret d_genocide_kill(void *    
3071 {                                                
3072         struct dentry *root = data;              
3073         if (dentry != root) {                    
3074                 if (d_unhashed(dentry) || !de    
3075                         return D_WALK_SKIP;      
3076                                                  
3077                 if (!(dentry->d_flags & DCACH    
3078                         dentry->d_flags |= DC    
3079                         dentry->d_lockref.cou    
3080                 }                                
3081         }                                        
3082         return D_WALK_CONTINUE;                  
3083 }                                                
3084                                                  
3085 void d_genocide(struct dentry *parent)           
3086 {                                                
3087         d_walk(parent, parent, d_genocide_kil    
3088 }                                                
3089                                                  
3090 void d_mark_tmpfile(struct file *file, struct    
3091 {                                                
3092         struct dentry *dentry = file->f_path.    
3093                                                  
3094         BUG_ON(dentry->d_name.name != dentry-    
3095                 !hlist_unhashed(&dentry->d_u.    
3096                 !d_unlinked(dentry));            
3097         spin_lock(&dentry->d_parent->d_lock);    
3098         spin_lock_nested(&dentry->d_lock, DEN    
3099         dentry->d_name.len = sprintf(dentry->    
3100                                 (unsigned lon    
3101         spin_unlock(&dentry->d_lock);            
3102         spin_unlock(&dentry->d_parent->d_lock    
3103 }                                                
3104 EXPORT_SYMBOL(d_mark_tmpfile);                   
3105                                                  
3106 void d_tmpfile(struct file *file, struct inod    
3107 {                                                
3108         struct dentry *dentry = file->f_path.    
3109                                                  
3110         inode_dec_link_count(inode);             
3111         d_mark_tmpfile(file, inode);             
3112         d_instantiate(dentry, inode);            
3113 }                                                
3114 EXPORT_SYMBOL(d_tmpfile);                        
3115                                                  
3116 /*                                               
3117  * Obtain inode number of the parent dentry.     
3118  */                                              
3119 ino_t d_parent_ino(struct dentry *dentry)        
3120 {                                                
3121         struct dentry *parent;                   
3122         struct inode *iparent;                   
3123         unsigned seq;                            
3124         ino_t ret;                               
3125                                                  
3126         scoped_guard(rcu) {                      
3127                 seq = raw_seqcount_begin(&den    
3128                 parent = READ_ONCE(dentry->d_    
3129                 iparent = d_inode_rcu(parent)    
3130                 if (likely(iparent)) {           
3131                         ret = iparent->i_ino;    
3132                         if (!read_seqcount_re    
3133                                 return ret;      
3134                 }                                
3135         }                                        
3136                                                  
3137         spin_lock(&dentry->d_lock);              
3138         ret = dentry->d_parent->d_inode->i_in    
3139         spin_unlock(&dentry->d_lock);            
3140         return ret;                              
3141 }                                                
3142 EXPORT_SYMBOL(d_parent_ino);                     
3143                                                  
3144 static __initdata unsigned long dhash_entries    
3145 static int __init set_dhash_entries(char *str    
3146 {                                                
3147         if (!str)                                
3148                 return 0;                        
3149         dhash_entries = simple_strtoul(str, &    
3150         return 1;                                
3151 }                                                
3152 __setup("dhash_entries=", set_dhash_entries);    
3153                                                  
3154 static void __init dcache_init_early(void)       
3155 {                                                
3156         /* If hashes are distributed across N    
3157          * hash allocation until vmalloc spac    
3158          */                                      
3159         if (hashdist)                            
3160                 return;                          
3161                                                  
3162         dentry_hashtable =                       
3163                 alloc_large_system_hash("Dent    
3164                                         sizeo    
3165                                         dhash    
3166                                         13,      
3167                                         HASH_    
3168                                         &d_ha    
3169                                         NULL,    
3170                                         0,       
3171                                         0);      
3172         d_hash_shift = 32 - d_hash_shift;        
3173                                                  
3174         runtime_const_init(shift, d_hash_shif    
3175         runtime_const_init(ptr, dentry_hashta    
3176 }                                                
3177                                                  
3178 static void __init dcache_init(void)             
3179 {                                                
3180         /*                                       
3181          * A constructor could be added for s    
3182          * but it is probably not worth it be    
3183          * of the dcache.                        
3184          */                                      
3185         dentry_cache = KMEM_CACHE_USERCOPY(de    
3186                 SLAB_RECLAIM_ACCOUNT|SLAB_PAN    
3187                 d_iname);                        
3188                                                  
3189         /* Hash may have been set up in dcach    
3190         if (!hashdist)                           
3191                 return;                          
3192                                                  
3193         dentry_hashtable =                       
3194                 alloc_large_system_hash("Dent    
3195                                         sizeo    
3196                                         dhash    
3197                                         13,      
3198                                         HASH_    
3199                                         &d_ha    
3200                                         NULL,    
3201                                         0,       
3202                                         0);      
3203         d_hash_shift = 32 - d_hash_shift;        
3204                                                  
3205         runtime_const_init(shift, d_hash_shif    
3206         runtime_const_init(ptr, dentry_hashta    
3207 }                                                
3208                                                  
3209 /* SLAB cache for __getname() consumers */       
3210 struct kmem_cache *names_cachep __ro_after_in    
3211 EXPORT_SYMBOL(names_cachep);                     
3212                                                  
3213 void __init vfs_caches_init_early(void)          
3214 {                                                
3215         int i;                                   
3216                                                  
3217         for (i = 0; i < ARRAY_SIZE(in_lookup_    
3218                 INIT_HLIST_BL_HEAD(&in_lookup    
3219                                                  
3220         dcache_init_early();                     
3221         inode_init_early();                      
3222 }                                                
3223                                                  
3224 void __init vfs_caches_init(void)                
3225 {                                                
3226         names_cachep = kmem_cache_create_user    
3227                         SLAB_HWCACHE_ALIGN|SL    
3228                                                  
3229         dcache_init();                           
3230         inode_init();                            
3231         files_init();                            
3232         files_maxfiles_init();                   
3233         mnt_init();                              
3234         bdev_cache_init();                       
3235         chrdev_init();                           
3236 }                                                
3237                                                  

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php