On 2016-09-10 08:17:13 [+0200], Thomas Gleixner wrote: > On Thu, 8 Sep 2016, Sebastian Andrzej Siewior wrote: > > + if (parent == dentry) { > > + /* the task with the highest priority won't schedule */ > > + r = cond_resched(); > > + if (!r && (rt_task(current) || dl_task(current))) > > That's wrong because a non RT task will just spin until its time slice is > up. Wasted cycles for nothing. > > Ideally we make spinning conditional on > > !on_cpu(dentry->lock->owner) > > That would avoid going to sleep if the owner runs on another cpu. We have > no mechanism for that, but I think it'd be worth to think about one. something like |#ifdef CONFIG_SMP | task_running(task_rq(lock_owner), lock_owner)) |#else | 1) |#endif | cpu_chill(); the lock_owner is tricky because we have two locks: inode->i_lock and parent->d_lock. So we would have to do the same lookup, like dentry_kill() is doing, and check both in worth case. Sebastian -- To unsubscribe from this list: send the line "unsubscribe linux-rt-users" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html