|
@@ -31,21 +31,15 @@ static struct dentry *hfs_lookup(struct inode *dir, struct dentry *dentry,
|
|
|
hfs_cat_build_key(dir->i_sb, fd.search_key, dir->i_ino, &dentry->d_name);
|
|
|
res = hfs_brec_read(&fd, &rec, sizeof(rec));
|
|
|
if (res) {
|
|
|
- hfs_find_exit(&fd);
|
|
|
- if (res == -ENOENT) {
|
|
|
- /* No such entry */
|
|
|
- inode = NULL;
|
|
|
- goto done;
|
|
|
- }
|
|
|
- return ERR_PTR(res);
|
|
|
+ if (res != -ENOENT)
|
|
|
+ inode = ERR_PTR(res);
|
|
|
+ } else {
|
|
|
+ inode = hfs_iget(dir->i_sb, &fd.search_key->cat, &rec);
|
|
|
+ if (!inode)
|
|
|
+ inode = ERR_PTR(-EACCES);
|
|
|
}
|
|
|
- inode = hfs_iget(dir->i_sb, &fd.search_key->cat, &rec);
|
|
|
hfs_find_exit(&fd);
|
|
|
- if (!inode)
|
|
|
- return ERR_PTR(-EACCES);
|
|
|
-done:
|
|
|
- d_add(dentry, inode);
|
|
|
- return NULL;
|
|
|
+ return d_splice_alias(inode, dentry);
|
|
|
}
|
|
|
|
|
|
/*
|