summaryrefslogtreecommitdiffstats
path: root/fs/xfs/xfs_vnodeops.c
diff options
context:
space:
mode:
authorFelix Blyakher2005-11-25 06:42:13 +0100
committerNathan Scott2005-11-25 06:42:13 +0100
commit6b2cf618cc8445a03640d1e5e36829352e297017 (patch)
tree160734b1718a0d7442132d6568263fa3a167cbe2 /fs/xfs/xfs_vnodeops.c
parent[XFS] Fix a 32 bit value wraparound when providing a mapping for a large (diff)
downloadkernel-qcow2-linux-6b2cf618cc8445a03640d1e5e36829352e297017.tar.gz
kernel-qcow2-linux-6b2cf618cc8445a03640d1e5e36829352e297017.tar.xz
kernel-qcow2-linux-6b2cf618cc8445a03640d1e5e36829352e297017.zip
[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/xfs/xfs_vnodeops.c')
-rw-r--r--fs/xfs/xfs_vnodeops.c5
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)
}
}
XFS_MOUNT_IUNLOCK(mp);
- xfs_finish_reclaim(ip, noblock,
- XFS_IFLUSH_DELWRI_ELSE_ASYNC);
+ if (xfs_finish_reclaim(ip, noblock,
+ XFS_IFLUSH_DELWRI_ELSE_ASYNC))
+ delay(1);
purged = 1;
break;
}