Commit a3a065e3f13da8a3470ed09c7f38aad256083726

Authored by Nick Piggin
Committed by Al Viro
1 parent b9aff027b2

fs: no games with DCACHE_UNHASHED

Filesystems outside the regular namespace do not have to clear DCACHE_UNHASHED
in order to have a working /proc/$pid/fd/XXX. Nothing in proc prevents the
fd link from being used if its dentry is not in the hash.

Also, it does not get put into the dcache hash if DCACHE_UNHASHED is clear;
that depends on the filesystem calling d_add or d_rehash.

So delete the misleading comments and needless code.

Acked-by: Miklos Szeredi <mszeredi@suse.cz>
Signed-off-by: Nick Piggin <npiggin@suse.de>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>

Showing 3 changed files with 0 additions and 50 deletions Side-by-side Diff

... ... @@ -35,16 +35,6 @@
35 35 mnt);
36 36 }
37 37  
38   -static int anon_inodefs_delete_dentry(struct dentry *dentry)
39   -{
40   - /*
41   - * We faked vfs to believe the dentry was hashed when we created it.
42   - * Now we restore the flag so that dput() will work correctly.
43   - */
44   - dentry->d_flags |= DCACHE_UNHASHED;
45   - return 1;
46   -}
47   -
48 38 /*
49 39 * anon_inodefs_dname() is called from d_path().
50 40 */
... ... @@ -60,7 +50,6 @@
60 50 .kill_sb = kill_anon_super,
61 51 };
62 52 static const struct dentry_operations anon_inodefs_dentry_operations = {
63   - .d_delete = anon_inodefs_delete_dentry,
64 53 .d_dname = anon_inodefs_dname,
65 54 };
66 55  
... ... @@ -129,8 +118,6 @@
129 118 atomic_inc(&anon_inode_inode->i_count);
130 119  
131 120 path.dentry->d_op = &anon_inodefs_dentry_operations;
132   - /* Do not publish this dentry inside the global dentry hash table */
133   - path.dentry->d_flags &= ~DCACHE_UNHASHED;
134 121 d_instantiate(path.dentry, anon_inode_inode);
135 122  
136 123 error = -ENFILE;
... ... @@ -906,17 +906,6 @@
906 906 }
907 907  
908 908 static struct vfsmount *pipe_mnt __read_mostly;
909   -static int pipefs_delete_dentry(struct dentry *dentry)
910   -{
911   - /*
912   - * At creation time, we pretended this dentry was hashed
913   - * (by clearing DCACHE_UNHASHED bit in d_flags)
914   - * At delete time, we restore the truth : not hashed.
915   - * (so that dput() can proceed correctly)
916   - */
917   - dentry->d_flags |= DCACHE_UNHASHED;
918   - return 0;
919   -}
920 909  
921 910 /*
922 911 * pipefs_dname() is called from d_path().
... ... @@ -928,7 +917,6 @@
928 917 }
929 918  
930 919 static const struct dentry_operations pipefs_dentry_operations = {
931   - .d_delete = pipefs_delete_dentry,
932 920 .d_dname = pipefs_dname,
933 921 };
934 922  
... ... @@ -989,12 +977,6 @@
989 977 path.mnt = mntget(pipe_mnt);
990 978  
991 979 path.dentry->d_op = &pipefs_dentry_operations;
992   - /*
993   - * We dont want to publish this dentry into global dentry hash table.
994   - * We pretend dentry is already hashed, by unsetting DCACHE_UNHASHED
995   - * This permits a working /proc/$pid/fd/XXX on pipes
996   - */
997   - path.dentry->d_flags &= ~DCACHE_UNHASHED;
998 980 d_instantiate(path.dentry, inode);
999 981  
1000 982 err = -ENFILE;
... ... @@ -312,18 +312,6 @@
312 312 .kill_sb = kill_anon_super,
313 313 };
314 314  
315   -static int sockfs_delete_dentry(struct dentry *dentry)
316   -{
317   - /*
318   - * At creation time, we pretended this dentry was hashed
319   - * (by clearing DCACHE_UNHASHED bit in d_flags)
320   - * At delete time, we restore the truth : not hashed.
321   - * (so that dput() can proceed correctly)
322   - */
323   - dentry->d_flags |= DCACHE_UNHASHED;
324   - return 0;
325   -}
326   -
327 315 /*
328 316 * sockfs_dname() is called from d_path().
329 317 */
... ... @@ -334,7 +322,6 @@
334 322 }
335 323  
336 324 static const struct dentry_operations sockfs_dentry_operations = {
337   - .d_delete = sockfs_delete_dentry,
338 325 .d_dname = sockfs_dname,
339 326 };
340 327  
... ... @@ -374,12 +361,6 @@
374 361 path.mnt = mntget(sock_mnt);
375 362  
376 363 path.dentry->d_op = &sockfs_dentry_operations;
377   - /*
378   - * We dont want to push this dentry into global dentry hash table.
379   - * We pretend dentry is already hashed, by unsetting DCACHE_UNHASHED
380   - * This permits a working /proc/$pid/fd/XXX on sockets
381   - */
382   - path.dentry->d_flags &= ~DCACHE_UNHASHED;
383 364 d_instantiate(path.dentry, SOCK_INODE(sock));
384 365 SOCK_INODE(sock)->i_fop = &socket_file_ops;
385 366