linux/fs/qnx6/namei.c
<<
>>
Prefs
   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
  15struct dentry *qnx6_lookup(struct inode *dir, struct dentry *dentry,
  16                                unsigned int flags)
  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}
  43