Skip to content

Commit a904937

Browse files
author
Al Viro
committed
make d_splice_alias(ERR_PTR(err), dentry) = ERR_PTR(err)
... and simplify the living hell out of callers Signed-off-by: Al Viro <[email protected]>
1 parent 0c1aa9a commit a904937

File tree

15 files changed

+39
-94
lines changed

15 files changed

+39
-94
lines changed

fs/btrfs/inode.c

+1-7
Original file line numberDiff line numberDiff line change
@@ -4079,13 +4079,7 @@ static int btrfs_dentry_delete(const struct dentry *dentry)
40794079
static struct dentry *btrfs_lookup(struct inode *dir, struct dentry *dentry,
40804080
struct nameidata *nd)
40814081
{
4082-
struct inode *inode;
4083-
4084-
inode = btrfs_lookup_dentry(dir, dentry);
4085-
if (IS_ERR(inode))
4086-
return ERR_CAST(inode);
4087-
4088-
return d_splice_alias(inode, dentry);
4082+
return d_splice_alias(btrfs_lookup_dentry(dir, dentry), dentry);
40894083
}
40904084

40914085
unsigned char btrfs_filetype_table[] = {

fs/dcache.c

+3
Original file line numberDiff line numberDiff line change
@@ -1652,6 +1652,9 @@ struct dentry *d_splice_alias(struct inode *inode, struct dentry *dentry)
16521652
{
16531653
struct dentry *new = NULL;
16541654

1655+
if (IS_ERR(inode))
1656+
return ERR_CAST(inode);
1657+
16551658
if (inode && S_ISDIR(inode->i_mode)) {
16561659
spin_lock(&inode->i_lock);
16571660
new = __d_find_alias(inode, 1);

fs/efs/namei.c

+2-5
Original file line numberDiff line numberDiff line change
@@ -60,14 +60,11 @@ static efs_ino_t efs_find_entry(struct inode *inode, const char *name, int len)
6060

6161
struct dentry *efs_lookup(struct inode *dir, struct dentry *dentry, struct nameidata *nd) {
6262
efs_ino_t inodenum;
63-
struct inode * inode = NULL;
63+
struct inode *inode = NULL;
6464

6565
inodenum = efs_find_entry(dir, dentry->d_name.name, dentry->d_name.len);
66-
if (inodenum) {
66+
if (inodenum)
6767
inode = efs_iget(dir->i_sb, inodenum);
68-
if (IS_ERR(inode))
69-
return ERR_CAST(inode);
70-
}
7168

7269
return d_splice_alias(inode, dentry);
7370
}

fs/exofs/namei.c

+1-6
Original file line numberDiff line numberDiff line change
@@ -55,12 +55,7 @@ static struct dentry *exofs_lookup(struct inode *dir, struct dentry *dentry,
5555
return ERR_PTR(-ENAMETOOLONG);
5656

5757
ino = exofs_inode_by_name(dir, dentry);
58-
inode = NULL;
59-
if (ino) {
60-
inode = exofs_iget(dir->i_sb, ino);
61-
if (IS_ERR(inode))
62-
return ERR_CAST(inode);
63-
}
58+
inode = ino ? exofs_iget(dir->i_sb, ino) : NULL;
6459
return d_splice_alias(inode, dentry);
6560
}
6661

fs/ext2/namei.c

+5-9
Original file line numberDiff line numberDiff line change
@@ -67,15 +67,11 @@ static struct dentry *ext2_lookup(struct inode * dir, struct dentry *dentry, str
6767
inode = NULL;
6868
if (ino) {
6969
inode = ext2_iget(dir->i_sb, ino);
70-
if (IS_ERR(inode)) {
71-
if (PTR_ERR(inode) == -ESTALE) {
72-
ext2_error(dir->i_sb, __func__,
73-
"deleted inode referenced: %lu",
74-
(unsigned long) ino);
75-
return ERR_PTR(-EIO);
76-
} else {
77-
return ERR_CAST(inode);
78-
}
70+
if (inode == ERR_PTR(-ESTALE)) {
71+
ext2_error(dir->i_sb, __func__,
72+
"deleted inode referenced: %lu",
73+
(unsigned long) ino);
74+
return ERR_PTR(-EIO);
7975
}
8076
}
8177
return d_splice_alias(inode, dentry);

fs/ext3/namei.c

+5-9
Original file line numberDiff line numberDiff line change
@@ -1038,15 +1038,11 @@ static struct dentry *ext3_lookup(struct inode * dir, struct dentry *dentry, str
10381038
return ERR_PTR(-EIO);
10391039
}
10401040
inode = ext3_iget(dir->i_sb, ino);
1041-
if (IS_ERR(inode)) {
1042-
if (PTR_ERR(inode) == -ESTALE) {
1043-
ext3_error(dir->i_sb, __func__,
1044-
"deleted inode referenced: %lu",
1045-
ino);
1046-
return ERR_PTR(-EIO);
1047-
} else {
1048-
return ERR_CAST(inode);
1049-
}
1041+
if (inode == ERR_PTR(-ESTALE)) {
1042+
ext3_error(dir->i_sb, __func__,
1043+
"deleted inode referenced: %lu",
1044+
ino);
1045+
return ERR_PTR(-EIO);
10501046
}
10511047
}
10521048
return d_splice_alias(inode, dentry);

fs/ext4/namei.c

+5-9
Original file line numberDiff line numberDiff line change
@@ -1037,15 +1037,11 @@ static struct dentry *ext4_lookup(struct inode *dir, struct dentry *dentry, stru
10371037
return ERR_PTR(-EIO);
10381038
}
10391039
inode = ext4_iget(dir->i_sb, ino);
1040-
if (IS_ERR(inode)) {
1041-
if (PTR_ERR(inode) == -ESTALE) {
1042-
EXT4_ERROR_INODE(dir,
1043-
"deleted inode referenced: %u",
1044-
ino);
1045-
return ERR_PTR(-EIO);
1046-
} else {
1047-
return ERR_CAST(inode);
1048-
}
1040+
if (inode == ERR_PTR(-ESTALE)) {
1041+
EXT4_ERROR_INODE(dir,
1042+
"deleted inode referenced: %u",
1043+
ino);
1044+
return ERR_PTR(-EIO);
10491045
}
10501046
}
10511047
return d_splice_alias(inode, dentry);

fs/fat/namei_msdos.c

+10-19
Original file line numberDiff line numberDiff line change
@@ -209,29 +209,20 @@ static struct dentry *msdos_lookup(struct inode *dir, struct dentry *dentry,
209209
int err;
210210

211211
lock_super(sb);
212-
213212
err = msdos_find(dir, dentry->d_name.name, dentry->d_name.len, &sinfo);
214-
if (err) {
215-
if (err == -ENOENT) {
216-
inode = NULL;
217-
goto out;
218-
}
219-
goto error;
220-
}
221-
222-
inode = fat_build_inode(sb, sinfo.de, sinfo.i_pos);
223-
brelse(sinfo.bh);
224-
if (IS_ERR(inode)) {
225-
err = PTR_ERR(inode);
226-
goto error;
213+
switch (err) {
214+
case -ENOENT:
215+
inode = NULL;
216+
break;
217+
case 0:
218+
inode = fat_build_inode(sb, sinfo.de, sinfo.i_pos);
219+
brelse(sinfo.bh);
220+
break;
221+
default:
222+
inode = ERR_PTR(err);
227223
}
228-
out:
229224
unlock_super(sb);
230225
return d_splice_alias(inode, dentry);
231-
232-
error:
233-
unlock_super(sb);
234-
return ERR_PTR(err);
235226
}
236227

237228
/***** Creates a directory entry (name is already formatted). */

fs/isofs/namei.c

+3-8
Original file line numberDiff line numberDiff line change
@@ -183,14 +183,9 @@ struct dentry *isofs_lookup(struct inode *dir, struct dentry *dentry, struct nam
183183
1024 + page_address(page));
184184
__free_page(page);
185185

186-
inode = NULL;
187-
if (found) {
188-
inode = isofs_iget(dir->i_sb, block, offset);
189-
if (IS_ERR(inode)) {
190-
mutex_unlock(&sbi->s_mutex);
191-
return ERR_CAST(inode);
192-
}
193-
}
186+
inode = found ? isofs_iget(dir->i_sb, block, offset) : NULL;
187+
194188
mutex_unlock(&sbi->s_mutex);
189+
195190
return d_splice_alias(inode, dentry);
196191
}

fs/jffs2/dir.c

+1-3
Original file line numberDiff line numberDiff line change
@@ -102,10 +102,8 @@ static struct dentry *jffs2_lookup(struct inode *dir_i, struct dentry *target,
102102
mutex_unlock(&dir_f->sem);
103103
if (ino) {
104104
inode = jffs2_iget(dir_i->i_sb, ino);
105-
if (IS_ERR(inode)) {
105+
if (IS_ERR(inode))
106106
printk(KERN_WARNING "iget() failed for ino #%u\n", ino);
107-
return ERR_CAST(inode);
108-
}
109107
}
110108

111109
return d_splice_alias(inode, target);

fs/jfs/namei.c

+1-3
Original file line numberDiff line numberDiff line change
@@ -1481,10 +1481,8 @@ static struct dentry *jfs_lookup(struct inode *dip, struct dentry *dentry, struc
14811481
}
14821482

14831483
ip = jfs_iget(dip->i_sb, inum);
1484-
if (IS_ERR(ip)) {
1484+
if (IS_ERR(ip))
14851485
jfs_err("jfs_lookup: iget failed on inum %d", (uint) inum);
1486-
return ERR_CAST(ip);
1487-
}
14881486

14891487
return d_splice_alias(ip, dentry);
14901488
}

fs/logfs/dir.c

+1-3
Original file line numberDiff line numberDiff line change
@@ -371,11 +371,9 @@ static struct dentry *logfs_lookup(struct inode *dir, struct dentry *dentry,
371371
page_cache_release(page);
372372

373373
inode = logfs_iget(dir->i_sb, ino);
374-
if (IS_ERR(inode)) {
374+
if (IS_ERR(inode))
375375
printk(KERN_ERR"LogFS: Cannot read inode #%llx for dentry (%lx, %lx)n",
376376
ino, dir->i_ino, index);
377-
return ERR_CAST(inode);
378-
}
379377
return d_splice_alias(inode, dentry);
380378
}
381379

fs/nilfs2/namei.c

+1-6
Original file line numberDiff line numberDiff line change
@@ -72,12 +72,7 @@ nilfs_lookup(struct inode *dir, struct dentry *dentry, struct nameidata *nd)
7272
return ERR_PTR(-ENAMETOOLONG);
7373

7474
ino = nilfs_inode_by_name(dir, &dentry->d_name);
75-
inode = NULL;
76-
if (ino) {
77-
inode = nilfs_iget(dir->i_sb, NILFS_I(dir)->i_root, ino);
78-
if (IS_ERR(inode))
79-
return ERR_CAST(inode);
80-
}
75+
inode = ino ? nilfs_iget(dir->i_sb, NILFS_I(dir)->i_root, ino) : NULL;
8176
return d_splice_alias(inode, dentry);
8277
}
8378

fs/squashfs/namei.c

-5
Original file line numberDiff line numberDiff line change
@@ -220,11 +220,6 @@ static struct dentry *squashfs_lookup(struct inode *dir, struct dentry *dentry,
220220
blk, off, ino_num);
221221

222222
inode = squashfs_iget(dir->i_sb, ino, ino_num);
223-
if (IS_ERR(inode)) {
224-
err = PTR_ERR(inode);
225-
goto failed;
226-
}
227-
228223
goto exit_lookup;
229224
}
230225
}

fs/ufs/namei.c

-2
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,6 @@ static struct dentry *ufs_lookup(struct inode * dir, struct dentry *dentry, stru
5959
if (ino)
6060
inode = ufs_iget(dir->i_sb, ino);
6161
unlock_ufs(dir->i_sb);
62-
if (IS_ERR(inode))
63-
return ERR_CAST(inode);
6462
return d_splice_alias(inode, dentry);
6563
}
6664

0 commit comments

Comments
 (0)