--- /dev/null
+Index: linux-stage/fs/ext4/inode.c
+===================================================================
+--- linux-stage.orig/fs/ext4/inode.c
++++ linux-stage/fs/ext4/inode.c
+@@ -4145,6 +4145,8 @@ struct inode *ext4_iget(struct super_blo
+ if (inode->i_mode == 0 ||
+ !(EXT4_SB(inode->i_sb)->s_mount_state & EXT4_ORPHAN_FS)) {
+ /* this inode is deleted */
++ printk("ext4_iget() returns ESTALE for inode %lu (%p)"
++ "\n", ino, inode);
+ brelse(bh);
+ ret = -ESTALE;
+ goto bad_inode;
if (dir_dentry == NULL)
filter_parent_unlock(dparent);
if (IS_ERR(dchild)) {
- CERROR("%s: child lookup error %ld\n", obd->obd_name,
- PTR_ERR(dchild));
+ CERROR("%s: child lookup error for object O/%.*s/%s (%ld)\n",
+ obd->obd_name, dparent->d_name.len, dparent->d_name.name,
+ name, PTR_ERR(dchild));
RETURN(dchild);
}
cleanup_phase = 1; /* filter_parent_unlock(dparent) */
dchild = filter_fid2dentry(obd, dparent, group, next_id);
+ if (IS_ERR(dchild) && PTR_ERR(dchild) == -ESTALE) {
+ CERROR("parent %p child %p\n", dparent, dchild);
+ LBUG();
+ }
if (IS_ERR(dchild))
GOTO(cleanup, rc = PTR_ERR(dchild));
cleanup_phase = 2; /* f_dput(dchild) */