Hello
On Sun, 2006-05-07 at 12:35 -0700, Joe Feise wrote:
> rc3-mm1 plus the reiser4-radix-tree-direct-data-fix.patch
>
first version of this patch is insufficient. Please unapply it and try
new version.
> -Joe
>
> dmesg output:
> kernel BUG at fs/reiser4/flush.c:1038!
> invalid opcode: 0000 [#1]
> PREEMPT
> last sysfs file: /class/net/eth2/ifindex
> Modules linked in: pl2303 usbserial softdog cisco_ipsec snd_pcm_oss
> snd_mixer_oss snd_cs46xx gameport snd_rawmidi snd_seq_device snd_ac97_codec
> snd_ac97_bus snd_pcm snd_timer snd soundcore snd_page_alloc zoran i2c_algo_bit
> videodev saa7111 i2c_corepegasus arc4 ppp_mppe ppp_deflate ppp_generic slhc
> usblp
> CPU: 0
> EIP: 0060:[<c01cb0d4>] Tainted: P VLI
> EFLAGS: 00010287 (2.6.17-rc3-mm1 #4)
> EIP is at flush_current_atom+0x1cf/0x247
> eax: e0efc080 ebx: f4b45e00 ecx: f4b45e00 edx: f5c2e000
> esi: f5dabe4c edi: f5daa000 ebp: 00000001 esp: f5dabe0c
> ds: 007b es: 007b ss: 0068
> Process ent:sdb2! (pid: 1832, threadinfo=f5daa000 task=f5d89ab0)
> Stack: <0>f5dabe18 00000001 f5dabe90 00000000 c5db8a40 e0efc080 f5daa000
> f5c21cd8
> 00000000 c01c84b8 f5dabe4c 00000000 f5dabeec f5dabea8 f7e57dcc f5dabe90
> e0efc080 f7e57d80 00000000 f7e57dcc f58d7c00 c01d6b60 00000001 d75ba3ac
> Call Trace:
> <c01c84b8> flush_some_atom+0x245/0x367 <c01d6b60> writeout+0xc8/0x1e7
> <c0175f27> generic_sync_sb_inodes+0x211/0x2a8 <c01d857d>
> entd_flush+0x9f/0xbc
> <c01d8257> entd+0xd5/0x2a3 <c0128bdc> autoremove_wake_function+0x0/0x43
> <c0128bdc> autoremove_wake_function+0x0/0x43 <c01d8182> entd+0x0/0x2a3
> <c01286f4> kthread+0x9c/0xa1 <c0128658> kthread+0x0/0xa1
> <c0100f1d> kernel_thread_helper+0x5/0xb
> Code: 87 c7 04 24 20 72 47 c0 e8 b8 b4 f4 ff e8 ae 84 f3 ff e9 5c ff ff ff e8
> 59
> c2 27 00 e9 28 ff ff ff e8 4f c2 27 00 e9 0f ff ff ff <0f> 0b 0e 04 e5 bd 47
> c0
> e9 f3 fe ff ff 8b 54 24 0c 85 d2 74 09
> EIP: [<c01cb0d4>] flush_current_atom+0x1cf/0x247 SS:ESP 0068:f5dabe0c
> <6>note: ent:sdb2![1832] exited with preempt_count 2
>
>
Reiser4 used to check radix tree emptiness by comparing tree height against 0.
With radix-tree-direct-data.patch not empty tree can have zero height.
This patch makes reiser4 to check tree emptiness using tree root.
Signed-off-by: Vladimir V. Saveliev <[EMAIL PROTECTED]>
diff -puN fs/reiser4/jnode.c~reiser4-radix-tree-direct-data-fix fs/reiser4/jnode.c
fs/reiser4/jnode.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff -puN fs/reiser4/jnode.c~reiser4-radix-tree-direct-data-fix fs/reiser4/jnode.c
--- linux-2.6.17-rc3-mm1/fs/reiser4/jnode.c~reiser4-radix-tree-direct-data-fix 2006-05-08 12:54:12.000000000 +0400
+++ linux-2.6.17-rc3-mm1-vs/fs/reiser4/jnode.c 2006-05-08 12:54:57.000000000 +0400
@@ -432,7 +432,7 @@ static void inode_attach_jnode(jnode * n
inode = node->key.j.mapping->host;
info = reiser4_inode_data(inode);
rtree = jnode_tree_by_reiser4_inode(info);
- if (rtree->height == 0) {
+ if (rtree->rnode == NULL) {
/* prevent inode from being pruned when it has jnodes attached
to it */
write_lock_irq(&inode->i_data.tree_lock);
@@ -464,7 +464,7 @@ static void inode_detach_jnode(jnode * n
/* delete jnode from inode's radix tree of jnodes */
check_me("zam-1046", radix_tree_delete(rtree, node->key.j.index));
- if (rtree->height == 0) {
+ if (rtree->rnode == NULL) {
/* inode can be pruned now */
write_lock_irq(&inode->i_data.tree_lock);
inode->i_data.nrpages--;
_