ubh_wait_on_buffer (ind_ubh); ubh_ll_rw_block (WRITE, 1, &ind_ubh); 
ubh_ll_rw_block (SWRITE, 1, &ind_ubh); 
static int ufs_trunc_indirect (struct inode * inode, unsigned offset, __fs32 *p){	struct super_block * sb;	struct ufs_sb_private_info * uspi;	struct ufs_buffer_head * ind_ubh;	struct buffer_head * bh;	__fs32 * ind;	unsigned indirect_block, i, j, tmp;	unsigned frag_to_free, free_count;	int retry;	UFSD(("ENTER\n"))			sb = inode->i_sb;	uspi = UFS_SB(sb)->s_uspi;	frag_to_free = 0;	free_count = 0;	retry = 0;		tmp = fs32_to_cpu(sb, *p);	if (!tmp)		return 0;	ind_ubh = ubh_bread(sb, tmp, uspi->s_bsize);	if (tmp != fs32_to_cpu(sb, *p)) {		ubh_brelse (ind_ubh);		return 1;	}	if (!ind_ubh) {		*p = 0;		return 0;	}	indirect_block = (DIRECT_BLOCK > offset) ? (DIRECT_BLOCK - offset) : 0;	for (i = indirect_block; i < uspi->s_apb; i++) {		ind = ubh_get_addr32 (ind_ubh, i);		tmp = fs32_to_cpu(sb, *ind);		if (!tmp)			continue;		for (j = 0; j < uspi->s_fpb; j++) {			bh = sb_find_get_block(sb, tmp + j);			if ((bh && DATA_BUFFER_USED(bh)) || tmp != fs32_to_cpu(sb, *ind)) {				retry = 1;				brelse (bh);				goto next;			}			bforget (bh);		}			*ind = 0;		ubh_mark_buffer_dirty(ind_ubh);		if (free_count == 0) {			frag_to_free = tmp;			free_count = uspi->s_fpb;		} else if (free_count > 0 && frag_to_free == tmp - free_count)			free_count += uspi->s_fpb;		else {			ufs_free_blocks (inode, frag_to_free, free_count);			frag_to_free = tmp;			free_count = uspi->s_fpb;		}		inode->i_blocks -= uspi->s_nspb;		mark_inode_dirty(inode);next:;	}	if (free_count > 0) {		ufs_free_blocks (inode, frag_to_free, free_count);	}	for (i = 0; i < uspi->s_apb; i++)		if (*ubh_get_addr32(ind_ubh,i))			break;	if (i >= uspi->s_apb) {		if (ubh_max_bcount(ind_ubh) != 1) {			retry = 1;		}		else {			tmp = fs32_to_cpu(sb, *p);			*p = 0;			inode->i_blocks -= uspi->s_nspb;			mark_inode_dirty(inode);			ufs_free_blocks (inode, tmp, uspi->s_fpb);			ubh_bforget(ind_ubh);			ind_ubh = NULL;		}	}	if (IS_SYNC(inode) && ind_ubh && ubh_buffer_dirty(ind_ubh)) {		ubh_wait_on_buffer (ind_ubh);		ubh_ll_rw_block (WRITE, 1, &ind_ubh);		ubh_wait_on_buffer (ind_ubh);	}	ubh_brelse (ind_ubh);		UFSD(("EXIT\n"))		return retry;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/096125f31ae3aa2c7271463b9986dd228e0da089/truncate.c/clean/fs/ufs/truncate.c