goto out_nodes; 
goto out_root_i; 
int jffs2_do_fill_super(struct super_block *sb, void *data, int silent){	struct jffs2_sb_info *c;	struct inode *root_i;	int ret;	size_t blocks;	c = JFFS2_SB_INFO(sb);#ifndef CONFIG_JFFS2_FS_WRITEBUFFER	if (c->mtd->type == MTD_NANDFLASH) {		printk(KERN_ERR "jffs2: Cannot operate on NAND flash unless jffs2 NAND support is compiled in.\n");		return -EINVAL;	}	if (c->mtd->type == MTD_DATAFLASH) {		printk(KERN_ERR "jffs2: Cannot operate on DataFlash unless jffs2 DataFlash support is compiled in.\n");		return -EINVAL;	}#endif	c->flash_size = c->mtd->size;	/* 	 * Check, if we have to concatenate physical blocks to larger virtual blocks	 * to reduce the memorysize for c->blocks. (kmalloc allows max. 128K allocation)	 */	c->sector_size = c->mtd->erasesize; 	blocks = c->flash_size / c->sector_size;	if (!(c->mtd->flags & MTD_NO_VIRTBLOCKS)) {		while ((blocks * sizeof (struct jffs2_eraseblock)) > (128 * 1024)) {			blocks >>= 1;			c->sector_size <<= 1;		}		}	/*	 * Size alignment check	 */	if ((c->sector_size * blocks) != c->flash_size) {		c->flash_size = c->sector_size * blocks;				printk(KERN_INFO "jffs2: Flash size not aligned to erasesize, reducing to %dKiB\n",			c->flash_size / 1024);	}	if (c->sector_size != c->mtd->erasesize)		printk(KERN_INFO "jffs2: Erase block size too small (%dKiB). Using virtual blocks size (%dKiB) instead\n", 			c->mtd->erasesize / 1024, c->sector_size / 1024);	if (c->flash_size < 5*c->sector_size) {		printk(KERN_ERR "jffs2: Too few erase blocks (%d)\n", c->flash_size / c->sector_size);		return -EINVAL;	}	c->cleanmarker_size = sizeof(struct jffs2_unknown_node);	/* Joern -- stick alignment for weird 8-byte-page flash here */	/* NAND (or other bizarre) flash... do setup accordingly */	ret = jffs2_flash_setup(c);	if (ret)		return ret;	c->inocache_list = kmalloc(INOCACHE_HASHSIZE * sizeof(struct jffs2_inode_cache *), GFP_KERNEL);	if (!c->inocache_list) {		ret = -ENOMEM;		goto out_wbuf;	}	memset(c->inocache_list, 0, INOCACHE_HASHSIZE * sizeof(struct jffs2_inode_cache *));	if ((ret = jffs2_do_mount_fs(c)))		goto out_inohash;	ret = -EINVAL;	D1(printk(KERN_DEBUG "jffs2_do_fill_super(): Getting root inode\n"));	root_i = iget(sb, 1);	if (is_bad_inode(root_i)) {		D1(printk(KERN_WARNING "get root inode failed\n"));		goto out_nodes;	}	D1(printk(KERN_DEBUG "jffs2_do_fill_super(): d_alloc_root()\n"));	sb->s_root = d_alloc_root(root_i);	if (!sb->s_root)		goto out_root_i;	sb->s_maxbytes = 0xFFFFFFFF;	sb->s_blocksize = PAGE_CACHE_SIZE;	sb->s_blocksize_bits = PAGE_CACHE_SHIFT;	sb->s_magic = JFFS2_SUPER_MAGIC;	if (!(sb->s_flags & MS_RDONLY))		jffs2_start_garbage_collect_thread(c);	return 0; out_root_i:	iput(root_i); out_nodes:	jffs2_free_ino_caches(c);	jffs2_free_raw_node_refs(c);	if (c->mtd->flags & MTD_NO_VIRTBLOCKS)		vfree(c->blocks);	else		kfree(c->blocks); out_inohash:	kfree(c->inocache_list); out_wbuf:	jffs2_flash_cleanup(c);	return ret;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/6dac02a5e1bba0bb88ece50160fc4a64cccf30d1/fs.c/buggy/fs/jffs2/fs.c