1b2441318SGreg Kroah-Hartman // SPDX-License-Identifier: GPL-2.0
25d026c72SKai Bankett /*
35d026c72SKai Bankett * QNX6 file system, Linux implementation.
45d026c72SKai Bankett *
55d026c72SKai Bankett * Version : 1.0.0
65d026c72SKai Bankett *
75d026c72SKai Bankett * History :
85d026c72SKai Bankett *
95d026c72SKai Bankett * 01-02-2012 by Kai Bankett (chaosman@ontika.net) : first release.
105d026c72SKai Bankett * 16-02-2012 pagemap extension by Al Viro
115d026c72SKai Bankett *
125d026c72SKai Bankett */
135d026c72SKai Bankett
145d026c72SKai Bankett #include "qnx6.h"
155d026c72SKai Bankett
qnx6_lookup(struct inode * dir,struct dentry * dentry,unsigned int flags)165d026c72SKai Bankett struct dentry *qnx6_lookup(struct inode *dir, struct dentry *dentry,
1700cd8dd3SAl Viro unsigned int flags)
185d026c72SKai Bankett {
195d026c72SKai Bankett unsigned ino;
205d026c72SKai Bankett struct page *page;
215d026c72SKai Bankett struct inode *foundinode = NULL;
225d026c72SKai Bankett const char *name = dentry->d_name.name;
235d026c72SKai Bankett int len = dentry->d_name.len;
245d026c72SKai Bankett
255d026c72SKai Bankett if (len > QNX6_LONG_NAME_MAX)
265d026c72SKai Bankett return ERR_PTR(-ENAMETOOLONG);
275d026c72SKai Bankett
285d026c72SKai Bankett ino = qnx6_find_entry(len, dir, name, &page);
295d026c72SKai Bankett if (ino) {
305d026c72SKai Bankett foundinode = qnx6_iget(dir->i_sb, ino);
315d026c72SKai Bankett qnx6_put_page(page);
32*c1481700SAl Viro if (IS_ERR(foundinode))
33fa5a7a41SFabian Frederick pr_debug("lookup->iget -> error %ld\n",
34fa5a7a41SFabian Frederick PTR_ERR(foundinode));
355d026c72SKai Bankett } else {
36fa5a7a41SFabian Frederick pr_debug("%s(): not found %s\n", __func__, name);
375d026c72SKai Bankett }
38*c1481700SAl Viro return d_splice_alias(foundinode, dentry);
395d026c72SKai Bankett }
40