Re: 2.6.10-rc2-mm3, reiser4 and subversion

From: Vladimir Saveliev
Date: Sat Nov 27 2004 - 06:10:27 EST


Hello

On Sat, 2004-11-27 at 00:33, Florian Engelhardt wrote:
> Hello,
>
> i had some serious trouble with stability in the last time. Sometimes my
> box freezes and was not leaving any log messages in /var/log but
> yesterday, when i was trying to commit a few changes to my local
> repository, i got some strange error messages from subversion, followed
> by a complete freezed computer :(
> After i was rebooting, i found this error message in /var/log/kern.log
>
> ------------[ cut here ]------------
> kernel BUG at fs/reiser4/plugin/file/tail_conversion.c:58!

Please try with this patch

> invalid operand: 0000 [#1]
> PREEMPT
> Modules linked in: lirc_serial lirc_dev
> CPU: 0
> EIP: 0060:[<c0212918>] Tainted: P VLI
> EFLAGS: 00010282 (2.6.10-rc2-mm3)
> EIP is at get_nonexclusive_access+0x28/0x40
> eax: f56f5f24 ebx: f5346330 ecx: f716bc40 edx: f53462d8
> esi: f5346300 edi: f53462d8 ebp: f6d0fcd4 esp: f56f5c70
> ds: 007b es: 007b ss: 0068
> Process svnadmin (pid: 10782, threadinfo=f56f4000 task=f707c040)
> Stack: c02114d7 f53462d8 f783f800 00000000 00000000 00000000 00000000
> 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
> 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
> 00000000 Call Trace:
> [<c02114d7>] unix_file_filemap_nopage+0x67/0xd0
> [<c0145386>] do_no_page+0xc6/0x390
> [<c0145940>] handle_mm_fault+0x1c0/0x200
> [<c0143c17>] follow_page+0x27/0x30
> [<c0143dbe>] get_user_pages+0x15e/0x3d0
> [<c021099a>] reiser4_get_user_pages+0x9a/0xd0
> [<c0210f96>] read_unix_file+0x266/0x2f0
> [<c01c92a5>] init_context+0x75/0xc0
> [<c01e20df>] reiser4_read+0x8f/0xf0
> [<c0160581>] sys_fstat64+0x31/0x40
> [<c015584a>] vfs_read+0x13a/0x180
> [<c0155c84>] sys_pread64+0x64/0x80
> [<c0103191>] sysenter_past_esp+0x52/0x71
> Code: 00 00 00 b8 00 e0 ff ff 8b 54 24 04 21 e0 8b 00 8b 80 b8 04 00 00
> 8b 40 3c 8b 48 08 85 c9 75 0b 89 d0 ff 00 0f 88 5a 12 00 00 c3 <0f> 0b
> 3a 00 1c ed 49 c0 eb eb 8d b4 26 00 00 00 00 8d bc 27 00
>
> >From now on, every time i try to do execute "svnadmin recover" (to
> recover the repository) or "svnadmin create", the system freezes. I am
> not able to start any new programms, nor can i save open files to the
> harddisk, but i am able to execute some simple commands like ls and i
> can edit opened files in vi. If i execute "svnadmin create" for the
> second time, the system totaly freezes and i am unable to anything, only
> hit the reboot button.
>
> Executing "fsck.reiser4 --check /dev/sda2" (my root partition) just
> tells me that everything is fine.
>
> Kind regards
>
> Florian Engelhardt
# 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;