On 01/25/2013 05:39 AM, Mark Tinguely wrote: > On 01/24/13 05:10, Jeff Liu wrote: >> Refine the existing reservations routines with xfs_calc_buf_res() in xfs_trans.c. >> >> Signed-off-by: Jie Liu<jeff.liu@xxxxxxxxxx> >> --- >> fs/xfs/xfs_trans.c | 238 ++++++++++++++++++++++++---------------------------- >> 1 file changed, 111 insertions(+), 127 deletions(-) >> >> /* >> @@ -148,18 +145,18 @@ xfs_calc_itruncate_reservation( >> struct xfs_mount *mp) >> { >> return XFS_DQUOT_LOGRES(mp) + >> - MAX((mp->m_sb.sb_inodesize + >> - XFS_FSB_TO_B(mp, XFS_BM_MAXLEVELS(mp, XFS_DATA_FORK) + 1) + >> - 128 * (2 + XFS_BM_MAXLEVELS(mp, XFS_DATA_FORK))), >> - (4 * mp->m_sb.sb_sectsize + >> - 4 * mp->m_sb.sb_sectsize + >> - mp->m_sb.sb_sectsize + >> - XFS_ALLOCFREE_LOG_RES(mp, 4) + >> - 128 * (9 + XFS_ALLOCFREE_LOG_COUNT(mp, 4)) + >> - 128 * 5 + >> - XFS_ALLOCFREE_LOG_RES(mp, 1) + >> - 128 * (2 + XFS_IALLOC_BLOCKS(mp) + mp->m_in_maxlevels + >> - XFS_ALLOCFREE_LOG_COUNT(mp, 1)))); >> + MAX((xfs_calc_buf_res(1, mp->m_sb.sb_inodesize) + >> + xfs_calc_buf_res(XFS_BM_MAXLEVELS(mp, XFS_DATA_FORK) + 1, >> + XFS_FSB_TO_B(mp, 1))), >> + (xfs_calc_buf_res(9, mp->m_sb.sb_sectsize) + >> + xfs_calc_buf_res(XFS_ALLOCFREE_LOG_COUNT(mp, 4), >> + XFS_FSB_TO_B(mp, 1)) + >> + xfs_calc_buf_res(5, 0) + >> + xfs_calc_buf_res(XFS_ALLOCFREE_LOG_COUNT(mp, 1), >> + XFS_FSB_TO_B(mp, 1)) + >> + xfs_calc_buf_res(2 + XFS_IALLOC_BLOCKS(mp) + >> + mp->m_in_maxlevels, >> + XFS_FSB_TO_B(mp, 0)))); > ^^^^ > I see the (2 + XFS_IALLOC_BLOCKS(mp) + mp->m_in_maxlevel) > headers in the original code, but I still don't see data. XFS_FSB_TO_B(mp, 0) == 0, so it only calculates the headers out without the data part. But maybe it's better to replace XFS_FSB_TO_B(mp, 0) with 0 directly. > > I ran the counts for the args of MAX() command and I get a different > result: > > ARG1 ARG2 > 25728 218752 before > 25728 255616 after - second arg is too big as I expected. Strange, there is no 255616 for ARG2 at my old test logs, what's your block/log/inode/sector combination? I have tried the following combinations on yesterday: -b size=512 -n size=4096 xfs_calc_itruncate_reservation_MAX(): left=6144 right=81792 -b size=4096 -n size=4096: xfs_calc_itruncate_reservation_MAX(): left=25728 right=251008 -b size=4096 -n size=4096 -i size=2048 xfs_calc_itruncate_reservation_MAX(): left=27520 right=222336 -b size=4096 -n size=65536 -s size=4096 xfs_calc_itruncate_reservation_MAX(): left=25728 right=251008 -b size=4096 -n size=4096 -s size=512 xfs_calc_itruncate_reservation_MAX(): left=25728 right=218752 -b size=4096 -n size=65536 -i size=2048 -s size=512 xfs_calc_itruncate_reservation_MAX(): left=27520 right=222336 -b size=4096 -n size=4096 -s size=4096 xfs_calc_itruncate_reservation_MAX(): left=25728 right=251008 -b size=4096 -n size=65536 xfs_calc_itruncate_reservation_MAX(): left=25728 right=218752 Thanks, -Jeff > > > Some of the other counts don't match for me either. > > --Mark. > > _______________________________________________ > xfs mailing list > xfs@xxxxxxxxxxx > http://oss.sgi.com/mailman/listinfo/xfs > _______________________________________________ xfs mailing list xfs@xxxxxxxxxxx http://oss.sgi.com/mailman/listinfo/xfs