diff options
Diffstat (limited to 'fs/hfs/dir.c')
-rw-r--r-- | fs/hfs/dir.c | 20 |
1 files changed, 7 insertions, 13 deletions
diff --git a/fs/hfs/dir.c b/fs/hfs/dir.c index 75b254280ff6..3bf2ae0e467c 100644 --- a/fs/hfs/dir.c +++ b/fs/hfs/dir.c | |||
@@ -31,21 +31,15 @@ static struct dentry *hfs_lookup(struct inode *dir, struct dentry *dentry, | |||
31 | hfs_cat_build_key(dir->i_sb, fd.search_key, dir->i_ino, &dentry->d_name); | 31 | hfs_cat_build_key(dir->i_sb, fd.search_key, dir->i_ino, &dentry->d_name); |
32 | res = hfs_brec_read(&fd, &rec, sizeof(rec)); | 32 | res = hfs_brec_read(&fd, &rec, sizeof(rec)); |
33 | if (res) { | 33 | if (res) { |
34 | hfs_find_exit(&fd); | 34 | if (res != -ENOENT) |
35 | if (res == -ENOENT) { | 35 | inode = ERR_PTR(res); |
36 | /* No such entry */ | 36 | } else { |
37 | inode = NULL; | 37 | inode = hfs_iget(dir->i_sb, &fd.search_key->cat, &rec); |
38 | goto done; | 38 | if (!inode) |
39 | } | 39 | inode = ERR_PTR(-EACCES); |
40 | return ERR_PTR(res); | ||
41 | } | 40 | } |
42 | inode = hfs_iget(dir->i_sb, &fd.search_key->cat, &rec); | ||
43 | hfs_find_exit(&fd); | 41 | hfs_find_exit(&fd); |
44 | if (!inode) | 42 | return d_splice_alias(inode, dentry); |
45 | return ERR_PTR(-EACCES); | ||
46 | done: | ||
47 | d_add(dentry, inode); | ||
48 | return NULL; | ||
49 | } | 43 | } |
50 | 44 | ||
51 | /* | 45 | /* |