hello, On Friday 24 February 2006 08:35, Alec Burney wrote: > i have been experiencing hard locks (preceded by intense 5< load > averages, disk i/o timeouts, and processes gone astray) that seem to > be related to a possible bug in reiser4. > here is the information that i think is important: > > a sample dmesg from right before a hardlock: > ------------[ cut here ]------------ > kernel BUG at fs/reiser4/plugin/file/tail_conversion.c:29! > invalid opcode: 0000 [#1] > SMP > last sysfs file: /class/vc/vcsa7/dev > Modules linked in: snd_rtctimer > CPU: 0 > EIP: 0060:[<c019c3bb>] Not tainted VLI > EFLAGS: 00210282 (2.6.16-rc3-mm1 #1) > EIP is at get_exclusive_access+0x1b/0x44 > eax: eec1b1ac ebx: ecda70d8 ecx: ecda7140 edx: 00000000 > esi: addee000 edi: eec1b160 ebp: 00000000 esp: dfd89f38 > ds: 007b es: 007b ss: 0068 > Process soffice.bin (pid: 11208, threadinfo=dfd89000 task=e1193a70) > Stack: <0>00000001 c019b956 c013f613 eecbfb74 e8daa560 00000001 > 00005600 00000000 > ecda70d8 ecda7140 addee000 ea8ea7c0 00005600 d06d2740 00005600 > ea8ea7c0 c03b0e10 00000000 c014bbf3 dfd89fa4 addee000 ea8ea7c0 > fffffff7 bfb4a870 Call Trace: > <c019b956> write_unix_file+0x2a4/0x44b <c013f613> > vma_link+0xa2/0xbc <c014bbf3> vfs_write+0xab/0x14c <c014bd32> > sys_write+0x3c/0x62 <c01025bf> sysenter_past_esp+0x54/0x75 > Code: 8d 43 10 e8 5c 54 1a 00 e9 f8 fc ff ff 90 90 90 53 89 c3 b8 00 > f0 ff ff 21 e0 8b 00 8b 80 c8 04 00 00 8b 40 48 83 78 0c 00 74 08 > <0f> 0b 1d 00 e0 58 36 c0 e8 28 61 1a 00 ba 01 00 ff ff 89 d8 f0 >
[...] > my question: can this be fixed, has it been fixed, or can i convert > this drive online to reiserfs. > sorry for such a long message, but this is very important to me. > thank you! would you please try the attached patch. -- Alex.
fs/reiser4/plugin/file/file.c | 9 +++++---- 1 files changed, 5 insertions(+), 4 deletions(-) Index: linux-2.6.16-rc3-mm1/fs/reiser4/plugin/file/file.c =================================================================== --- linux-2.6.16-rc3-mm1.orig/fs/reiser4/plugin/file/file.c +++ linux-2.6.16-rc3-mm1/fs/reiser4/plugin/file/file.c @@ -2454,6 +2454,7 @@ ssize_t write_unix_file(struct file *fil if (inode_get_flag(inode, REISER4_PART_CONV)) { /* we can not currently write to a file which is partially converted */ + txn_restart(ctx); get_exclusive_access(uf_info); result = finish_conversion(inode); drop_exclusive_access(uf_info); @@ -2481,6 +2482,7 @@ ssize_t write_unix_file(struct file *fil 3) convert file to extents to not enter here on each write to mmaped file */ + txn_restart(ctx); get_exclusive_access(uf_info); result = check_pages_unix_file(file, inode); drop_exclusive_access(uf_info); @@ -2535,14 +2537,13 @@ ssize_t write_unix_file(struct file *fil while (left > 0) { int excl = 0; - /* getting exclusive or not exclusive access requires no - transaction open */ - txn_restart_current(); - /* faultin user page */ fault_in_pages_readable(buf, left > PAGE_CACHE_SIZE ? PAGE_CACHE_SIZE : left); + /* getting exclusive or not exclusive access requires no + transaction open */ + txn_restart(ctx); if (inode->i_size == 0) { get_exclusive_access(uf_info); excl = 1;