2010/7/24 KOSAKI Motohiro <kosaki.motohiro@xxxxxxxxxxxxxx>: > Now, shrink_slab() doesn't return number of reclaimed objects. IOW, > current shrink_all_slab() is broken. Thus instead we use reclaim_state > to detect no reclaimable slab objects. > > Signed-off-by: KOSAKI Motohiro <kosaki.motohiro@xxxxxxxxxxxxxx> > --- > mm/vmscan.c | 20 +++++++++----------- > 1 files changed, 9 insertions(+), 11 deletions(-) > > diff --git a/mm/vmscan.c b/mm/vmscan.c > index d7256e0..bfa1975 100644 > --- a/mm/vmscan.c > +++ b/mm/vmscan.c > @@ -300,18 +300,16 @@ static unsigned long shrink_slab(struct zone *zone, unsigned long scanned, unsig > void shrink_all_slab(void) > { > struct zone *zone; > - unsigned long nr; > + struct reclaim_state reclaim_state; > > -again: > - nr = 0; > - for_each_zone(zone) > - nr += shrink_slab(zone, 1, 1, 1, GFP_KERNEL); > - /* > - * If we reclaimed less than 10 objects, might as well call > - * it a day. Nothing special about the number 10. > - */ > - if (nr >= 10) > - goto again; > + current->reclaim_state = &reclaim_state; > + do { > + reclaim_state.reclaimed_slab = 0; > + for_each_zone(zone) Oops, this should be for_each_populated_zone(). > + shrink_slab(zone, 1, 1, 1, GFP_KERNEL); > + } while (reclaim_state.reclaimed_slab); > + > + current->reclaim_state = NULL; > } > > static inline int is_page_cache_freeable(struct page *page) > -- > 1.6.5.2 > > > > -- > To unsubscribe, send a message with 'unsubscribe linux-mm' in > the body to majordomo@xxxxxxxxxx For more info on Linux MM, > see: http://www.linux-mm.org/ . > Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a> > -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxxx For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href