From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1762020AbcINROc (ORCPT ); Wed, 14 Sep 2016 13:14:32 -0400 Received: from Galois.linutronix.de ([146.0.238.70]:35981 "EHLO Galois.linutronix.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1761189AbcINROZ (ORCPT ); Wed, 14 Sep 2016 13:14:25 -0400 Date: Wed, 14 Sep 2016 19:14:16 +0200 From: Sebastian Andrzej Siewior To: Thomas Gleixner Cc: linux-rt-users@vger.kernel.org, linux-kernel@vger.kernel.org, Steven Rostedt Subject: Re: [PATCH] fs/dcache: resched/chill only if we make no progress Message-ID: <20160914171416.c2k7l2flu4ufdks2@linutronix.de> References: <20160908182503.bh77mwwhjhiaqf4y@linutronix.de> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: User-Agent: NeoMutt/20160910 (1.7.0) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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