Hello.

please apply the attached patch.

On Sunday 07 May 2006 01:19, Alexey Polyakov wrote:
> Hi!
> I have two servers running reiser4 as root and data partitions.
> Both are using 2.6.15.x kernels with reiser4-for-2.6.15-1.patch.
> One is i386 UP with md over SATA, another is x86_64 SMP with i2o over
> hardware raid.
> I tried upgrading kernels on both servers to 2.6.16-cks9 (thats
> basically 2.6.16.12 with some non-io related patches applied).
> Both give me the same kind of error a few minutes after boot (during
> intensive io):
>
> May  4 14:12:12 titanic kernel: ----------- [cut here ] ---------
> [please bite here ] ---------
> May  4 14:12:21 titanic kernel: Kernel BUG at
> fs/reiser4/plugin/file/tail_conversion.c:80
> May  4 14:12:21 titanic kernel: invalid opcode: 0000 [1] SMP
> May  4 14:12:21 titanic kernel: CPU 3
> May  4 14:12:21 titanic kernel: Modules linked in:
> May  4 14:12:21 titanic kernel: Pid: 2723, comm: ci Not tainted
> 2.6.16-cks9 #1 May  4 14:12:21 titanic kernel: RIP:
> 0010:[<ffffffff80210f73>]
> <ffffffff80210f73>{get_nonexclusive_access+35}
> May  4 14:12:22 titanic kernel: RSP: 0018:ffff8100f0d6dc88  EFLAGS:
> 00010286 May  4 14:12:32 titanic kernel: RAX: ffff8101d106bd40 RBX:
> ffff8101c7c740f8 RCX: 00002b4bc74f2000
> May  4 14:12:49 titanic kernel: RDX: 0000000000000000 RSI:
> 0000000000000000 RDI: ffff8101c7c740f8
> May  4 14:12:49 titanic kernel: RBP: 0000000000000000 R08:
> ffff810037e05680 R09: 0000000000000000
> May  4 14:12:56 titanic kernel: R10: 0000000000000000 R11:
> 0000000000000000 R12: ffff8101c4ca2080
> May  4 14:13:03 titanic kernel: R13: ffff8100f0d6dde8 R14:
> ffff8101c7c74198 R15: ffff8101debd4200
> May  4 14:13:03 titanic kernel: FS:  00002b4bc73f1b00(0000)
> GS:ffff8101045370c0(0000) knlGS:0000000000000000
> May  4 14:13:03 titanic kernel: CS:  0010 DS: 0000 ES: 0000 CR0:
> 000000008005003b
> May  4 14:13:03 titanic kernel: CR2: 00000000005caff0 CR3:
> 00000000f25b1000 CR4: 00000000000006e0
> May  4 14:13:14 titanic kernel: Process ci (pid: 2723, threadinfo
> ffff8100f0d6c000, task ffff81000c0ad080)
> May  4 14:13:17 titanic kernel: Stack: ffff8101c7c740f8
> ffffffff8022704b ffff8101e07dd928 ffff8101d106bd40
> May  4 14:13:17 titanic kernel:        ffff8101fee3a8f0
> 000000008038fd89 0000000100000000 ffff8101ffcbe020
> May  4 14:13:17 titanic kernel:        000000000023230d
> ffff8101ddabc6d0 May  4 14:13:17 titanic kernel: Call Trace:
> <ffffffff8022704b>{write_extent+1595}
> <ffffffff802294b1>{item_length_by_coord+17}
> May  4 14:13:17 titanic kernel:
> <ffffffff802244a9>{nr_units_extent+9}
> <ffffffff80225df8>{init_coord_extension_extent+120}
> May  4 14:13:17 titanic kernel:
> <ffffffff8020deb6>{find_file_item+182}
> <ffffffff801f25eb>{reiser4_grab+155}
> May  4 14:13:20 titanic kernel:
> <ffffffff80226a10>{write_extent+0} <ffffffff8020f8e5>{write_flow+709}
> May  4 14:13:20 titanic kernel:
> <ffffffff8010b7f1>{error_exit+0} <ffffffff8038d4a2>{__down_read+18}
> May  4 14:13:20 titanic kernel:
> <ffffffff8021030b>{write_unix_file+923}
> <ffffffff80178dac>{vfs_write+236}
> May  4 14:13:20 titanic kernel:
> <ffffffff80178f53>{sys_write+83} <ffffffff8010aaf6>{system_call+126}
> May  4 14:13:20 titanic kernel:
> May  4 14:13:20 titanic kernel: Code: 0f 0b 68 b0 c8 3b 80 c2 50 00
> 66 66 90 e8 3b b6 17 00 48 89
> May  4 14:13:21 titanic kernel: RIP
> <ffffffff80210f73>{get_nonexclusive_access+35} RSP <ffff8100f0d6dc88>
> May  4 14:13:21 titanic kernel:  <4><4>reiser4[ci(2723)]:
> release_unix_file (fs/reiser4/plugin/file/file.c:2670)[vs-44]:
> May  4 14:13:21 titanic kernel: WARNING: out of memory?
> May  4 14:13:21 titanic kernel: <4>reiser4[ci(2723)]:
> release_unix_file (fs/reiser4/plugin/file/file.c:2670)[vs-44]:
> May  4 14:13:21 titanic kernel: WARNING: out of memory?
> May  4 14:13:21 titanic kernel: <4>reiser4[ci(2723)]:
> release_unix_file (fs/reiser4/plugin/file/file.c:2670)[vs-44]:
> May  4 14:13:21 titanic kernel: WARNING: out of memory?
> May  4 14:13:21 titanic kernel: <4>reiser4[ci(2723)]:
> release_unix_file (fs/reiser4/plugin/file/file.c:2670)[vs-44]:
> May  4 14:13:22 titanic kernel: WARNING: out of memory?
> May  4 14:13:23 titanic kernel: <4>reiser4[ci(2723)]:
> release_unix_file (fs/reiser4/plugin/file/file.c:2670)[vs-44]:
> May  4 14:13:25 titanic kernel: WARNING: out of memory?
> May  4 14:13:25 titanic kernel: <4>reiser4[ci(2723)]:
> release_unix_file (fs/reiser4/plugin/file/file.c:2670)[vs-44]:
> May  4 14:13:25 titanic kernel: WARNING: out of memory?
> May  4 14:13:25 titanic kernel: ----------- [cut here ] ---------
> [please bite here ] ---------
>
> After that happens, processes get stuck in D state, and only hard
> reboot helps. Is there any patches that might help with this issue?
> Should I provide any additional information to help with this bug?
>
> Thanks.
>
> --
> Alexey Polyakov
>
> !DSPAM:445d132a126701804284693!

-- 
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