From: Alexander Zarochentsev <zam@namesys.com>
To: reiserfs-list@namesys.com
Cc: Alexey Polyakov <alexey.polyakov@gmail.com>
Subject: Re: Kernel BUG at fs/reiser4/plugin/file/tail_conversion.c:80
Date: Thu, 11 May 2006 16:23:57 +0400 [thread overview]
Message-ID: <200605111623.57751.zam@namesys.com> (raw)
In-Reply-To: <b5d90b2a0605061419o66bbefa7r8f90d728afe2e4bf@mail.gmail.com>
[-- Attachment #1: Type: text/plain, Size: 4906 bytes --]
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.
[-- Attachment #2: reiser4-remove-atom_may_exists-from-get_nea.diff --]
[-- Type: text/x-diff, Size: 6004 bytes --]
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);
}
next prev parent reply other threads:[~2006-05-11 12:23 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-05-06 21:19 Kernel BUG at fs/reiser4/plugin/file/tail_conversion.c:80 Alexey Polyakov
2006-05-11 12:23 ` Alexander Zarochentsev [this message]
2006-05-11 20:19 ` Alexey Polyakov
2006-05-15 19:27 ` Alexey Polyakov
2006-05-16 4:25 ` Alexander Zarochentsev
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=200605111623.57751.zam@namesys.com \
--to=zam@namesys.com \
--cc=alexey.polyakov@gmail.com \
--cc=reiserfs-list@namesys.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.