|
@@ -66,8 +66,16 @@ static struct dentry *ext2_lookup(struct inode * dir, struct dentry *dentry, str
|
|
inode = NULL;
|
|
inode = NULL;
|
|
if (ino) {
|
|
if (ino) {
|
|
inode = ext2_iget(dir->i_sb, ino);
|
|
inode = ext2_iget(dir->i_sb, ino);
|
|
- if (IS_ERR(inode))
|
|
|
|
- return ERR_CAST(inode);
|
|
|
|
|
|
+ if (unlikely(IS_ERR(inode))) {
|
|
|
|
+ if (PTR_ERR(inode) == -ESTALE) {
|
|
|
|
+ ext2_error(dir->i_sb, __func__,
|
|
|
|
+ "deleted inode referenced: %lu",
|
|
|
|
+ ino);
|
|
|
|
+ return ERR_PTR(-EIO);
|
|
|
|
+ } else {
|
|
|
|
+ return ERR_CAST(inode);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
}
|
|
}
|
|
return d_splice_alias(inode, dentry);
|
|
return d_splice_alias(inode, dentry);
|
|
}
|
|
}
|