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 d6781951267..52822c98c48 100644 --- a/mm/pdflush.c +++ b/mm/pdflush.c @@ -20,6 +20,7 @@  #include <linux/fs.h>		// Needed by writeback.h  #include <linux/writeback.h>	// Prototypes pdflush_operation()  #include <linux/kthread.h> +#include <linux/cpuset.h>  /* @@ -170,12 +171,24 @@ static int __pdflush(struct pdflush_work *my_work)  static int pdflush(void *dummy)  {  	struct pdflush_work my_work; +	cpumask_t cpus_allowed;  	/*  	 * pdflush can spend a lot of time doing encryption via dm-crypt.  We  	 * don't want to do that at keventd's priority.  	 */  	set_user_nice(current, 0); + +	/* +	 * Some configs put our parent kthread in a limited cpuset, +	 * which kthread() overrides, forcing cpus_allowed == CPU_MASK_ALL. +	 * Our needs are more modest - cut back to our cpusets cpus_allowed. +	 * This is needed as pdflush's are dynamically created and destroyed. +	 * The boottime pdflush's are easily placed w/o these 2 lines. +	 */ +	cpus_allowed = cpuset_cpus_allowed(current); +	set_cpus_allowed(current, cpus_allowed); +  	return __pdflush(&my_work);  }  | 
