WARNING: at fs/inode.c:884 unlock_new_inode+0x34/0x59()
A message that is not in the archive (sent off-list or not yet received): [email protected]
BTW, after last resume from disk fs was corrupted but fsck managed to fix this error. So I think severity of this issue should be raised.
Quoted 32 lines · Alex
Hi guys,
I'm using linux kernel 3.2-rc3. Since bugzilla.kernel.org is in down I'm writing this email. After resuming from s2disk I get following error:
Nov 27 19:42:38 alex kernel: [ 3827.422675] ------------[ cut here ]------------ Nov 27 19:42:38 alex kernel: [ 3827.422683] WARNING: at fs/inode.c:884 unlock_new_inode+0x34/0x59() Nov 27 19:42:38 alex kernel: [ 3827.422686] Hardware name: 4170CTO Nov 27 19:42:38 alex kernel: [ 3827.422688] Modules linked in: vfat fat usb_storage uas cpufreq_stats rfcomm lockd 8021q garp stp llc fcoe libfcoe libfc scsi_transport_fc scsi_tgt bnep ip6t_REJECT
nf_conntrack_ipv6nf_defrag_ipv6ip6table_filterip6_tablesnf_conntrack_ipv4nf_defrag_ipv4xt_statenf_conntrackhdaps(O)snd_hda_codec_hdmisnd_hda_codec_conexantvirtio_netkvm_intelkvmsnd_hda_intelsnd_hda_codecbtusbsnd_hwdepsnd_seqsnd_seq_devicesnd_pcmsnd_timerarc4 iwlwifi mac80211 cfg80211 wmi e1000e uvcvideo videodev
mediav4l2_compat_ioctl32bluetooth uinput pcspkr joydevthinkpad_acpisndsnd_page_allocsoundcorei2c_i801iTCO_wdtiTCO_vendor_su
pport rfkillbinfmt_miscmicrocode sunrpctp_smapi(O)thinkpad_ec(O)sdhci_pcisdhcimmc_core[last unloaded:scsi_wait_scan]Nov 27 19:42:38 alex kernel: [ 3827.422738] Pid: 968, comm: abrtd Tainted: G W O 3.2.0-0.rc3.git0.1.fc16.x86_64 #1 Nov 27 19:42:38 alex kernel: [ 3827.422740] Call Trace: Nov 27 19:42:38 alex kernel: [ 3827.422744] [<ffffffff810589c2>] warn_slowpath_common+0x83/0x9b Nov 27 19:42:38 alex kernel: [ 3827.422747] [<ffffffff810589f4>] warn_slowpath_null+0x1a/0x1c Nov 27 19:42:38 alex kernel: [ 3827.422750] [<ffffffff8113de44>] unlock_new_inode+0x34/0x59 Nov 27 19:42:38 alex kernel: [ 3827.422754] [<ffffffff8118b6b8>] ext4_new_inode+0xbc6/0xc5b Nov 27 19:42:38 alex kernel: [ 3827.422758] [<ffffffff81196ca1>] ext4_symlink+0x14d/0x2f4 Nov 27 19:42:38 alex kernel: [ 3827.422762] [<ffffffff8113592b>] vfs_symlink+0x54/0x74 Nov 27 19:42:38 alex kernel: [ 3827.422766] [<ffffffff811356a1>] ? user_path_create+0x4d/0x57 Nov 27 19:42:38 alex kernel: [ 3827.422769] [<ffffffff811371b8>] sys_symlinkat+0x6b/0xb2 Nov 27 19:42:38 alex kernel: [ 3827.422773] [<ffffffff81137215>] sys_symlink+0x16/0x18 Nov 27 19:42:38 alex kernel: [ 3827.422777] [<ffffffff81526042>] system_call_fastpath+0x16/0x1b Nov 27 19:42:38 alex kernel: [ 3827.422780] ---[ end trace 9866b4286b488fd4 ]---Kernel config is attached. Please let me know if I can help you with anything to fix this issue
Best regards,
Alex
Quoted 3 lines · Alex
BTW, after last resume from disk fs was corrupted but fsck managed to fix this error. So I think severity of this issue should be raised.
Can you reproduce this reliably? What was running at the time of the s2disk?
What appears to be going on is that insert_inode_locked() is failing at fs/ext4/ialloc.c:887, probably because there's another inode with that inode number already on the superblock's hash list. The error codepath if insert_inode_locked() fail is incorrect; it's going to fail_drop, which tries dropping the inode's dquot (but we haven't calle ddquot_initialize)inode) yet) and calls unlock_new_inode(), but I_NEW hasn't been set because insert_inode_locked().
So the warning is easy to fix; we just need to have it jump to fail instead of fail_drop. But the bigger issue is why did insert_inode_locked() failed in the first place.
Did this error happen *right* after the system resumed, or did some amount of time pass before the warning triggered? This could have happened because the in-memory (or possibly on-disk) copy of the inode allocation bitmap has gotten corrupted, for example.
What was the nature of the file system corruption which e2fsck decided that it need to correct?
Regards,
- Ted
Hi Ted,
Unfortunately my laptop died today and I can't retest this issue. I'll provide more information once and if I repair it.
Thanks,
Alex
Quoted 29 lines · Ted Ts'o
Quoted 3 lines · Alex
BTW, after last resume from disk fs was corrupted but fsck managed to fix this error. So I think severity of this issue should be raised.
Can you reproduce this reliably? What was running at the time of the s2disk?
What appears to be going on is that
insert_inode_locked()is failing atfs/ext4/ialloc.c:887, probably because there's another inode with that inode number already on the superblock's hash list. The error codepath ifinsert_inode_locked()fail is incorrect; it's going tofail_drop, which tries dropping the inode's dquot (but we haven't calle ddquot_initialize)inode) yet) and callsunlock_new_inode(), butI_NEWhasn't been set becauseinsert_inode_locked().So the warning is easy to fix; we just need to have it jump to fail instead of
fail_drop. But the bigger issue is why didinsert_inode_locked()failed in the first place.Did this error happen *right* after the system resumed, or did some amount of time pass before the warning triggered? This could have happened because the in-memory (or possibly on-disk) copy of the inode allocation bitmap has gotten corrupted, for example.
What was the nature of the file system corruption which e2fsck decided that it need to correct?
Regards,
- Ted
A message that is not in the archive (sent off-list or not yet received): [email protected]
Quoted 4 lines · Alex
Hi Ted,
This is full dmesg with suspend to disk. This time no fs errors happened. And unfortunately I don't remember what kind of errors were there last time.
OK, so you have a very large number of warnings, spanning over several seconds. That sounds to me like a memory corruption problem, as opposed to some kind of race that only happens for a symlink creation happening right during the suspend/resume.
I can fix the warning and arrange to print more debugging information so that if this happens again, we get more information, but if you can't reproduce it, I'm not sure there's much more I can do for now.
Regards,
-- Ted
Quoted 6 lines · Theodore Tso
Quoted 4 lines · Alex
Hi Ted,
This is full dmesg with suspend to disk. This time no fs errors happened. And unfortunately I don't remember what kind of errors were there last time.
Quoted 8 lines
OK, so you have a very large number of warnings, spanning over several seconds. That sounds to me like a memory corruption problem, as opposed to some kind of race that only happens for a symlink creation happening right during the suspend/resume.
I can fix the warning and arrange to print more debugging information so that if this happens again, we get more information, but if you can't reproduce it, I'm not sure there's much more I can do for now.
Regards,
-- Ted
Yes I can reproduce this, it happens after every s2disk.
Tanks,
Alex
Quoted 9 lines · Alex
Quoted 8 lines · Theodore Tso
Quoted 4 lines · Alex
Hi Ted,
This is full dmesg with suspend to disk. This time no fs errors happened. And unfortunately I don't remember what kind of errors were there last time.
OK, so you have a very large number of warnings, spanning over several seconds. That sounds to me like a memory corruption problem, as opposed to some kind of race that only happens for a symlink creation happening right during the suspend/resume.
Quoted 7 lines
Quoted 6 lines
I can fix the warning and arrange to print more debugging information so that if this happens again, we get more information, but if you can't reproduce it, I'm not sure there's much more I can do for now.
Regards,
-- Ted
Yes I can reproduce this, it happens after every s2disk.
And FYI a few other users are hitting it, see https://bugzilla.redhat.com/show_bug.cgi?id=744275
Several of the bugs dup'd to that bug are from distinct users.
-Eric
Quoted 7 lines · Ted Ts'o
Quoted 3 lines · Alex
BTW, after last resume from disk fs was corrupted but fsck managed to fix this error. So I think severity of this issue should be raised.
Can you reproduce this reliably? What was running at the time of the s2disk?
Quoted 7 lines
What appears to be going on is that
insert_inode_locked()is failing atfs/ext4/ialloc.c:887, probably because there's another inode with that inode number already on the superblock's hash list. The error codepath ifinsert_inode_locked()fail is incorrect; it's going tofail_drop, which tries dropping the inode's dquot (but we haven't calle ddquot_initialize)inode) yet) and callsunlock_new_inode(), butI_NEWhasn't been set becauseinsert_inode_locked().
OK; this looks to be the result of:
commit 250df6ed274d767da844a5d9f05720b804240197
Author: Dave Chinner <[email protected]> Date: Tue Mar 22 22:23:36 2011 +1100
fs: protect inode->i_state with inode->i_lock
(went in on 2.6.39)
because before that, insert_inode_locked() used to unconditionally do:
- inode->i_state |= I_NEW;
but that's gone now. Now if the function fails it'll return the inode w/o I_NEW set.
ext2/3/4, jffs2, and jfs all call unlock_new_inode() on insert_inode_locked() failure, and all would warn on this path.
I'm still not clear on what's causing insert_inode_locked() to fail, but it used to be harmless (or at least silent) before.
I suppose it makes most sense to fix all callers to not clear I_NEW on failure, unless it's too icky; it does seem weird to have I_NEW set if we return with failure.
-Eric
Quoted 19 lines
So the warning is easy to fix; we just need to have it jump to fail instead of
fail_drop. But the bigger issue is why didinsert_inode_locked()failed in the first place.Did this error happen *right* after the system resumed, or did some amount of time pass before the warning triggered? This could have happened because the in-memory (or possibly on-disk) copy of the inode allocation bitmap has gotten corrupted, for example.
What was the nature of the file system corruption which e2fsck decided that it need to correct?
Regards,
- Ted
--
To unsubscribe from this list: send the line "unsubscribe linux-ext4" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Quoted 36 lines · Eric Sandeen
Quoted 7 lines · Ted Ts'o
Quoted 3 lines · Alex
BTW, after last resume from disk fs was corrupted but fsck managed to fix this error. So I think severity of this issue should be raised.
Can you reproduce this reliably? What was running at the time of the s2disk?
Quoted 7 lines
What appears to be going on is that
insert_inode_locked()is failing atfs/ext4/ialloc.c:887, probably because there's another inode with that inode number already on the superblock's hash list. The error codepath ifinsert_inode_locked()fail is incorrect; it's going tofail_drop, which tries dropping the inode's dquot (but we haven't calle ddquot_initialize)inode) yet) and callsunlock_new_inode(), butI_NEWhasn't been set becauseinsert_inode_locked().OK; this looks to be the result of:
commit
250df6ed274d767da844a5d9f05720b804240197Author: Dave Chinner <[email protected]> Date: Tue Mar 22 22:23:36 2011 +1100fs: protect inode->i_state with inode->i_lock(went in on 2.6.39)
because before that,
insert_inode_locked()used to unconditionally do:-
inode->i_state|=I_NEW;but that's gone now. Now if the function fails it'll return the inode w/o
I_NEWset.ext2/3/4, jffs2, and jfs all call
unlock_new_inode()oninsert_inode_locked()failure, and all would warn on this path.
Quoted 9 lines
I'm still not clear on what's causing
insert_inode_locked()to fail, but it used to be harmless (or at least silent) before.I suppose it makes most sense to fix all callers to not clear
I_NEWon failure, unless it's too icky; it does seem weird to haveI_NEWset if we return with failure.-Eric
OTOH Al thought it would be reasonable to set I_NEW on failure as well, and then we wouldn't have to touch the callers.
-Eric
Quoted 11 lines
Quoted 11 lines
So the warning is easy to fix; we just need to have it jump to fail instead of
fail_drop. But the bigger issue is why didinsert_inode_locked()failed in the first place.Did this error happen *right* after the system resumed, or did some amount of time pass before the warning triggered? This could have happened because the in-memory (or possibly on-disk) copy of the inode allocation bitmap has gotten corrupted, for example.
Quoted 7 lines
Quoted 7 lines
What was the nature of the file system corruption which e2fsck decided that it need to correct?
Regards,
- Ted
--
\