aboutsummaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
authorJ. Bruce Fields <bfields@redhat.com>2012-06-29 16:20:47 -0400
committerAl Viro <viro@zeniv.linux.org.uk>2013-11-09 00:16:33 -0500
commite1a24bb0aa6abaa86b5a95638722ea2036dbaadd (patch)
tree04c1731bae6e7812ed30cb2097c391ae469d3ef7 /fs
parent7632e465feb182cadc3c9aa1282a057201818a8c (diff)
dcache: Don't set DISCONNECTED on "pseudo filesystem" dentries
I can't for the life of me see any reason why anyone should care whether a dentry that is never hooked into the dentry cache would need DCACHE_DISCONNECTED set. This originates from 4b936885ab04dc6e0bb0ef35e0e23c1a7364d9e5 "fs: improve scalability of pseudo filesystems", which probably just made the false assumption the DCACHE_DISCONNECTED was meant to be set on anything not connected to a parent somehow. So this is just confusing. Ideally the only uses of DCACHE_DISCONNECTED would be in the filehandle-lookup code, which needs it to ensure dentries are connected into the dentry tree before use. I left d_alloc_pseudo there even though it's now equivalent to __d_alloc(), just on the theory the name is better documentation of its intended use outside dcache.c. Cc: Nick Piggin <npiggin@kernel.dk> Acked-by: Christoph Hellwig <hch@infradead.org> Signed-off-by: J. Bruce Fields <bfields@redhat.com> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs')
-rw-r--r--fs/dcache.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/fs/dcache.c b/fs/dcache.c
index c2add37082b6..67662beebc72 100644
--- a/fs/dcache.c
+++ b/fs/dcache.c
@@ -1607,12 +1607,17 @@ struct dentry *d_alloc(struct dentry * parent, const struct qstr *name)
1607} 1607}
1608EXPORT_SYMBOL(d_alloc); 1608EXPORT_SYMBOL(d_alloc);
1609 1609
1610/**
1611 * d_alloc_pseudo - allocate a dentry (for lookup-less filesystems)
1612 * @sb: the superblock
1613 * @name: qstr of the name
1614 *
1615 * For a filesystem that just pins its dentries in memory and never
1616 * performs lookups at all, return an unhashed IS_ROOT dentry.
1617 */
1610struct dentry *d_alloc_pseudo(struct super_block *sb, const struct qstr *name) 1618struct dentry *d_alloc_pseudo(struct super_block *sb, const struct qstr *name)
1611{ 1619{
1612 struct dentry *dentry = __d_alloc(sb, name); 1620 return __d_alloc(sb, name);
1613 if (dentry)
1614 dentry->d_flags |= DCACHE_DISCONNECTED;
1615 return dentry;
1616} 1621}
1617EXPORT_SYMBOL(d_alloc_pseudo); 1622EXPORT_SYMBOL(d_alloc_pseudo);
1618 1623