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);
 }
 

Reply via email to