aboutsummaryrefslogtreecommitdiffstats
path: root/mm
diff options
context:
space:
mode:
authorWolfgang Wiedmeyer <wolfgit@wiedmeyer.de>2015-10-23 22:54:05 +0200
committerWolfgang Wiedmeyer <wolfgit@wiedmeyer.de>2015-10-23 22:54:05 +0200
commit7134863d0877e48d58344a51024a410fe1093a34 (patch)
tree03bc0097f70c0e5b03ce25b7747457e3c172cecc /mm
parent61441d066d8f7691ad3d9afdf1d3ae94a478c057 (diff)
downloadkernel_samsung_smdk4412-7134863d0877e48d58344a51024a410fe1093a34.zip
kernel_samsung_smdk4412-7134863d0877e48d58344a51024a410fe1093a34.tar.gz
kernel_samsung_smdk4412-7134863d0877e48d58344a51024a410fe1093a34.tar.bz2
update version code
Diffstat (limited to 'mm')
-rw-r--r--mm/vmscan.c17
1 files changed, 7 insertions, 10 deletions
diff --git a/mm/vmscan.c b/mm/vmscan.c
index 99082fa..588e9f7 100644
--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -184,7 +184,7 @@ static unsigned long zone_nr_lru_pages(struct zone *zone,
*/
void register_shrinker(struct shrinker *shrinker)
{
- shrinker->nr = 0;
+ atomic_long_set(&shrinker->nr_in_batch, 0);
down_write(&shrinker_rwsem);
list_add_tail(&shrinker->list, &shrinker_list);
up_write(&shrinker_rwsem);
@@ -263,9 +263,7 @@ unsigned long shrink_slab(struct shrink_control *shrink,
* and zero it so that other concurrent shrinker invocations
* don't also do this scanning work.
*/
- do {
- nr = shrinker->nr;
- } while (cmpxchg(&shrinker->nr, nr, 0) != nr);
+ nr = atomic_long_xchg(&shrinker->nr_in_batch, 0);
total_scan = nr;
delta = (4 * nr_pages_scanned) / shrinker->seeks;
@@ -328,12 +326,11 @@ unsigned long shrink_slab(struct shrink_control *shrink,
* manner that handles concurrent updates. If we exhausted the
* scan, there is no need to do an update.
*/
- do {
- nr = shrinker->nr;
- new_nr = total_scan + nr;
- if (total_scan <= 0)
- break;
- } while (cmpxchg(&shrinker->nr, nr, new_nr) != nr);
+ if (total_scan > 0)
+ new_nr = atomic_long_add_return(total_scan,
+ &shrinker->nr_in_batch);
+ else
+ new_nr = atomic_long_read(&shrinker->nr_in_batch);
trace_mm_shrink_slab_end(shrinker, shrink_ret, nr, new_nr);
}