reiser4 crash

From: Andrew Benton
Date: Sat Dec 04 2004 - 06:48:46 EST


I've been using reiser4 for a couple of months. A couple of days ago I
did something stupid with Abiword, the disk started thrashing and as the
system crashed it left this on the screen

------------[ cut here ]------------
kernel BUG at fs/reiser4/plugin/file/tail_conversion.c:58!
invalid operand:0000 [#1]
SMP
Modules linked in: nvidia
CPU: 0
EIP: 0060:[<c020144e>] Tainted: P VLI
EFLAGS: 00010282 (2.6.10-rc2-bk13)
EIP is at get_nonexclusive_access+0x29/0x33
eax: df033eac ebx: df032000 ecx: d96fee80 edx: de5a70dc
esi: 00000000 edi: de5a70dc ebp: de5a7144 esp:df033d84
ds: 007b es: 007b ss: 0068
Process syslogd (pid: 1488, threadinfo=df032000 task=df7df020)
Stack: c0200633 de5a70dc 0804dcc7 00000001 00000001 df033bdc 00000000
df032000
00000000 00000001 00000001 00000001 00000000 00000001 00000001
c13a0a40
de91d144 de91d10c c0200183 df033ddc 0804b000 c01c0492 d96fee80
00101cca
Call Trace:
[<c0200633>] write_unix_file+0x2a1/0x45b
[<c0200183>] unix_file_filemap_nopage+0xaa/0xcf
[<c01c0492>] atom_should_commit+0x5a/0x60
[<c01bd241>] init_context+0x75/0xb4
[<c01d3f46>] reiser4_write+0x8f/0xfc
[<c0261e36>] copy_from_user+0x42/0x70
[<c01524b0>] do_readv_writev+0x170/0x29a
[<c01d3eb7>] reiser4_write+0x0/0xfc
[<c037515f>] sys_recv+0x37/0x3b
[<c015268e>] vfs_writev+0x58/0x5c
[<c0152763>] sys_writev+0x51/0x80
[<c010264d>] sysenter_past_esp+0x52/0x71
Code: 00 c3 b8 00 e0 ff ff 21 e0 8b 00 8b 80 d4 04 00 00 8b 54 24 04 8b 40 44 8b 48 0c 85 c9 75 0c 89 d0 f0 ff 00 0f 88 b8 11 00 00 c3 <0f> 0b 3a 00 e4 58 43 c0 eb ea 8b 44 24 04 ba ff ff ff ff f0 0f

To me this looked very similar to http://www.uwsg.iu.edu/hypermail/linux/kernel/0411.3/0493.html so I applied Vladimir Saveliev's patch, recompiled and the patch seems to have done the trick.

# This is a BitKeeper generated diff -Nru style patch.
#
# ChangeSet
# 2004/11/23 14:07:34+03:00 vs@xxxxxxxxxxxxxxxxxxxxx
# read_unix_file: missing calls to txn_restart() are added
#
# plugin/file/file.c
# 2004/11/23 14:07:31+03:00 vs@xxxxxxxxxxxxxxxxxxxxx +4 -1
# read_unix_file: missing calls to txn_restart() are added
#
diff -Nru a/plugin/file/file.c b/plugin/file/file.c
--- a/plugin/file/file.c 2004-11-23 14:45:34 +03:00
+++ b/plugin/file/file.c 2004-11-23 14:45:34 +03:00
@@ -1741,6 +1741,8 @@
while (left > 0) {
size_t to_read;

+ txn_restart_current();
+
size = i_size_read(inode);
if (*off >= size)
/* position to read from is past the end of file */
@@ -1774,7 +1776,6 @@
if (user_space)
reiser4_put_user_pages(pages, nr_pages);
drop_nonexclusive_access(uf_info);
- txn_restart_current();

if (read < 0) {
result = read;
@@ -1974,6 +1975,8 @@

drop_nonexclusive_access(unix_file_inode_data(inode));
up_read(&reiser4_inode_data(inode)->coc_sem);
+
+ txn_restart_current();

reiser4_exit_context(&ctx);
return page;

Now if I give Abiword further abuse, memory fills, the disk thrashes but when the swap partition is about half full Abiword caves and the system recovers.
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/