struct dentry *efs_get_parent(struct dentry *child) { struct dentry *parent; struct inode *inode; efs_ino_t ino; int error; lock_kernel(); error = -ENOENT; ino = efs_find_entry(child->d_inode, "..", 2); if (!ino) goto fail; error = -EACCES; inode = iget(child->d_inode->i_sb, ino); if (!inode) goto fail; error = -ENOMEM; parent = d_alloc_anon(inode); if (!parent) goto fail_iput; unlock_kernel(); return parent; fail_iput: iput(inode); fail: unlock_kernel(); return ERR_PTR(error); }
struct dentry *efs_lookup(struct inode *dir, struct dentry *dentry, unsigned int flags) { efs_ino_t inodenum; struct inode *inode = NULL; inodenum = efs_find_entry(dir, dentry->d_name.name, dentry->d_name.len); if (inodenum) inode = efs_iget(dir->i_sb, inodenum); return d_splice_alias(inode, dentry); }
struct dentry *efs_get_parent(struct dentry *child) { struct dentry *parent = ERR_PTR(-ENOENT); efs_ino_t ino; ino = efs_find_entry(d_inode(child), "..", 2); if (ino) parent = d_obtain_alias(efs_iget(d_inode(child)->i_sb, ino)); return parent; }
struct dentry *efs_lookup(struct inode *dir, struct dentry *dentry, struct nameidata *nd) { efs_ino_t inodenum; struct inode * inode = NULL; inodenum = efs_find_entry(dir, dentry->d_name.name, dentry->d_name.len); if (inodenum) { inode = efs_iget(dir->i_sb, inodenum); if (IS_ERR(inode)) return ERR_CAST(inode); } return d_splice_alias(inode, dentry); }
struct dentry *efs_get_parent(struct dentry *child) { struct dentry *parent = ERR_PTR(-ENOENT); efs_ino_t ino; lock_kernel(); ino = efs_find_entry(child->d_inode, "..", 2); if (ino) parent = d_obtain_alias(efs_iget(child->d_inode->i_sb, ino)); unlock_kernel(); return parent; }
struct dentry *efs_lookup(struct inode *dir, struct dentry *dentry, struct nameidata *nd) { efs_ino_t inodenum; struct inode * inode = NULL; lock_kernel(); inodenum = efs_find_entry(dir, dentry->d_name.name, dentry->d_name.len); if (inodenum) { if (!(inode = iget(dir->i_sb, inodenum))) { unlock_kernel(); return ERR_PTR(-EACCES); } } unlock_kernel(); d_add(dentry, inode); return NULL; }