diff options
Diffstat (limited to 'mm/pdflush.c')
-rw-r--r-- | mm/pdflush.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/mm/pdflush.c b/mm/pdflush.c index d6781951267e..52822c98c489 100644 --- a/mm/pdflush.c +++ b/mm/pdflush.c | |||
@@ -20,6 +20,7 @@ | |||
20 | #include <linux/fs.h> // Needed by writeback.h | 20 | #include <linux/fs.h> // Needed by writeback.h |
21 | #include <linux/writeback.h> // Prototypes pdflush_operation() | 21 | #include <linux/writeback.h> // Prototypes pdflush_operation() |
22 | #include <linux/kthread.h> | 22 | #include <linux/kthread.h> |
23 | #include <linux/cpuset.h> | ||
23 | 24 | ||
24 | 25 | ||
25 | /* | 26 | /* |
@@ -170,12 +171,24 @@ static int __pdflush(struct pdflush_work *my_work) | |||
170 | static int pdflush(void *dummy) | 171 | static int pdflush(void *dummy) |
171 | { | 172 | { |
172 | struct pdflush_work my_work; | 173 | struct pdflush_work my_work; |
174 | cpumask_t cpus_allowed; | ||
173 | 175 | ||
174 | /* | 176 | /* |
175 | * pdflush can spend a lot of time doing encryption via dm-crypt. We | 177 | * pdflush can spend a lot of time doing encryption via dm-crypt. We |
176 | * don't want to do that at keventd's priority. | 178 | * don't want to do that at keventd's priority. |
177 | */ | 179 | */ |
178 | set_user_nice(current, 0); | 180 | set_user_nice(current, 0); |
181 | |||
182 | /* | ||
183 | * Some configs put our parent kthread in a limited cpuset, | ||
184 | * which kthread() overrides, forcing cpus_allowed == CPU_MASK_ALL. | ||
185 | * Our needs are more modest - cut back to our cpusets cpus_allowed. | ||
186 | * This is needed as pdflush's are dynamically created and destroyed. | ||
187 | * The boottime pdflush's are easily placed w/o these 2 lines. | ||
188 | */ | ||
189 | cpus_allowed = cpuset_cpus_allowed(current); | ||
190 | set_cpus_allowed(current, cpus_allowed); | ||
191 | |||
179 | return __pdflush(&my_work); | 192 | return __pdflush(&my_work); |
180 | } | 193 | } |
181 | 194 | ||