if (tmpde) kfree(tmpde); 
kfree(tmpde); 
static int isofs_read_level3_size(struct inode *inode){	unsigned long bufsize = ISOFS_BUFFER_SIZE(inode);	int high_sierra = ISOFS_SB(inode->i_sb)->s_high_sierra;	struct buffer_head * bh = NULL;	unsigned long block, offset, block_saved, offset_saved;	int i = 0;	int more_entries = 0;	struct iso_directory_record * tmpde = NULL;	struct iso_inode_info *ei = ISOFS_I(inode);	inode->i_size = 0;	/* The first 16 blocks are reserved as the System Area.  Thus,	 * no inodes can appear in block 0.  We use this to flag that	 * this is the last section. */	ei->i_next_section_block = 0;	ei->i_next_section_offset = 0;	block = ei->i_iget5_block;	offset = ei->i_iget5_offset;	do {		struct iso_directory_record * de;		unsigned int de_len;		if (!bh) {			bh = sb_bread(inode->i_sb, block);			if (!bh)				goto out_noread;		}		de = (struct iso_directory_record *) (bh->b_data + offset);		de_len = *(unsigned char *) de;		if (de_len == 0) {			brelse(bh);			bh = NULL;			++block;			offset = 0;			continue;		}		block_saved = block;		offset_saved = offset;		offset += de_len;		/* Make sure we have a full directory entry */		if (offset >= bufsize) {			int slop = bufsize - offset + de_len;			if (!tmpde) {				tmpde = kmalloc(256, GFP_KERNEL);				if (!tmpde)					goto out_nomem;			}			memcpy(tmpde, de, slop);			offset &= bufsize - 1;			block++;			brelse(bh);			bh = NULL;			if (offset) {				bh = sb_bread(inode->i_sb, block);				if (!bh)					goto out_noread;				memcpy((void *)tmpde+slop, bh->b_data, offset);			}			de = tmpde;		}		inode->i_size += isonum_733(de->size);		if (i == 1) {			ei->i_next_section_block = block_saved;			ei->i_next_section_offset = offset_saved;		}		more_entries = de->flags[-high_sierra] & 0x80;		i++;		if (i > 100)			goto out_toomany;	} while (more_entries);out:	kfree(tmpde);	if (bh)		brelse(bh);	return 0;out_nomem:	if (bh)		brelse(bh);	return -ENOMEM;out_noread:	printk(KERN_INFO "ISOFS: unable to read i-node block %lu\n", block);	if (tmpde)		kfree(tmpde);	return -EIO;out_toomany:	printk(KERN_INFO "isofs_read_level3_size: "		"More than 100 file sections ?!?, aborting...\n"	  	"isofs_read_level3_size: inode=%lu\n",		inode->i_ino);	goto out;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/f99d49adf527fa6f7a9c42257fa76bca6b8df1e3/inode.c/clean/fs/isofs/inode.c