Commit 522864f4 authored by Andrew Morton's avatar Andrew Morton Committed by David S. Miller

[PATCH] remove the sched_yield from the ext3 fsync path

The changed sched_yield() semantics have made ext3's transaction
batching terribly slow.

Apparently a schedule() fixes that, although it probably breaks
transaction batching.

This patch largely fixes my complaints about the new scheduler being
extremely sluggish to interactive applications.  Evidently those
applications were calling fsync() and were spending extremely long
periods in sched_yield().
parent 6b1ba797
...@@ -1434,9 +1434,10 @@ int journal_stop(handle_t *handle) ...@@ -1434,9 +1434,10 @@ int journal_stop(handle_t *handle)
* by 30x or more... * by 30x or more...
*/ */
if (handle->h_sync) { if (handle->h_sync) {
set_current_state(TASK_RUNNING);
do { do {
old_handle_count = transaction->t_handle_count; old_handle_count = transaction->t_handle_count;
yield(); schedule();
} while (old_handle_count != transaction->t_handle_count); } while (old_handle_count != transaction->t_handle_count);
} }
......
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