diff options
author | Bob Picco <bob.picco@hp.com> | 2005-11-13 19:06:35 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2005-11-13 21:14:11 -0500 |
commit | 5563e77078d85c4f107a0a673500c43ce57cf702 (patch) | |
tree | b9cacaa2f6ad595d6ade9e69f8a84d7c9b063048 /kernel | |
parent | 3c8d61bcf2d762fb84dbf741df400c833cada18a (diff) |
[PATCH] cpuset: fix return without releasing semaphore
It is wrong to acquire the semaphore and then return from
cpuset_zone_allowed without releasing it.
Signed-off-by: Bob Picco <bob.picco@hp.com>
Acked-by: Paul Jackson <pj@sgi.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/cpuset.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/kernel/cpuset.c b/kernel/cpuset.c index 5a737ed9dac7..7430640f9816 100644 --- a/kernel/cpuset.c +++ b/kernel/cpuset.c | |||
@@ -1809,11 +1809,12 @@ int cpuset_zone_allowed(struct zone *z, gfp_t gfp_mask) | |||
1809 | if (gfp_mask & __GFP_HARDWALL) /* If hardwall request, stop here */ | 1809 | if (gfp_mask & __GFP_HARDWALL) /* If hardwall request, stop here */ |
1810 | return 0; | 1810 | return 0; |
1811 | 1811 | ||
1812 | if (current->flags & PF_EXITING) /* Let dying task have memory */ | ||
1813 | return 1; | ||
1814 | |||
1812 | /* Not hardwall and node outside mems_allowed: scan up cpusets */ | 1815 | /* Not hardwall and node outside mems_allowed: scan up cpusets */ |
1813 | down(&callback_sem); | 1816 | down(&callback_sem); |
1814 | 1817 | ||
1815 | if (current->flags & PF_EXITING) /* Let dying task have memory */ | ||
1816 | return 1; | ||
1817 | task_lock(current); | 1818 | task_lock(current); |
1818 | cs = nearest_exclusive_ancestor(current->cpuset); | 1819 | cs = nearest_exclusive_ancestor(current->cpuset); |
1819 | task_unlock(current); | 1820 | task_unlock(current); |