Skip to content

Commit a43850a

Browse files
zhangyi089jankara
authored andcommitted
ext2: ext2_find_entry() return -ENOENT if no entry found
Almost all callers of ext2_find_entry() transform NULL return value to -ENOENT, so just let ext2_find_entry() retuen -ENOENT instead of NULL if no valid entry found, and also switch to check the return value of ext2_inode_by_name() in ext2_lookup() and ext2_get_parent(). Link: https://lore.kernel.org/r/[email protected] Signed-off-by: zhangyi (F) <[email protected]> Suggested-by: Jan Kara <[email protected]> Signed-off-by: Jan Kara <[email protected]>
1 parent b496209 commit a43850a

File tree

2 files changed

+10
-21
lines changed

2 files changed

+10
-21
lines changed

fs/ext2/dir.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -393,7 +393,7 @@ struct ext2_dir_entry_2 *ext2_find_entry (struct inode *dir,
393393
}
394394
} while (n != start);
395395
out:
396-
return NULL;
396+
return ERR_PTR(-ENOENT);
397397

398398
found:
399399
*res_page = page;
@@ -419,7 +419,7 @@ int ext2_inode_by_name(struct inode *dir, const struct qstr *child, ino_t *ino)
419419
struct page *page;
420420

421421
de = ext2_find_entry(dir, child, &page);
422-
if (IS_ERR_OR_NULL(de))
422+
if (IS_ERR(de))
423423
return PTR_ERR(de);
424424

425425
*ino = le32_to_cpu(de->inode);

fs/ext2/namei.c

Lines changed: 8 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -56,17 +56,18 @@ static inline int ext2_add_nondir(struct dentry *dentry, struct inode *inode)
5656
static struct dentry *ext2_lookup(struct inode * dir, struct dentry *dentry, unsigned int flags)
5757
{
5858
struct inode * inode;
59-
ino_t ino = 0;
59+
ino_t ino;
6060
int res;
6161

6262
if (dentry->d_name.len > EXT2_NAME_LEN)
6363
return ERR_PTR(-ENAMETOOLONG);
6464

6565
res = ext2_inode_by_name(dir, &dentry->d_name, &ino);
66-
if (res)
67-
return ERR_PTR(res);
68-
inode = NULL;
69-
if (ino) {
66+
if (res) {
67+
if (res != -ENOENT)
68+
return ERR_PTR(res);
69+
inode = NULL;
70+
} else {
7071
inode = ext2_iget(dir->i_sb, ino);
7172
if (inode == ERR_PTR(-ESTALE)) {
7273
ext2_error(dir->i_sb, __func__,
@@ -81,14 +82,13 @@ static struct dentry *ext2_lookup(struct inode * dir, struct dentry *dentry, uns
8182
struct dentry *ext2_get_parent(struct dentry *child)
8283
{
8384
struct qstr dotdot = QSTR_INIT("..", 2);
84-
ino_t ino = 0;
85+
ino_t ino;
8586
int res;
8687

8788
res = ext2_inode_by_name(d_inode(child), &dotdot, &ino);
8889
if (res)
8990
return ERR_PTR(res);
90-
if (!ino)
91-
return ERR_PTR(-ENOENT);
91+
9292
return d_obtain_alias(ext2_iget(child->d_sb, ino));
9393
}
9494

@@ -287,10 +287,6 @@ static int ext2_unlink(struct inode * dir, struct dentry *dentry)
287287
err = PTR_ERR(de);
288288
goto out;
289289
}
290-
if (!de) {
291-
err = -ENOENT;
292-
goto out;
293-
}
294290

295291
err = ext2_delete_entry (de, page);
296292
if (err)
@@ -347,10 +343,6 @@ static int ext2_rename (struct inode * old_dir, struct dentry * old_dentry,
347343
err = PTR_ERR(old_de);
348344
goto out;
349345
}
350-
if (!old_de) {
351-
err = -ENOENT;
352-
goto out;
353-
}
354346

355347
if (S_ISDIR(old_inode->i_mode)) {
356348
err = -EIO;
@@ -367,14 +359,11 @@ static int ext2_rename (struct inode * old_dir, struct dentry * old_dentry,
367359
if (dir_de && !ext2_empty_dir (new_inode))
368360
goto out_dir;
369361

370-
err = -ENOENT;
371362
new_de = ext2_find_entry(new_dir, &new_dentry->d_name, &new_page);
372363
if (IS_ERR(new_de)) {
373364
err = PTR_ERR(new_de);
374365
goto out_dir;
375366
}
376-
if (!new_de)
377-
goto out_dir;
378367
ext2_set_link(new_dir, new_de, new_page, old_inode, 1);
379368
new_inode->i_ctime = current_time(new_inode);
380369
if (dir_de)

0 commit comments

Comments
 (0)