if (sbi->s_ucg[i]) brelse (sbi->s_ucg[i]); 
if (sbi->s_ucg[i]) brelse (sbi->s_ucg[i]); 
static int ufs_read_cylinder_structures (struct super_block *sb) {	struct ufs_sb_info * sbi = UFS_SB(sb);	struct ufs_sb_private_info * uspi;	struct ufs_super_block *usb;	struct ufs_buffer_head * ubh;	unsigned char * base, * space;	unsigned size, blks, i;	unsigned flags = 0;		UFSD(("ENTER\n"))		uspi = sbi->s_uspi;	usb  = (struct ufs_super_block *)		((struct ufs_buffer_head *)uspi)->bh[0]->b_data;        flags = UFS_SB(sb)->s_flags;		/*	 * Read cs structures from (usually) first data block	 * on the device. 	 */	size = uspi->s_cssize;	blks = (size + uspi->s_fsize - 1) >> uspi->s_fshift;	base = space = kmalloc(size, GFP_KERNEL);	if (!base)		goto failed; 	for (i = 0; i < blks; i += uspi->s_fpb) {		size = uspi->s_bsize;		if (i + uspi->s_fpb > blks)			size = (blks - i) * uspi->s_fsize;		if ((flags & UFS_TYPE_MASK) == UFS_TYPE_UFS2) {			ubh = ubh_bread(sb,				fs64_to_cpu(sb, usb->fs_u11.fs_u2.fs_csaddr) + i, size);			if (!ubh)				goto failed;			ubh_ubhcpymem (space, ubh, size);			sbi->s_csp[ufs_fragstoblks(i)]=(struct ufs_csum *)space;		}		else {			ubh = ubh_bread(sb, uspi->s_csaddr + i, size);			if (!ubh)				goto failed;			ubh_ubhcpymem(space, ubh, size);			sbi->s_csp[ufs_fragstoblks(i)]=(struct ufs_csum *)space;		}		space += size;		ubh_brelse (ubh);		ubh = NULL;	}	/*	 * Read cylinder group (we read only first fragment from block	 * at this time) and prepare internal data structures for cg caching.	 */	if (!(sbi->s_ucg = kmalloc (sizeof(struct buffer_head *) * uspi->s_ncg, GFP_KERNEL)))		goto failed;	for (i = 0; i < uspi->s_ncg; i++) 		sbi->s_ucg[i] = NULL;	for (i = 0; i < UFS_MAX_GROUP_LOADED; i++) {		sbi->s_ucpi[i] = NULL;		sbi->s_cgno[i] = UFS_CGNO_EMPTY;	}	for (i = 0; i < uspi->s_ncg; i++) {		UFSD(("read cg %u\n", i))		if (!(sbi->s_ucg[i] = sb_bread(sb, ufs_cgcmin(i))))			goto failed;		if (!ufs_cg_chkmagic (sb, (struct ufs_cylinder_group *) sbi->s_ucg[i]->b_data))			goto failed;#ifdef UFS_SUPER_DEBUG_MORE		ufs_print_cylinder_stuff(sb, (struct ufs_cylinder_group *) sbi->s_ucg[i]->b_data);#endif	}	for (i = 0; i < UFS_MAX_GROUP_LOADED; i++) {		if (!(sbi->s_ucpi[i] = kmalloc (sizeof(struct ufs_cg_private_info), GFP_KERNEL)))			goto failed;		sbi->s_cgno[i] = UFS_CGNO_EMPTY;	}	sbi->s_cg_loaded = 0;	UFSD(("EXIT\n"))	return 1;failed:	if (base) kfree (base);	if (sbi->s_ucg) {		for (i = 0; i < uspi->s_ncg; i++)			if (sbi->s_ucg[i]) brelse (sbi->s_ucg[i]);		kfree (sbi->s_ucg);		for (i = 0; i < UFS_MAX_GROUP_LOADED; i++)			if (sbi->s_ucpi[i]) kfree (sbi->s_ucpi[i]);	}	UFSD(("EXIT (FAILED)\n"))	return 0;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/f99d49adf527fa6f7a9c42257fa76bca6b8df1e3/super.c/buggy/fs/ufs/super.c