Hello
please check whether the attached patch helps.
On Wednesday 10 May 2006 14:56, Timo Kokkonen wrote:
> Hello,
>
> I was able to produce this bug on two different computers running the
> same kernel version and same patches and same task. Each time I run
> dispatch-conf (I'm running on gentoo) to update the config files on
> /etc, it gives the following output:
>
> RCS file: /etc/config-archive/usr/lib/X11/xkb/xkbcomp,v
> 1.1 locked
> ci: RCS file /etc/config-archive/usr/lib/X11/xkb/xkbcomp,v is in use
> /etc/config-archive/usr/lib/X11/xkb/xkbcomp,v -->
> /etc/config-archive/usr/lib/X11/xkb/xkbcomp
> revision 1.1.1.1
> writable /etc/config-archive/usr/lib/X11/xkb/xkbcomp exists; remove
> it? [ny](n):
>
>
> And right after that I can see this message in kernel log:
>
> May 10 11:26:32 kaatokone2 [4296234.613000] ------------[ cut here
> ]------------
> May 10 11:26:32 kaatokone2 [4296234.613000] kernel BUG at
> fs/reiser4/plugin/file/tail_conversion.c:80!
> May 10 11:26:32 kaatokone2 [4296234.613000] invalid opcode: 0000 [#1]
> May 10 11:26:32 kaatokone2 [4296234.613000] PREEMPT
> May 10 11:26:32 kaatokone2 [4296234.613000] Modules linked in:
> w83627hf w83781d hwmon_vid eeprom i2c_isa
> May 10 11:26:32 kaatokone2 [4296234.613000] CPU: 0
> May 10 11:26:32 kaatokone2 [4296234.613000] EIP: 0060:[<b019ec1f>]
> Not tainted VLI
> May 10 11:26:32 kaatokone2 [4296234.613000] EFLAGS: 00210286
> (2.6.16-gentoo-r7 #1)
> May 10 11:26:32 kaatokone2 [4296234.613000] EIP is at
> get_nonexclusive_access+0x23/0x36
> May 10 11:26:32 kaatokone2 [4296234.613000] eax: ef7644c4 ebx:
> 00000000 ecx: a7e8b000 edx: e5d0c414
> May 10 11:26:32 kaatokone2 [4296234.613000] esi: e5d0c414 edi:
> e5d0c46c ebp: e5d59e9c esp: e5d59dc4
> May 10 11:26:32 kaatokone2 [4296234.613000] ds: 007b es: 007b ss:
> 0068 May 10 11:26:32 kaatokone2 [4296234.613000] Process rcs (pid:
> 8422, threadinfo=e5d58000 task=e5cf2ab0)
> May 10 11:26:32 kaatokone2 [4296234.613000] Stack: <0>b01b18e9
> e5d0c414 00000000 00000000 34000000 e5d58000 b16ba260 00000000
> May 10 11:26:32 kaatokone2 [4296234.613000] e5eb8780 b01b1ccd
> e5d0c46c e5d59e9c eed8e8c0 eed8e8d0 eed8e8d0 00000002
> May 10 11:26:32 kaatokone2 [4296234.613000] 00000001 e5d59e9c
> 00001000 00000001 efeea800 efded414 00391f78 00000000
> May 10 11:26:32 kaatokone2 [4296234.613000] Call Trace:
> May 10 11:26:32 kaatokone2 [4296234.613000] [<b01b18e9>]
> extent_balance_dirty_pages+0x13a/0x145
> May 10 11:26:32 kaatokone2 [4296234.613000] [<b01b1ccd>]
> extent_write_flow+0x3d9/0x4e7
> May 10 11:26:32 kaatokone2 [4296234.613000] [<b01b1f0a>]
> write_extent+0x0/0x36
> May 10 11:26:32 kaatokone2 [4296234.613000] [<b019dc17>]
> append_and_or_overwrite+0x24f/0x2fd
> May 10 11:26:32 kaatokone2 [4296234.613000] [<b019dd0c>]
> write_flow+0x47/0x50
> May 10 11:26:32 kaatokone2 [4296234.613000] [<b019de92>]
> write_file+0x5c/0x7a
> May 10 11:26:32 kaatokone2 [4296234.613000] [<b019e177>]
> write_unix_file+0x2c7/0x444
> May 10 11:26:32 kaatokone2 [4296234.613000] [<b014bd9e>]
> vfs_write+0x87/0x11b
> May 10 11:26:32 kaatokone2 [4296234.613000] [<b014bed0>]
> sys_write+0x3b/0x63
> May 10 11:26:32 kaatokone2 [4296234.613000] [<b0102a93>]
> sysenter_past_esp+0x54/0x75
> May 10 11:26:32 kaatokone2 [4296234.613000] Code: 0f 85 b5 0d 00 00
> c3 c3 83 7c 24 08 00 8b 54 24 04 75 20 b8 00 e0 ff ff 21 e0 8b 00 8b
> 80 b4 04 00 00 8b 40 40 83 78 08 00 74 08 <0f> 0b 50 00 ba cf 43 b0
> 89 d0 ff 00 0f 88 92 0d 00 00 c3 8b 54
> May 10 11:26:32 kaatokone2 [4296234.613000]
> <4><4>reiser4[rcs(8422)]: release_unix_file
> (fs/reiser4/plugin/file/file.c:2670)[vs-44]: May 10 11:26:32
> kaatokone2 [4296234.614000] WARNING: out of memory? May 10 11:26:32
> kaatokone2 [4296234.614000] <4>reiser4[rcs(8422)]: release_unix_file
> (fs/reiser4/plugin/file/file.c:2670)[vs-44]: May 10 11:26:32
> kaatokone2 [4296234.614000] WARNING: out of memory? May 10 11:26:32
> kaatokone2 [4296234.614000] <4>reiser4[rcs(8422)]: release_unix_file
> (fs/reiser4/plugin/file/file.c:2670)[vs-44]: May 10 11:26:32
> kaatokone2 [4296234.614000] WARNING: out of memory? May 10 11:26:32
> kaatokone2 [4296234.614000] <4>reiser4[rcs(8422)]: release_unix_file
> (fs/reiser4/plugin/file/file.c:2670)[vs-44]: May 10 11:26:32
> kaatokone2 [4296234.614000] WARNING: out of memory? May 10 11:26:32
> kaatokone2 [4296234.614000] <4>reiser4[rcs(8422)]: release_unix_file
> (fs/reiser4/plugin/file/file.c:2670)[vs-44]: May 10 11:26:32
> kaatokone2 [4296234.614000] WARNING: out of memory?
>
>
> After a reboot and running dispatch-conf again I get the exact same
> error message again. I got this same bug on the another computer
> aswell, during exact same conditions (running dispatch-conf, it even
> complained about the same filename). Running reiser4.fsck didn't
> reveal any problems at all on that computer. Booting with 2.6.15.1
> (with gentoo-sources-2.6.15-r1 patches) and reiser4-2.6.15.1 didn't
> crash and dispatch-conf finished updating the files normally.
>
> So, now I have this computer that I can make to crash every time by
> running dispatch-conf. I can keep the computer intact and run further
> diagnostics on it, if necessary. If there is any other info you need
> to know, let me know what you want and I try to provide the info you
> need to get this solved.
>
>
> Timo Kokkonen
>
> !DSPAM:4461c711169651806120903!
--
Alex.
fs/reiser4/plugin/file/file.c | 17 ++++++++---------
fs/reiser4/plugin/file/file.h | 2 +-
fs/reiser4/plugin/file/funcs.h | 5 -----
fs/reiser4/plugin/file/tail_conversion.c | 12 +++---------
fs/reiser4/plugin/item/extent_file_ops.c | 3 ++-
fs/reiser4/plugin/item/tail.c | 3 ++-
6 files changed, 16 insertions(+), 26 deletions(-)
Index: linux-2.6.17-rc3-mm1/fs/reiser4/plugin/item/extent_file_ops.c
===================================================================
--- linux-2.6.17-rc3-mm1.orig/fs/reiser4/plugin/item/extent_file_ops.c
+++ linux-2.6.17-rc3-mm1/fs/reiser4/plugin/item/extent_file_ops.c
@@ -804,10 +804,11 @@ extent_balance_dirty_pages(struct inode
f->length > PAGE_CACHE_SIZE ?
PAGE_CACHE_SIZE : f->length);
+ txn_restart_current();
if (excl)
get_exclusive_access(uf_info);
else
- get_nonexclusive_access(uf_info, 0);
+ get_nonexclusive_access(uf_info);
}
return 0;
}
Index: linux-2.6.17-rc3-mm1/fs/reiser4/plugin/item/tail.c
===================================================================
--- linux-2.6.17-rc3-mm1.orig/fs/reiser4/plugin/item/tail.c
+++ linux-2.6.17-rc3-mm1/fs/reiser4/plugin/item/tail.c
@@ -507,10 +507,11 @@ tail_balance_dirty_pages(struct address_
} else
drop_nonexclusive_access(uf_info);
reiser4_throttle_write(inode);
+ txn_restart_current();
if (excl)
get_exclusive_access(uf_info);
else
- get_nonexclusive_access(uf_info, 0);
+ get_nonexclusive_access(uf_info);
}
return 0;
}
Index: linux-2.6.17-rc3-mm1/fs/reiser4/plugin/file/file.c
===================================================================
--- linux-2.6.17-rc3-mm1.orig/fs/reiser4/plugin/file/file.c
+++ linux-2.6.17-rc3-mm1/fs/reiser4/plugin/file/file.c
@@ -1597,7 +1597,7 @@ writepages_unix_file(struct address_spac
break;
}
} else
- get_nonexclusive_access(uf_info, 0);
+ get_nonexclusive_access(uf_info);
while (to_capture > 0) {
pgoff_t start;
@@ -2023,7 +2023,7 @@ read_unix_file(struct file *file, char _
while (left > 0) {
txn_restart_current();
- get_nonexclusive_access(uf_info, 0);
+ get_nonexclusive_access(uf_info);
size = i_size_read(inode);
if (*off >= size) {
@@ -2177,7 +2177,7 @@ append_and_or_overwrite(hint_t * hint, s
if (!exclusive) {
drop_exclusive_access(uf_info);
txn_restart_current();
- get_nonexclusive_access(uf_info, 0);
+ get_nonexclusive_access(uf_info);
}
if (result)
return result;
@@ -2531,19 +2531,18 @@ 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_current();
if (inode->i_size == 0) {
get_exclusive_access(uf_info);
excl = 1;
} else {
- get_nonexclusive_access(uf_info, 0);
+ get_nonexclusive_access(uf_info);
excl = 0;
}
@@ -3015,7 +3014,7 @@ sendfile_unix_file(struct file *file, lo
mutex_unlock(&inode->i_mutex);
uf_info = unix_file_inode_data(inode);
- get_nonexclusive_access(uf_info, 0);
+ get_nonexclusive_access(uf_info);
result = generic_file_sendfile(file, ppos, count, actor, target);
drop_nonexclusive_access(uf_info);
error:
Index: linux-2.6.17-rc3-mm1/fs/reiser4/plugin/file/file.h
===================================================================
--- linux-2.6.17-rc3-mm1.orig/fs/reiser4/plugin/file/file.h
+++ linux-2.6.17-rc3-mm1/fs/reiser4/plugin/file/file.h
@@ -104,7 +104,7 @@ typedef struct unix_file_info {
struct unix_file_info *unix_file_inode_data(const struct inode *inode);
void get_exclusive_access(unix_file_info_t *);
void drop_exclusive_access(unix_file_info_t *);
-void get_nonexclusive_access(unix_file_info_t *, int);
+void get_nonexclusive_access(unix_file_info_t *);
void drop_nonexclusive_access(unix_file_info_t *);
int try_to_get_nonexclusive_access(unix_file_info_t *);
Index: linux-2.6.17-rc3-mm1/fs/reiser4/plugin/file/funcs.h
===================================================================
--- linux-2.6.17-rc3-mm1.orig/fs/reiser4/plugin/file/funcs.h
+++ linux-2.6.17-rc3-mm1/fs/reiser4/plugin/file/funcs.h
@@ -1,11 +1,6 @@
/* Copyright 2001, 2002, 2003, 2004 by Hans Reiser, licensing governed by reiser4/README */
/* this prototypes functions used by both file.c and tail_conversion.c */
-void get_exclusive_access(unix_file_info_t *);
-void drop_exclusive_access(unix_file_info_t *);
-void get_nonexclusive_access(unix_file_info_t *, int);
-void drop_nonexclusive_access(unix_file_info_t *);
-
int tail2extent(unix_file_info_t *);
int extent2tail(unix_file_info_t *);
int finish_conversion(struct inode *inode);
Index: linux-2.6.17-rc3-mm1/fs/reiser4/plugin/file/tail_conversion.c
===================================================================
--- linux-2.6.17-rc3-mm1.orig/fs/reiser4/plugin/file/tail_conversion.c
+++ linux-2.6.17-rc3-mm1/fs/reiser4/plugin/file/tail_conversion.c
@@ -69,18 +69,12 @@ static void nea_grabbed(unix_file_info_t
*
* Nonexclusive access is obtained on a file before read, write, readpage.
*/
-void get_nonexclusive_access(unix_file_info_t *uf_info, int atom_may_exist)
+void get_nonexclusive_access(unix_file_info_t *uf_info)
{
assert("nikita-3029", schedulable());
- /* unix_file_filemap_nopage may call this when current atom exist already */
- assert("nikita-3361",
- ergo(atom_may_exist == 0,
- get_current_context()->trans->atom == NULL));
- BUG_ON(atom_may_exist == 0
- && get_current_context()->trans->atom != NULL);
-
+ assert("nikita-3361", get_current_context()->trans->atom == NULL);
+ BUG_ON(get_current_context()->trans->atom != NULL);
down_read(&uf_info->latch);
-
nea_grabbed(uf_info);
}