#endif 
static struct hfs_bnode *__hfs_bnode_create(struct hfs_btree *tree, u32 cnid){	struct super_block *sb;	struct hfs_bnode *node, *node2;	struct address_space *mapping;	struct page *page;	int size, block, i, hash;	loff_t off;	if (cnid >= tree->node_count) {		printk("HFS+-fs: request for non-existent node %d in B*Tree\n", cnid);		return NULL;	}	sb = tree->inode->i_sb;	size = sizeof(struct hfs_bnode) + tree->pages_per_bnode *		sizeof(struct page *);	node = kmalloc(size, GFP_KERNEL);	if (!node)		return NULL;	memset(node, 0, size);	node->tree = tree;	node->this = cnid;	set_bit(HFS_BNODE_NEW, &node->flags);	atomic_set(&node->refcnt, 1);	dprint(DBG_BNODE_REFS, "new_node(%d:%d): 1\n",	       node->tree->cnid, node->this);	init_waitqueue_head(&node->lock_wq);	spin_lock(&tree->hash_lock);	node2 = hfs_bnode_findhash(tree, cnid);	if (!node2) {		hash = hfs_bnode_hash(cnid);		node->next_hash = tree->node_hash[hash];		tree->node_hash[hash] = node;		tree->node_hash_cnt++;	} else {		spin_unlock(&tree->hash_lock);		kfree(node);		wait_event(node2->lock_wq, !test_bit(HFS_BNODE_NEW, &node2->flags));		return node2;	}	spin_unlock(&tree->hash_lock);	mapping = tree->inode->i_mapping;	off = (loff_t)cnid << tree->node_size_shift;	block = off >> PAGE_CACHE_SHIFT;	node->page_offset = off & ~PAGE_CACHE_MASK;	for (i = 0; i < tree->pages_per_bnode; block++, i++) {		page = read_cache_page(mapping, block, (filler_t *)mapping->a_ops->readpage, NULL);		if (IS_ERR(page))			goto fail;		if (PageError(page)) {			page_cache_release(page);			goto fail;		}#if !REF_PAGES		page_cache_release(page);#endif		node->page[i] = page;	}	return node;fail:	set_bit(HFS_BNODE_ERROR, &node->flags);	return node;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/a5e3985fa014029eb6795664c704953720cc7f7d/bnode.c/clean/fs/hfsplus/bnode.c