static int try_bnode_merge(struct sb *sb, struct buffer_head *intobuf, struct buffer_head *frombuf) { if(DEBUG_MODE_K==1) { printf("\t\t\t\t%25s[K] %25s %4d #in\n",__FILE__,__func__,__LINE__); } struct bnode *into = bufdata(intobuf); struct bnode *from = bufdata(frombuf); /* Try to merge nodes */ if (bnode_merge_nodes(sb, into, from)) { /* * We know frombuf is redirected and dirty. So, in * here, we can just cancel bnode_redirect by bfree(), * instead of defered_bfree() * FIXME: we can optimize freeing bnode without * bnode_redirect, and if we did, this is not true. */ bfree(sb, bufindex(frombuf), 1); log_bnode_merge(sb, bufindex(frombuf), bufindex(intobuf)); return 1; } return 0; }
static int try_bnode_merge(struct sb *sb, struct buffer_head *intobuf, struct buffer_head *frombuf) { struct bnode *into = bufdata(intobuf); struct bnode *from = bufdata(frombuf); /* Try to merge nodes */ if (bnode_merge_nodes(sb, into, from)) { /* * We know frombuf is redirected and dirty. So, in * here, we can just cancel bnode_redirect by bfree(), * instead of defered_bfree() * FIXME: we can optimize freeing bnode without * bnode_redirect, and if we did, this is not true. */ bfree(sb, bufindex(frombuf), 1); log_bnode_merge(sb, bufindex(frombuf), bufindex(intobuf)); return 1; } return 0; }