Sven Müller wrote:
Hi,
yesterday I tried a new kernel version (2.6.24-r3). And today in the morning I got the next kernel oops. The problem is still the same:
Access portage via nfs.
The file system should be consistent. At least my machine didn't crash since the last check. And I didn't get any other errors.
The kernel ooops message is:
Mar 7 08:23:46 Blechkasten su[7174]: + pts/4 sm:root
Mar 7 08:30:01 Blechkasten BUG: unable to handle kernel NULL pointer dereference at virtual address 00000050
Mar 7 08:30:01 Blechkasten printing eip: c01a8c7a *pde = 00000000
Mar 7 08:30:01 Blechkasten Oops: 0000 [#1]
Mar 7 08:30:01 Blechkasten Modules linked in: libafs(P) lirc_i2c(F) lirc_dev nvidia(P) tuner tea5767 tda8290 tuner_simple mt20xx tea5761 bttv ir_common videobuf_dma_sg videobuf_core btcx_risc tveeprom
Mar 7 08:30:01 Blechkasten
Mar 7 08:30:01 Blechkasten Pid: 3233, comm: nfsd Tainted: PF (2.6.24-gentoo-r3 #1)
Mar 7 08:30:01 Blechkasten EIP: 0060:[<c01a8c7a>] EFLAGS: 00010286 CPU: 0
Mar 7 08:30:01 Blechkasten EIP is at max_item_size_node40+0xb/0x15
Mar 7 08:30:01 Blechkasten EAX: 00000000 EBX: 00000002 ECX: ec2352b4 EDX: c01ae184
Mar 7 08:30:01 Blechkasten ESI: c04dd9e4 EDI: c045a02a EBP: f4f8fbdc ESP: f4f8fb60
Mar 7 08:30:01 Blechkasten cron[30633]: (root) CMD (test -x /usr/sbin/run-crons && /usr/sbin/run-crons )
Mar 7 08:30:01 Blechkasten DS: 007b ES: 007b FS: 0000 GS: 0000 SS: 0068
Mar 7 08:30:01 Blechkasten Process nfsd (pid: 3233, ti=f4f8e000 task=f4f02ff0 task.ti=f4f8e000)
Mar 7 08:30:01 Blechkasten Stack: c01ae18f c019836d c01a8842 ffffffdc c01a81eb 0000000c 8e0d1a53 f4f8fc58
Mar 7 08:30:01 Blechkasten ec2352b4 f4f8fb9c 00000282 0000fa80 d0dddd00 00000074 e3d49000 c036957f
Mar 7 08:30:01 Blechkasten e3d49000 f4921242 00000074 00000000 00000000 00000000 f4921242 00000042
Mar 7 08:30:01 Blechkasten Call Trace:
Mar 7 08:30:01 Blechkasten [<c01ae18f>] max_name_len_cde+0xb/0xf
Mar 7 08:30:01 Blechkasten [<c019836d>] reiser4_max_filename_len+0x1e/0x1f
Mar 7 08:30:01 Blechkasten [<c01a8842>] is_name_acceptable_common+0x8/0x12
Mar 7 08:30:01 Blechkasten [<c01a81eb>] reiser4_lookup_name+0x2e/0xf4
Mar 7 08:30:01 Blechkasten [<c036957f>] skb_copy_and_csum_bits+0x15f/0x29a
Mar 7 08:30:01 Blechkasten [<c01a89ea>] get_parent_common+0x50/0xbe
Mar 7 08:30:01 Blechkasten [<c03e38de>] __mutex_lock_slowpath+0x1b7/0x1bf
Mar 7 08:30:01 Blechkasten [<c036b115>] memcpy_toiovec+0x27/0x4a
Mar 7 08:30:01 Blechkasten [<c019704f>] reiser4_get_dentry_parent+0x1b/0x1d
^^^^^^^^^^^^^^^^^^^^^^^^^
oh.. the reiser4_context is missed here.
The attached patch will help.
Thanks,
Edward.
The fixup for reiser4-new-export_ops.patch:
Added missed reiser4_{init, exit}_context()
---
linux-2.6.23-mm1/fs/reiser4/export_ops.c | 19 ++++++++++++++-----
1 files changed, 14 insertions(+), 5 deletions(-)
--- linux-2.6.23-mm1/fs/reiser4/export_ops.c.orig
+++ linux-2.6.23-mm1/fs/reiser4/export_ops.c
@@ -257,19 +257,28 @@
{
struct inode *dir;
dir_plugin *dplug;
+ struct dentry *result;
+ reiser4_context *ctx;
assert("nikita-3527", child != NULL);
- /* see comment in reiser4_get_dentry() about following assertion */
- assert("nikita-3528", is_in_reiser4_context());
dir = child->d_inode;
assert("nikita-3529", dir != NULL);
+
+ ctx = reiser4_init_context(dir->i_sb);
+ if (IS_ERR(ctx))
+ return (void *)ctx;
+
dplug = inode_dir_plugin(dir);
assert("nikita-3531", ergo(dplug != NULL, dplug->get_parent != NULL));
- if (dplug != NULL)
- return dplug->get_parent(dir);
- else
+
+ if (unlikely(dplug == NULL)) {
+ reiser4_exit_context(ctx);
return ERR_PTR(RETERR(-ENOTDIR));
+ }
+ result = dplug->get_parent(dir);
+ reiser4_exit_context(ctx);
+ return result;
}
/**