From mboxrd@z Thu Jan 1 00:00:00 1970 From: Glauber Costa Subject: [PATCH v6 17/31] i915: bail out earlier when shrinker cannot acquire mutex Date: Sun, 12 May 2013 22:13:38 +0400 Message-ID: <1368382432-25462-18-git-send-email-glommer@openvz.org> References: <1368382432-25462-1-git-send-email-glommer@openvz.org> Cc: , Andrew Morton , Greg Thelen , , Michal Hocko , Johannes Weiner , , Dave Chinner , Glauber Costa , Dave Chinner , Mel Gorman , Daniel Vetter , Kent Overstreet To: Return-path: Received: from mailhub.sw.ru ([195.214.232.25]:27775 "EHLO relay.sw.ru" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754833Ab3ELSOQ (ORCPT ); Sun, 12 May 2013 14:14:16 -0400 In-Reply-To: <1368382432-25462-1-git-send-email-glommer@openvz.org> Sender: linux-fsdevel-owner@vger.kernel.org List-ID: The main shrinker driver will keep trying for a while to free objects if the returned value from the shrink scan procedure is 0. That means "no objects now", but a retry could very well succeed. A negative value has a different meaning. It means it is impossible to shrink, and we would better bail out soon. We find this behavior more appropriate for the case where the lock cannot be taken. Specially given the hammer behavior of the i915: if another thread is already shrinking, we are likely not to be able to shrink anything anyway when we finally acquire the mutex. Signed-off-by: Glauber Costa CC: Dave Chinner CC: Mel Gorman CC: Daniel Vetter CC: Kent Overstreet --- drivers/gpu/drm/i915/i915_gem.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c index 6b17122..52b3ac1 100644 --- a/drivers/gpu/drm/i915/i915_gem.c +++ b/drivers/gpu/drm/i915/i915_gem.c @@ -4448,10 +4448,10 @@ i915_gem_inactive_count(struct shrinker *shrinker, struct shrink_control *sc) if (!mutex_trylock(&dev->struct_mutex)) { if (!mutex_is_locked_by(&dev->struct_mutex, current)) - return 0; + return -1; if (dev_priv->mm.shrinker_no_lock_stealing) - return 0; + return -1; unlock = false; } -- 1.8.1.4