xfs: calculate XFS_TRANS_QM_DQALLOC space log reservation at mount time
PATCH v4 6/13 xfs: calculate XFS_TRANS_QM_DQALLOC space log reservation at mount time
The disk quota allocation log space reservation is calcuated at runtime, this patch does it at mount time.
Signed-off-by Jie Liu <[email protected]>
CC Dave Chinner <[email protected]>
Reviewed-by Mark Tinguely <[email protected]>
--- fs/xfs/xfs_dquot.c | 12 +++--------- fs/xfs/xfs_mount.h | 1 + fs/xfs/xfs_trans.c | 15 +++++++++++++++ fs/xfs/xfs_trans.h | 1 + 4 files changed, 20 insertions(+), 9 deletions(-)
fs/xfs/xfs_dquot.c +3 -9
@@ -524,15 +524,9 @@ xfs_qm_dqread(if (flags &XFS_QMOPT_DQALLOC ) { tp =xfs_trans_alloc (mp,XFS_TRANS_QM_DQALLOC ); error =xfs_trans_reserve (tp,XFS_QM_DQALLOC_SPACE_RES (mp), -XFS_WRITE_LOG_RES (mp) + -/* -* Round the chunklen up to the next multiple -* of 128 (buf log item chunk size)). -*/ -BBTOB (mp->m_quotainfo->qi_dqchunklen) -1 +128 , -0 , -XFS_TRANS_PERM_LOG_RES , -XFS_WRITE_LOG_COUNT ); +XFS_QM_DQALLOC_LOG_RES (mp),0 , +XFS_TRANS_PERM_LOG_RES , +XFS_WRITE_LOG_COUNT );if (error) goto error1; cancelflags =XFS_TRANS_RELEASE_LOG_RES ;
fs/xfs/xfs_mount.h +1 -0
@@ -42,6 +42,7 @@ typedef struct xfs_trans_reservations {uint tr_growrtfree;/* grow realtime freeing */ uint tr_qm_sbchange;/* change quota flags */ uint tr_qm_setqlim;/* adjust quota limits */ +uint tr_qm_dqalloc;/* allocate quota on disk */ } xfs_trans_reservations_t;#ifndef __KERNEL__
fs/xfs/xfs_trans.c +15 -0
@@ -567,6 +567,20 @@ xfs_calc_qm_setqlim_reservation( }/* +* Allocating quota on disk if needed. +* the write transaction log space: XFS_WRITE_LOG_RES(mp) +* the unit of quota allocation: one system block size +*/ +STATIC uint +xfs_calc_qm_dqalloc_reservation ( +struct xfs_mount *mp) +{ +return XFS_WRITE_LOG_RES (mp) + +xfs_calc_buf_res (1 , +XFS_FSB_TO_B (mp,XFS_DQUOT_CLUSTER_SIZE_FSB ) -1 ); +} + +/* * Initialize the precomputed transaction reservation values * in the mount structure. */
@@ -599,6 +613,7 @@ xfs_trans_init( resp->tr_growrtfree =xfs_calc_growrtfree_reservation (mp); resp->tr_qm_sbchange =xfs_calc_qm_sbchange_reservation (mp); resp->tr_qm_setqlim =xfs_calc_qm_setqlim_reservation (mp); + resp->tr_qm_dqalloc =xfs_calc_qm_dqalloc_reservation (mp); }/*
fs/xfs/xfs_trans.h +1 -0
@@ -264,6 +264,7 @@ struct xfs_log_item_desc {#define XFS_CLEAR_AGI_BUCKET_LOG_RES (mp) ((mp)->m_reservations.tr_clearagi)#define XFS_QM_SBCHANGE_LOG_RES (mp) ((mp)->m_reservations.tr_qm_sbchange)#define XFS_QM_SETQLIM_LOG_RES (mp) ((mp)->m_reservations.tr_qm_setqlim) +#define XFS_QM_DQALLOC_LOG_RES (mp) ((mp)->m_reservations.tr_qm_dqalloc)/* * Various log count values.
Signature · 6 lines
1.7.9.5 _______________________________________________ xfs mailing list [email protected] http://oss.sgi.com/mailman/listinfo/xfs