|
@@ -1077,8 +1077,16 @@ static struct dentry *ext4_lookup(struct inode *dir, struct dentry *dentry, stru
|
|
return ERR_PTR(-EIO);
|
|
return ERR_PTR(-EIO);
|
|
}
|
|
}
|
|
inode = ext4_iget(dir->i_sb, ino);
|
|
inode = ext4_iget(dir->i_sb, ino);
|
|
- if (IS_ERR(inode))
|
|
|
|
- return ERR_CAST(inode);
|
|
|
|
|
|
+ if (unlikely(IS_ERR(inode))) {
|
|
|
|
+ if (PTR_ERR(inode) == -ESTALE) {
|
|
|
|
+ ext4_error(dir->i_sb, __func__,
|
|
|
|
+ "deleted inode referenced: %u",
|
|
|
|
+ ino);
|
|
|
|
+ return ERR_PTR(-EIO);
|
|
|
|
+ } else {
|
|
|
|
+ return ERR_CAST(inode);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
}
|
|
}
|
|
return d_splice_alias(inode, dentry);
|
|
return d_splice_alias(inode, dentry);
|
|
}
|
|
}
|