aboutsummaryrefslogtreecommitdiffstats
path: root/mm/compaction.c
diff options
context:
space:
mode:
authorMel Gorman <mgorman@suse.de>2012-10-08 19:32:30 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2012-10-09 03:22:48 -0400
commit3cc668f4e30fbd97b3c0574d8cac7a83903c9bc7 (patch)
tree851c570e1af7c3c888d7106d3942ab861039b3b9 /mm/compaction.c
parente64c5237cf6ff474cb2f3f832f48f2b441dd9979 (diff)
mm: compaction: move fatal signal check out of compact_checklock_irqsave
Commit c67fe3752abe ("mm: compaction: Abort async compaction if locks are contended or taking too long") addressed a lock contention problem in compaction by introducing compact_checklock_irqsave() that effecively aborting async compaction in the event of compaction. To preserve existing behaviour it also moved a fatal_signal_pending() check into compact_checklock_irqsave() but that is very misleading. It "hides" the check within a locking function but has nothing to do with locking as such. It just happens to work in a desirable fashion. This patch moves the fatal_signal_pending() check to isolate_migratepages_range() where it belongs. Arguably the same check should also happen when isolating pages for freeing but it's overkill. Signed-off-by: Mel Gorman <mgorman@suse.de> Cc: Rik van Riel <riel@redhat.com> Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> Cc: Shaohua Li <shli@kernel.org> Cc: Minchan Kim <minchan@kernel.org> Cc: Andrea Arcangeli <aarcange@redhat.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm/compaction.c')
-rw-r--r--mm/compaction.c4
1 files changed, 1 insertions, 3 deletions
diff --git a/mm/compaction.c b/mm/compaction.c
index 0649cc1b3479..78075a268399 100644
--- a/mm/compaction.c
+++ b/mm/compaction.c
@@ -75,8 +75,6 @@ static bool compact_checklock_irqsave(spinlock_t *lock, unsigned long *flags,
75 } 75 }
76 76
77 cond_resched(); 77 cond_resched();
78 if (fatal_signal_pending(current))
79 return false;
80 } 78 }
81 79
82 if (!locked) 80 if (!locked)
@@ -363,7 +361,7 @@ isolate_migratepages_range(struct zone *zone, struct compact_control *cc,
363 /* Check if it is ok to still hold the lock */ 361 /* Check if it is ok to still hold the lock */
364 locked = compact_checklock_irqsave(&zone->lru_lock, &flags, 362 locked = compact_checklock_irqsave(&zone->lru_lock, &flags,
365 locked, cc); 363 locked, cc);
366 if (!locked) 364 if (!locked || fatal_signal_pending(current))
367 break; 365 break;
368 366
369 /* 367 /*