xref: /openbmc/linux/fs/qnx6/namei.c (revision 3eb66e91a25497065c5322b1268cbc3953642227)
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