aboutsummaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@woody.linux-foundation.org>2008-03-06 11:14:00 -0500
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2008-03-06 11:14:00 -0500
commit910da1a48eeb3be53a8247f6c494aa9d67ab1422 (patch)
treeb8bf3753de5a3186d17348d2eaadc5e923339fca /fs
parent2ab42e24d63193d78f2e888a170b208f4776aaba (diff)
parent72772a3b5b158cddcfbbff3ef13b26b03a905158 (diff)
Merge branch 'for-linus' of git://oss.sgi.com:8090/xfs/xfs-2.6
* 'for-linus' of git://oss.sgi.com:8090/xfs/xfs-2.6: [XFS] fix inode leak in xfs_iget_core() [XFS] 977545 977545 977545 977545 977545 977545 xfsaild causing too many
Diffstat (limited to 'fs')
-rw-r--r--fs/xfs/xfs_iget.c1
-rw-r--r--fs/xfs/xfs_trans_ail.c17
2 files changed, 11 insertions, 7 deletions
diff --git a/fs/xfs/xfs_iget.c b/fs/xfs/xfs_iget.c
index f01b07687faf..8e09b71f4104 100644
--- a/fs/xfs/xfs_iget.c
+++ b/fs/xfs/xfs_iget.c
@@ -235,6 +235,7 @@ finish_inode:
235 */ 235 */
236 new_icl = kmem_zone_alloc(xfs_icluster_zone, KM_SLEEP); 236 new_icl = kmem_zone_alloc(xfs_icluster_zone, KM_SLEEP);
237 if (radix_tree_preload(GFP_KERNEL)) { 237 if (radix_tree_preload(GFP_KERNEL)) {
238 xfs_idestroy(ip);
238 delay(1); 239 delay(1);
239 goto again; 240 goto again;
240 } 241 }
diff --git a/fs/xfs/xfs_trans_ail.c b/fs/xfs/xfs_trans_ail.c
index 4d6330eddc8d..76d470d8a1e6 100644
--- a/fs/xfs/xfs_trans_ail.c
+++ b/fs/xfs/xfs_trans_ail.c
@@ -261,16 +261,19 @@ xfsaild_push(
261 xfs_log_force(mp, (xfs_lsn_t)0, XFS_LOG_FORCE); 261 xfs_log_force(mp, (xfs_lsn_t)0, XFS_LOG_FORCE);
262 } 262 }
263 263
264 /* 264 if (!count) {
265 * We reached the target so wait a bit longer for I/O to complete and 265 /* We're past our target or empty, so idle */
266 * remove pushed items from the AIL before we start the next scan from 266 tout = 1000;
267 * the start of the AIL. 267 } else if (XFS_LSN_CMP(lsn, target) >= 0) {
268 */ 268 /*
269 if ((XFS_LSN_CMP(lsn, target) >= 0)) { 269 * We reached the target so wait a bit longer for I/O to
270 * complete and remove pushed items from the AIL before we
271 * start the next scan from the start of the AIL.
272 */
270 tout += 20; 273 tout += 20;
271 last_pushed_lsn = 0; 274 last_pushed_lsn = 0;
272 } else if ((restarts > XFS_TRANS_PUSH_AIL_RESTARTS) || 275 } else if ((restarts > XFS_TRANS_PUSH_AIL_RESTARTS) ||
273 (count && ((stuck * 100) / count > 90))) { 276 ((stuck * 100) / count > 90)) {
274 /* 277 /*
275 * Either there is a lot of contention on the AIL or we 278 * Either there is a lot of contention on the AIL or we
276 * are stuck due to operations in progress. "Stuck" in this 279 * are stuck due to operations in progress. "Stuck" in this