diff options
author | Felix Blyakher <felixb@sgi.com> | 2005-11-25 00:42:13 -0500 |
---|---|---|
committer | Nathan Scott <nathans@sgi.com> | 2005-11-25 00:42:13 -0500 |
commit | 6b2cf618cc8445a03640d1e5e36829352e297017 (patch) | |
tree | 160734b1718a0d7442132d6568263fa3a167cbe2 /fs | |
parent | a4656391b76ed93faed724c5963f033164ee477e (diff) |
[XFS] Tight loop in xfs_finish_reclaim_all prevented the xfslogd to run
its queue of IO completion callbacks, thus creating the deadlock between
umount and xfslogd. Breaking the loop solves the problem.
SGI-PV: 943821
SGI-Modid: xfs-linux-melb:xfs-kern:202363a
Signed-off-by: Felix Blyakher <felixb@sgi.com>
Signed-off-by: Nathan Scott <nathans@sgi.com>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/xfs/xfs_vnodeops.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/fs/xfs/xfs_vnodeops.c b/fs/xfs/xfs_vnodeops.c index 7c1f74531463..e03fa2a3d5ed 100644 --- a/fs/xfs/xfs_vnodeops.c +++ b/fs/xfs/xfs_vnodeops.c | |||
@@ -3958,8 +3958,9 @@ xfs_finish_reclaim_all(xfs_mount_t *mp, int noblock) | |||
3958 | } | 3958 | } |
3959 | } | 3959 | } |
3960 | XFS_MOUNT_IUNLOCK(mp); | 3960 | XFS_MOUNT_IUNLOCK(mp); |
3961 | xfs_finish_reclaim(ip, noblock, | 3961 | if (xfs_finish_reclaim(ip, noblock, |
3962 | XFS_IFLUSH_DELWRI_ELSE_ASYNC); | 3962 | XFS_IFLUSH_DELWRI_ELSE_ASYNC)) |
3963 | delay(1); | ||
3963 | purged = 1; | 3964 | purged = 1; |
3964 | break; | 3965 | break; |
3965 | } | 3966 | } |