forked from Minki/linux
xfs: fix up agi unlinked list reservations
The current AGI unlinked list addition and removal reservations do not reflect the worst case log usage. An unlinked list removal can log up to two on-disk inode clusters but only includes reservation for one. An unlinked list addition logs the on-disk cluster but includes reservation for an in-core inode. Update the AGI unlinked list reservation helpers to calculate the correct worst case reservation for the associated operations. Signed-off-by: Brian Foster <bfoster@redhat.com> Reviewed-by: Dave Chinner <dchinner@redhat.com> Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com> Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
This commit is contained in:
parent
a6f485908d
commit
e8341d9f63
@ -282,13 +282,14 @@ xfs_calc_rename_reservation(
|
||||
* For removing an inode from unlinked list at first, we can modify:
|
||||
* the agi hash list and counters: sector size
|
||||
* the on disk inode before ours in the agi hash list: inode cluster size
|
||||
* the on disk inode in the agi hash list: inode cluster size
|
||||
*/
|
||||
STATIC uint
|
||||
xfs_calc_iunlink_remove_reservation(
|
||||
struct xfs_mount *mp)
|
||||
{
|
||||
return xfs_calc_buf_res(1, mp->m_sb.sb_sectsize) +
|
||||
max_t(uint, XFS_FSB_TO_B(mp, 1), mp->m_inode_cluster_size);
|
||||
2 * max_t(uint, XFS_FSB_TO_B(mp, 1), mp->m_inode_cluster_size);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -320,13 +321,13 @@ xfs_calc_link_reservation(
|
||||
/*
|
||||
* For adding an inode to unlinked list we can modify:
|
||||
* the agi hash list: sector size
|
||||
* the unlinked inode: inode size
|
||||
* the on disk inode: inode cluster size
|
||||
*/
|
||||
STATIC uint
|
||||
xfs_calc_iunlink_add_reservation(xfs_mount_t *mp)
|
||||
{
|
||||
return xfs_calc_buf_res(1, mp->m_sb.sb_sectsize) +
|
||||
xfs_calc_inode_res(mp, 1);
|
||||
max_t(uint, XFS_FSB_TO_B(mp, 1), mp->m_inode_cluster_size);
|
||||
}
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user