|
@@ -442,16 +442,8 @@ static unsigned long shrink_slab(gfp_t gfp_mask, int nid,
|
|
if (memcg && (!memcg_kmem_enabled() || !mem_cgroup_online(memcg)))
|
|
if (memcg && (!memcg_kmem_enabled() || !mem_cgroup_online(memcg)))
|
|
return 0;
|
|
return 0;
|
|
|
|
|
|
- if (!down_read_trylock(&shrinker_rwsem)) {
|
|
|
|
- /*
|
|
|
|
- * If we would return 0, our callers would understand that we
|
|
|
|
- * have nothing else to shrink and give up trying. By returning
|
|
|
|
- * 1 we keep it going and assume we'll be able to shrink next
|
|
|
|
- * time.
|
|
|
|
- */
|
|
|
|
- freed = 1;
|
|
|
|
|
|
+ if (!down_read_trylock(&shrinker_rwsem))
|
|
goto out;
|
|
goto out;
|
|
- }
|
|
|
|
|
|
|
|
list_for_each_entry(shrinker, &shrinker_list, list) {
|
|
list_for_each_entry(shrinker, &shrinker_list, list) {
|
|
struct shrink_control sc = {
|
|
struct shrink_control sc = {
|