tp = *tpp; 
xfs_qm_dqread(	xfs_trans_t	*tp,	xfs_dqid_t	id,	xfs_dquot_t	*dqp,	/* dquot to get filled in */	uint		flags){	xfs_disk_dquot_t *ddqp;	xfs_buf_t	 *bp;	int		 error;	/*	 * get a pointer to the on-disk dquot and the buffer containing it	 * dqp already knows its own type (GROUP/USER).	 */	xfs_dqtrace_entry(dqp, "DQREAD");	if ((error = xfs_qm_dqtobp(tp, dqp, &ddqp, &bp, flags))) {		return (error);	}	/* copy everything from disk dquot to the incore dquot */	memcpy(&dqp->q_core, ddqp, sizeof(xfs_disk_dquot_t));	ASSERT(INT_GET(dqp->q_core.d_id, ARCH_CONVERT) == id);	xfs_qm_dquot_logitem_init(dqp);	/*	 * Reservation counters are defined as reservation plus current usage	 * to avoid having to add everytime.	 */	dqp->q_res_bcount = INT_GET(ddqp->d_bcount, ARCH_CONVERT);	dqp->q_res_icount = INT_GET(ddqp->d_icount, ARCH_CONVERT);	dqp->q_res_rtbcount = INT_GET(ddqp->d_rtbcount, ARCH_CONVERT);	/* Mark the buf so that this will stay incore a little longer */	XFS_BUF_SET_VTYPE_REF(bp, B_FS_DQUOT, XFS_DQUOT_REF);	/*	 * We got the buffer with a xfs_trans_read_buf() (in dqtobp())	 * So we need to release with xfs_trans_brelse().	 * The strategy here is identical to that of inodes; we lock	 * the dquot in xfs_qm_dqget() before making it accessible to	 * others. This is because dquots, like inodes, need a good level of	 * concurrency, and we don't want to take locks on the entire buffers	 * for dquot accesses.	 * Note also that the dquot buffer may even be dirty at this point, if	 * this particular dquot was repaired. We still aren't afraid to	 * brelse it because we have the changes incore.	 */	ASSERT(XFS_BUF_ISBUSY(bp));	ASSERT(XFS_BUF_VALUSEMA(bp) <= 0);	xfs_trans_brelse(tp, bp);	return (error);}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/efa092f3d4c60be7e81de515db9f06e5f8426afc/xfs_dquot.c/clean/fs/xfs/quota/xfs_dquot.c