diff options
Diffstat (limited to 'fs/qnx6/namei.c')
-rw-r--r-- | fs/qnx6/namei.c | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/fs/qnx6/namei.c b/fs/qnx6/namei.c new file mode 100644 index 000000000000..8a97289e04ad --- /dev/null +++ b/fs/qnx6/namei.c | |||
@@ -0,0 +1,42 @@ | |||
1 | /* | ||
2 | * QNX6 file system, Linux implementation. | ||
3 | * | ||
4 | * Version : 1.0.0 | ||
5 | * | ||
6 | * History : | ||
7 | * | ||
8 | * 01-02-2012 by Kai Bankett (chaosman@ontika.net) : first release. | ||
9 | * 16-02-2012 pagemap extension by Al Viro | ||
10 | * | ||
11 | */ | ||
12 | |||
13 | #include "qnx6.h" | ||
14 | |||
15 | struct dentry *qnx6_lookup(struct inode *dir, struct dentry *dentry, | ||
16 | struct nameidata *nd) | ||
17 | { | ||
18 | unsigned ino; | ||
19 | struct page *page; | ||
20 | struct inode *foundinode = NULL; | ||
21 | const char *name = dentry->d_name.name; | ||
22 | int len = dentry->d_name.len; | ||
23 | |||
24 | if (len > QNX6_LONG_NAME_MAX) | ||
25 | return ERR_PTR(-ENAMETOOLONG); | ||
26 | |||
27 | ino = qnx6_find_entry(len, dir, name, &page); | ||
28 | if (ino) { | ||
29 | foundinode = qnx6_iget(dir->i_sb, ino); | ||
30 | qnx6_put_page(page); | ||
31 | if (IS_ERR(foundinode)) { | ||
32 | QNX6DEBUG((KERN_ERR "qnx6: lookup->iget -> " | ||
33 | " error %ld\n", PTR_ERR(foundinode))); | ||
34 | return ERR_CAST(foundinode); | ||
35 | } | ||
36 | } else { | ||
37 | QNX6DEBUG((KERN_INFO "qnx6_lookup: not found %s\n", name)); | ||
38 | return NULL; | ||
39 | } | ||
40 | d_add(dentry, foundinode); | ||
41 | return NULL; | ||
42 | } | ||