|
@@ -231,8 +231,11 @@ unsigned long shrink_slab(unsigned long scanned, gfp_t gfp_mask,
|
|
if (scanned == 0)
|
|
if (scanned == 0)
|
|
scanned = SWAP_CLUSTER_MAX;
|
|
scanned = SWAP_CLUSTER_MAX;
|
|
|
|
|
|
- if (!down_read_trylock(&shrinker_rwsem))
|
|
|
|
- return 1; /* Assume we'll be able to shrink next time */
|
|
|
|
|
|
+ if (!down_read_trylock(&shrinker_rwsem)) {
|
|
|
|
+ /* Assume we'll be able to shrink next time */
|
|
|
|
+ ret = 1;
|
|
|
|
+ goto out;
|
|
|
|
+ }
|
|
|
|
|
|
list_for_each_entry(shrinker, &shrinker_list, list) {
|
|
list_for_each_entry(shrinker, &shrinker_list, list) {
|
|
unsigned long long delta;
|
|
unsigned long long delta;
|
|
@@ -283,6 +286,8 @@ unsigned long shrink_slab(unsigned long scanned, gfp_t gfp_mask,
|
|
shrinker->nr += total_scan;
|
|
shrinker->nr += total_scan;
|
|
}
|
|
}
|
|
up_read(&shrinker_rwsem);
|
|
up_read(&shrinker_rwsem);
|
|
|
|
+out:
|
|
|
|
+ cond_resched();
|
|
return ret;
|
|
return ret;
|
|
}
|
|
}
|
|
|
|
|