diff options
author | J. Bruce Fields <bfields@redhat.com> | 2012-06-29 16:20:47 -0400 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2013-11-09 00:16:33 -0500 |
commit | e1a24bb0aa6abaa86b5a95638722ea2036dbaadd (patch) | |
tree | 04c1731bae6e7812ed30cb2097c391ae469d3ef7 /fs | |
parent | 7632e465feb182cadc3c9aa1282a057201818a8c (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.c | 13 |
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 | } |
1608 | EXPORT_SYMBOL(d_alloc); | 1608 | EXPORT_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 | */ | ||
1610 | struct dentry *d_alloc_pseudo(struct super_block *sb, const struct qstr *name) | 1618 | struct 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 | } |
1617 | EXPORT_SYMBOL(d_alloc_pseudo); | 1622 | EXPORT_SYMBOL(d_alloc_pseudo); |
1618 | 1623 | ||