I ended up deciding that the `NODEV' check here avoids livelocks.
Unless, of course, the scheduling pressure is so high that we can't
even run a few statements. I which case the interrupt load will be so
high that the machine stops anyway. Possibly it needs to check `refile'
as well.
A technique I frequently use in the full-ll patch is to only reschedule
after we've executed the loop (say) 16 times before dropping out. This
assures that forward progress is made. There's a test mode in the full
ll patch - in this mode, it *always* assumes that need_resched is true.
If the patch runs OK in this mode without livelocking, we know that it
can't livelock.
Anyway, I'll revisit this. It is a "must fix". wait_for_buffers() is
possibly the worst cause of latency in the kernel. The usual scenario
is where kupdate has written 10,000 buffers and then sleeps. Next time
it wakes, it has 10,000 clean, unlocked buffers to move from BUF_LOCKED
onto BUF_CLEAN. It does this with lru_list_lock held.
-
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/