On Wed, Sep 18, 2013 at 10:38 PM, Dave Chinner david@fromorbit.com wrote:
No, that's wrong. ->count_objects should never ass SHRINK_STOP. Indeed, it should always return a count of objects in the cache, regardless of the context.
SHRINK_STOP is for ->scan_objects to tell the shrinker it can make any progress due to the context it is called in. This allows the shirnker to defer the work to another call in a different context. However, if ->count-objects doesn't return a count, the work that was supposed to be done cannot be deferred, and that is what ->count_objects should always return the number of objects in the cache.
So we should rework the locking in the drm/i915 shrinker to be able to always count objects? Thus far no one screamed yet that we're not really able to do that in all call contexts ...
So should I revert 81e49f or will the early return 0; completely upset the core shrinker logic? -Daniel