reiser4: fix kill_hook_internal
PATCH 1/1 reiser4: fix kill_hook_internal
Problem:
Failed assertion (nikita-2754): child znode is not loaded when looking at its number of items in kill_hook_internal(). Nobody cares about its loading.
Fixup:
Added missed zload/zrelse of the child.
--- linux-2.6.25-mm1/fs/reiser4/plugin/item/internal.c | 18 +++++++++++++----- 1 files changed, 13 insertions(+), 5 deletions(-)
fs/reiser4/plugin/item/internal.c renamed from fs/reiser4/plugin/item/internal.c.orig +13 -5
@@ -308,6 +308,7 @@ struct carry_kill_data *p UNUSED_ARG) {znode *child; +int result =0 ;assert ("nikita-1222" , item !=NULL );assert ("nikita-1224" , from ==0 );
@@ -316,7 +317,14 @@ child =znode_at (item, item->node);if (IS_ERR (child))return PTR_ERR (child); -else if (node_is_empty (child)) { +assert ("edward-1560" , child !=NULL ); + + result =zload (child); +if (result) { +zput (child); +return result; + } +if (node_is_empty (child)) {reiser4_tree *tree;assert ("nikita-1397" ,znode_is_write_locked (child));
@@ -328,14 +336,14 @@init_parent_coord (&child->in_parent,NULL ); --item->node->c_count;write_unlock_tree (tree); -zput (child); -return 0 ; }else {warning ("nikita-1223" ,"Cowardly refuse to remove link to non-empty node" ); -zput (child); -return RETERR (-EIO ); + result =RETERR (-EIO ); } +zrelse (child); +zput (child); +return result; }/* hook called by ->shift() node plugin method when iternal item was just