[XFS] Remove xfs_iflush_all and clean up xfs_finish_reclaim_all()
xfs_iflush_all() walks the m_inodes list to find inodes that need reclaiming. We already have such a list - the m_del_inodes list. Replace xfs_iflush_all() with a call to xfs_finish_reclaim_all() and clean up xfs_finish_reclaim_all() to handle the different flush modes now needed. Originally based on a patch from Christoph Hellwig. Version 3 o rediff against new linux-2.6/xfs_sync.c code Version 2 o revert xfs_syncsub() inode reclaim behaviour back to original code o xfs_quiesce_fs() should use XFS_IFLUSH_DELWRI_ELSE_ASYNC, not XFS_IFLUSH_ASYNC, to prevent change of behaviour. SGI-PV: 988139 SGI-Modid: xfs-linux-melb:xfs-kern:32284a Signed-off-by: David Chinner <david@fromorbit.com> Signed-off-by: Lachlan McIlroy <lachlan@sgi.com> Signed-off-by: Christoph Hellwig <hch@infradead.org>
This commit is contained in:
committed by
Lachlan McIlroy
parent
a167b17e89
commit
75c68f411b
@@ -2918,36 +2918,30 @@ xfs_finish_reclaim(
|
||||
}
|
||||
|
||||
int
|
||||
xfs_finish_reclaim_all(xfs_mount_t *mp, int noblock)
|
||||
xfs_finish_reclaim_all(
|
||||
xfs_mount_t *mp,
|
||||
int noblock,
|
||||
int mode)
|
||||
{
|
||||
int purged;
|
||||
xfs_inode_t *ip, *n;
|
||||
int done = 0;
|
||||
|
||||
while (!done) {
|
||||
purged = 0;
|
||||
XFS_MOUNT_ILOCK(mp);
|
||||
list_for_each_entry_safe(ip, n, &mp->m_del_inodes, i_reclaim) {
|
||||
if (noblock) {
|
||||
if (xfs_ilock_nowait(ip, XFS_ILOCK_EXCL) == 0)
|
||||
continue;
|
||||
if (xfs_ipincount(ip) ||
|
||||
!xfs_iflock_nowait(ip)) {
|
||||
xfs_iunlock(ip, XFS_ILOCK_EXCL);
|
||||
continue;
|
||||
}
|
||||
restart:
|
||||
XFS_MOUNT_ILOCK(mp);
|
||||
list_for_each_entry_safe(ip, n, &mp->m_del_inodes, i_reclaim) {
|
||||
if (noblock) {
|
||||
if (xfs_ilock_nowait(ip, XFS_ILOCK_EXCL) == 0)
|
||||
continue;
|
||||
if (xfs_ipincount(ip) ||
|
||||
!xfs_iflock_nowait(ip)) {
|
||||
xfs_iunlock(ip, XFS_ILOCK_EXCL);
|
||||
continue;
|
||||
}
|
||||
XFS_MOUNT_IUNLOCK(mp);
|
||||
if (xfs_finish_reclaim(ip, noblock,
|
||||
XFS_IFLUSH_DELWRI_ELSE_ASYNC))
|
||||
delay(1);
|
||||
purged = 1;
|
||||
break;
|
||||
}
|
||||
|
||||
done = !purged;
|
||||
XFS_MOUNT_IUNLOCK(mp);
|
||||
if (xfs_finish_reclaim(ip, noblock, mode))
|
||||
delay(1);
|
||||
goto restart;
|
||||
}
|
||||
|
||||
XFS_MOUNT_IUNLOCK(mp);
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user