zfs_prune: reset sc.nr_to_scan
sc.nr_to_scan is an input to super_cache_clean (via shrinker->scan_objects), used to set the number of objects to scan in the various caches. However super_cache_scan also modifies sc.nr_to_scan, so when used in a loop we need to reset sc.nr_to_scan back to our desired nr_to_scan for the next iteration. Issue discovered and solution suggested by Tenzin Lhakhang @tlhakhan. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Chris Dunlop <chris@onthe.net.au> Issue #12433 Closes #12908
This commit is contained in:
parent
3c80e0742a
commit
2a149775b4
|
@ -1251,6 +1251,11 @@ zfs_prune(struct super_block *sb, unsigned long nr_to_scan, int *objects)
|
|||
*objects = 0;
|
||||
for_each_online_node(sc.nid) {
|
||||
*objects += (*shrinker->scan_objects)(shrinker, &sc);
|
||||
/*
|
||||
* reset sc.nr_to_scan, modified by
|
||||
* scan_objects == super_cache_scan
|
||||
*/
|
||||
sc.nr_to_scan = nr_to_scan;
|
||||
}
|
||||
} else {
|
||||
*objects = (*shrinker->scan_objects)(shrinker, &sc);
|
||||
|
|
Loading…
Reference in New Issue