Commit eb245678 authored by Robert Love's avatar Robert Love Committed by Linus Torvalds

[PATCH] remove preempt_disable from pdflush

It seems by the comments the statements were only there to prevent the
thread from finding itself as TASK_RUNNING after a kernel preemption.
Since we reverted to the original preemption behavior (which does not do
that) it should be safe.  Looking over the code confirms - it seems to
not be doing anything evil and is properly locked otherwise.
parent e6d19c6a
...@@ -78,12 +78,6 @@ struct pdflush_work { ...@@ -78,12 +78,6 @@ struct pdflush_work {
unsigned long when_i_went_to_sleep; unsigned long when_i_went_to_sleep;
}; };
/*
* preemption is disabled in pdflush. There was a bug in preempt
* which was causing pdflush to get flipped into state TASK_RUNNING
* when it performed a spin_unlock. That bug is probably fixed,
* but play it safe. The preempt-off paths are very short.
*/
static int __pdflush(struct pdflush_work *my_work) static int __pdflush(struct pdflush_work *my_work)
{ {
daemonize(); daemonize();
...@@ -100,7 +94,6 @@ static int __pdflush(struct pdflush_work *my_work) ...@@ -100,7 +94,6 @@ static int __pdflush(struct pdflush_work *my_work)
my_work->fn = NULL; my_work->fn = NULL;
my_work->who = current; my_work->who = current;
preempt_disable();
spin_lock_irq(&pdflush_lock); spin_lock_irq(&pdflush_lock);
nr_pdflush_threads++; nr_pdflush_threads++;
// printk("pdflush %d [%d] starts\n", nr_pdflush_threads, current->pid); // printk("pdflush %d [%d] starts\n", nr_pdflush_threads, current->pid);
...@@ -114,9 +107,7 @@ static int __pdflush(struct pdflush_work *my_work) ...@@ -114,9 +107,7 @@ static int __pdflush(struct pdflush_work *my_work)
schedule(); schedule();
preempt_enable();
(*my_work->fn)(my_work->arg0); (*my_work->fn)(my_work->arg0);
preempt_disable();
/* /*
* Thread creation: For how long have there been zero * Thread creation: For how long have there been zero
...@@ -150,7 +141,6 @@ static int __pdflush(struct pdflush_work *my_work) ...@@ -150,7 +141,6 @@ static int __pdflush(struct pdflush_work *my_work)
nr_pdflush_threads--; nr_pdflush_threads--;
// printk("pdflush %d [%d] ends\n", nr_pdflush_threads, current->pid); // printk("pdflush %d [%d] ends\n", nr_pdflush_threads, current->pid);
spin_unlock_irq(&pdflush_lock); spin_unlock_irq(&pdflush_lock);
preempt_enable();
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment