ubh_wait_on_buffer (dind_bh); ubh_ll_rw_block (WRITE, 1, &dind_bh); 
ubh_ll_rw_block (SWRITE, 1, &dind_bh); 
static int ufs_trunc_dindirect (struct inode *inode, unsigned offset, __fs32 *p){	struct super_block * sb;	struct ufs_sb_private_info * uspi;	struct ufs_buffer_head * dind_bh;	unsigned i, tmp, dindirect_block;	__fs32 * dind;	int retry = 0;		UFSD(("ENTER\n"))		sb = inode->i_sb;	uspi = UFS_SB(sb)->s_uspi;	dindirect_block = (DIRECT_BLOCK > offset) 		? ((DIRECT_BLOCK - offset) >> uspi->s_apbshift) : 0;	retry = 0;		tmp = fs32_to_cpu(sb, *p);	if (!tmp)		return 0;	dind_bh = ubh_bread(sb, tmp, uspi->s_bsize);	if (tmp != fs32_to_cpu(sb, *p)) {		ubh_brelse (dind_bh);		return 1;	}	if (!dind_bh) {		*p = 0;		return 0;	}	for (i = dindirect_block ; i < uspi->s_apb ; i++) {		dind = ubh_get_addr32 (dind_bh, i);		tmp = fs32_to_cpu(sb, *dind);		if (!tmp)			continue;		retry |= ufs_trunc_indirect (inode, offset + (i << uspi->s_apbshift), dind);		ubh_mark_buffer_dirty(dind_bh);	}	for (i = 0; i < uspi->s_apb; i++)		if (*ubh_get_addr32 (dind_bh, i))			break;	if (i >= uspi->s_apb) {		if (ubh_max_bcount(dind_bh) != 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(dind_bh);			dind_bh = NULL;		}	}	if (IS_SYNC(inode) && dind_bh && ubh_buffer_dirty(dind_bh)) {		ubh_wait_on_buffer (dind_bh);		ubh_ll_rw_block (WRITE, 1, &dind_bh);		ubh_wait_on_buffer (dind_bh);	}	ubh_brelse (dind_bh);		UFSD(("EXIT\n"))		return retry;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/096125f31ae3aa2c7271463b9986dd228e0da089/truncate.c/clean/fs/ufs/truncate.c