Merge branch 'akpm' (patches from Andrew)
Merge updates from Andrew Morton: - various misc bits - most of MM (quite a lot of MM material is awaiting the merge of linux-next dependencies) - kasan - printk updates - procfs updates - MAINTAINERS - /lib updates - checkpatch updates * emailed patches from Andrew Morton <akpm@linux-foundation.org>: (123 commits) init: reduce rootwait polling interval time to 5ms binfmt_elf: use vmalloc() for allocation of vma_filesz checkpatch: don't emit unified-diff error for rename-only patches checkpatch: don't check c99 types like uint8_t under tools checkpatch: avoid multiple line dereferences checkpatch: don't check .pl files, improve absolute path commit log test scripts/checkpatch.pl: fix spelling checkpatch: don't try to get maintained status when --no-tree is given lib/ida: document locking requirements a bit better lib/rbtree.c: fix typo in comment of ____rb_erase_color lib/Kconfig.debug: make CONFIG_STRICT_DEVMEM depend on CONFIG_DEVMEM MAINTAINERS: add drm and drm/i915 irc channels MAINTAINERS: add "C:" for URI for chat where developers hang out MAINTAINERS: add drm and drm/i915 bug filing info MAINTAINERS: add "B:" for URI where to file bugs get_maintainer: look for arbitrary letter prefixes in sections printk: add Kconfig option to set default console loglevel printk/sound: handle more message headers printk/btrfs: handle more message headers printk/kdb: handle more message headers ...
This commit is contained in:
14
mm/vmscan.c
14
mm/vmscan.c
@@ -291,6 +291,7 @@ static unsigned long do_shrink_slab(struct shrink_control *shrinkctl,
|
||||
int nid = shrinkctl->nid;
|
||||
long batch_size = shrinker->batch ? shrinker->batch
|
||||
: SHRINK_BATCH;
|
||||
long scanned = 0, next_deferred;
|
||||
|
||||
freeable = shrinker->count_objects(shrinker, shrinkctl);
|
||||
if (freeable == 0)
|
||||
@@ -312,7 +313,9 @@ static unsigned long do_shrink_slab(struct shrink_control *shrinkctl,
|
||||
pr_err("shrink_slab: %pF negative objects to delete nr=%ld\n",
|
||||
shrinker->scan_objects, total_scan);
|
||||
total_scan = freeable;
|
||||
}
|
||||
next_deferred = nr;
|
||||
} else
|
||||
next_deferred = total_scan;
|
||||
|
||||
/*
|
||||
* We need to avoid excessive windup on filesystem shrinkers
|
||||
@@ -369,17 +372,22 @@ static unsigned long do_shrink_slab(struct shrink_control *shrinkctl,
|
||||
|
||||
count_vm_events(SLABS_SCANNED, nr_to_scan);
|
||||
total_scan -= nr_to_scan;
|
||||
scanned += nr_to_scan;
|
||||
|
||||
cond_resched();
|
||||
}
|
||||
|
||||
if (next_deferred >= scanned)
|
||||
next_deferred -= scanned;
|
||||
else
|
||||
next_deferred = 0;
|
||||
/*
|
||||
* move the unused scan count back into the shrinker in a
|
||||
* manner that handles concurrent updates. If we exhausted the
|
||||
* scan, there is no need to do an update.
|
||||
*/
|
||||
if (total_scan > 0)
|
||||
new_nr = atomic_long_add_return(total_scan,
|
||||
if (next_deferred > 0)
|
||||
new_nr = atomic_long_add_return(next_deferred,
|
||||
&shrinker->nr_deferred[nid]);
|
||||
else
|
||||
new_nr = atomic_long_read(&shrinker->nr_deferred[nid]);
|
||||
|
Reference in New Issue
Block a user