On Thu, 2001-09-20 at 13:39, Andrew Morton wrote: > > Andrew, are these still maintained or should I pull out the reiserfs bits? > > This is the reiserfs part - it applies to 2.4.10-pre12 OK. > > For the purposes of Robert's patch, conditional_schedule() > should be defined as > > if (current->need_resched && current->lock_depth == 0) { > unlock_kernel(); > lock_kernel(); > } > > which is somewhat crufty, because the implementation of lock_kernel() > is arch-specific. But all architectures seem to implement it the same way.
Note that we only support preemption on i386 thus far, so this is not an issue (yet). One other note, in not all cases is it OK to just drop the one lock (above it is). Say we hold a spinlock, but another lock (most notably the BKL) is also held. Since the preemption counter is recursive, we still won't allow preemption until all locks are dropped. In this case, we need to see what else needs to be dropped, or just call schedule() explicitly. > <patch snipped> Looks nice, Andrew. Anyone try this? (I don't use ReiserFS). I am putting together a conditional scheduling patch to fix some of the worst cases, for use in conjunction with the preemption patch, and this might be useful. -- Robert M. Love rml at ufl.edu rml at tech9.net