diff options
author | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2008-03-06 11:14:00 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2008-03-06 11:14:00 -0500 |
commit | 910da1a48eeb3be53a8247f6c494aa9d67ab1422 (patch) | |
tree | b8bf3753de5a3186d17348d2eaadc5e923339fca /fs | |
parent | 2ab42e24d63193d78f2e888a170b208f4776aaba (diff) | |
parent | 72772a3b5b158cddcfbbff3ef13b26b03a905158 (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.c | 1 | ||||
-rw-r--r-- | fs/xfs/xfs_trans_ail.c | 17 |
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 |