On Thu 18-04-13 15:07:38, Ted Tso wrote: > On Tue, Apr 09, 2013 at 12:42:37PM -0400, Theodore Ts'o wrote: > > > > Thanks, added to the dev branch for testing. > > > > This patch was causing a reliable failure for xfstests generic/083 > using bigalloc. I bisected down this patch, and then localized the > failure down to the insert_inode_locked() call in __ext4_new_inode() > failing (which means that there is an old inode in the inode hash > lists with the same inode number) > > The error seems to be caused by the error handling code paths. I > believe the problem was caused by clear_nlink() and unlock_new_inode() > getting called in some error cleanup paths when the inode that hadn't > yet been inserted into inode hash lists. > > Here is a revamped patch which has a cleaned up set of error paths. > The only change is in the cleanup paths, and this causes the > generic/083 test for bigalloc to pass where it was previously failing. Thanks for catching this. But there's a bug in the new error handling as well: > @@ -733,13 +750,17 @@ repeat_in_this_group: > handle_type, nblocks); > if (IS_ERR(handle)) { > err = PTR_ERR(handle); > - goto fail; > + ext4_std_error(sb, err); > + goto out; > } > + Extra empty line... > @@ -951,24 +972,17 @@ got: > > ext4_debug("allocating inode %lu\n", inode->i_ino); > trace_ext4_allocate_inode(inode, dir, mode); > - goto really_out; > -fail: > - ext4_std_error(sb, err); > -out: > - iput(inode); > - ret = ERR_PTR(err); > -really_out: > brelse(inode_bitmap_bh); > return ret; > > fail_free_drop: > dquot_free_inode(inode); > - > fail_drop: > - dquot_drop(inode); > inode->i_flags |= S_NOQUOTA; > clear_nlink(inode); > unlock_new_inode(inode); > +out: > + dquot_drop(inode); > iput(inode); > brelse(inode_bitmap_bh); > return ERR_PTR(err); You need to move inode->i_flags |= S_NOQUOTA; along with dquot_drop() call as dquot_drop() will do nothing on an inode marked with S_NOQUOTA so we leak dquot references... Honza -- Jan Kara <jack@xxxxxxx> SUSE Labs, CR -- To unsubscribe from this list: send the line "unsubscribe linux-ext4" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html