Commit a3a065e3f13da8a3470ed09c7f38aad256083726
Committed by
Al Viro
1 parent
b9aff027b2
Exists in
master
and in
7 other branches
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
fs/anon_inodes.c
... | ... | @@ -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; |
fs/pipe.c
... | ... | @@ -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; |
net/socket.c
... | ... | @@ -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 |