From: Miklos Szeredi Fix a spurious BUG in an unlikely race, where at least three parallel lookups return the same inode, but with different file type. This has not yet been observed in real life. Allowing unlimited retries could delay fuse_iget() indefinitely, but this is really for the broken userspace filesystem to worry about. Signed-off-by: Miklos Szeredi Signed-off-by: Andrew Morton --- fs/fuse/inode.c | 3 --- 1 files changed, 3 deletions(-) diff -puN fs/fuse/inode.c~fuse-fix-spurious-bug fs/fuse/inode.c --- a/fs/fuse/inode.c~fuse-fix-spurious-bug +++ a/fs/fuse/inode.c @@ -172,7 +172,6 @@ struct inode *fuse_iget(struct super_blo struct inode *inode; struct fuse_inode *fi; struct fuse_conn *fc = get_fuse_conn_super(sb); - int retried = 0; retry: inode = iget5_locked(sb, nodeid, fuse_inode_eq, fuse_inode_set, &nodeid); @@ -186,11 +185,9 @@ struct inode *fuse_iget(struct super_blo fuse_init_inode(inode, attr); unlock_new_inode(inode); } else if ((inode->i_mode ^ attr->mode) & S_IFMT) { - BUG_ON(retried); /* Inode has changed type, any I/O on the old should fail */ make_bad_inode(inode); iput(inode); - retried = 1; goto retry; } _