diff options
author | Ralf Baechle <ralf@linux-mips.org> | 1998-03-03 01:22:27 +0000 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 1998-03-03 01:22:27 +0000 |
commit | f9bbe9da79dbc8557c74efeb158b431cd67ace52 (patch) | |
tree | 3220d014a35f9d88a48668a1468524e988daebff /fs/dcache.c | |
parent | 3d697109c1ff85ef563aec3d5e113ef225ed2792 (diff) |
Upgrade to 2.1.73.
Diffstat (limited to 'fs/dcache.c')
-rw-r--r-- | fs/dcache.c | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/fs/dcache.c b/fs/dcache.c index a2aaeeaec..7d41b0bd5 100644 --- a/fs/dcache.c +++ b/fs/dcache.c @@ -744,6 +744,42 @@ char * d_path(struct dentry *dentry, char *buffer, int buflen) return retval; } +/* + * Check whether a dentry already exists for the given name, + * and return the inode number if it has an inode. + * + * This routine is used to post-process directory listings for + * filesystems using synthetic inode numbers, and is necessary + * to keep getcwd() working. + */ +ino_t find_inode_number(struct dentry *dir, struct qstr *name) +{ + struct dentry * dentry; + ino_t ino = 0; + + /* + * Check for a fs-specific hash function. Note that we must + * calculate the standard hash first, as the d_op->d_hash() + * routine may choose to leave the hash value unchanged. + */ + name->hash = full_name_hash(name->name, name->len); + if (dir->d_op && dir->d_op->d_hash) + { + if (dir->d_op->d_hash(dir, name) != 0) + goto out; + } + + dentry = d_lookup(dir, name); + if (dentry) + { + if (dentry->d_inode) + ino = dentry->d_inode->i_ino; + dput(dentry); + } +out: + return ino; +} + __initfunc(void dcache_init(void)) { int i; |