Quoting Andrew Morton (2017-08-15 23:30:10) > On Sat, 12 Aug 2017 12:34:37 +0100 Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> wrote: > > > Some shrinkers may only be able to free a bunch of objects at a time, and > > so free more than the requested nr_to_scan in one pass. Account for the > > extra freed objects against the total number of objects we intend to > > free, otherwise we may end up penalising the slab far more than intended. > > > > ... > > > > --- a/mm/vmscan.c > > +++ b/mm/vmscan.c > > @@ -398,6 +398,7 @@ static unsigned long do_shrink_slab(struct shrink_control *shrinkctl, > > break; > > freed += ret; > > > > + nr_to_scan = max(nr_to_scan, ret); > > count_vm_events(SLABS_SCANNED, nr_to_scan); > > total_scan -= nr_to_scan; > > scanned += nr_to_scan; > > Well... kinda. But what happens if the shrinker scanned more objects > than requested but failed to free many of them? Of if the shrinker > scanned less than requested? > > We really want to return nr_scanned from the shrinker invocation. > Could we add a field to shrink_control for this? Yes, that will work better overall. -Chris -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href