On Mon, Apr 08 2013, Glauber Costa wrote: > It consists of: > > * returning long instead of int > * separating count from scan > * returning the number of freed entities in scan > > Signed-off-by: Glauber Costa <glommer@xxxxxxxxxxxxx> > CC: Dave Chinner <dchinner@xxxxxxxxxx> Reviewed-by: Greg Thelen <gthelen@xxxxxxxxxx> > --- > mm/huge_memory.c | 18 ++++++++++++------ > 1 file changed, 12 insertions(+), 6 deletions(-) > > diff --git a/mm/huge_memory.c b/mm/huge_memory.c > index e2f7f5aa..8bf43d3 100644 > --- a/mm/huge_memory.c > +++ b/mm/huge_memory.c > @@ -212,24 +212,30 @@ static void put_huge_zero_page(void) > BUG_ON(atomic_dec_and_test(&huge_zero_refcount)); > } > > -static int shrink_huge_zero_page(struct shrinker *shrink, > - struct shrink_control *sc) > + > +static long shrink_huge_zero_page_count(struct shrinker *shrink, > + struct shrink_control *sc) > { > - if (!sc->nr_to_scan) > - /* we can free zero page only if last reference remains */ > - return atomic_read(&huge_zero_refcount) == 1 ? HPAGE_PMD_NR : 0; > + /* we can free zero page only if last reference remains */ > + return atomic_read(&huge_zero_refcount) == 1 ? HPAGE_PMD_NR : 0; > +} > > +static long shrink_huge_zero_page_scan(struct shrinker *shrink, > + struct shrink_control *sc) > +{ > if (atomic_cmpxchg(&huge_zero_refcount, 1, 0) == 1) { > unsigned long zero_pfn = xchg(&huge_zero_pfn, 0); > BUG_ON(zero_pfn == 0); > __free_page(__pfn_to_page(zero_pfn)); > + return HPAGE_PMD_NR; > } > > return 0; > } > > static struct shrinker huge_zero_page_shrinker = { > - .shrink = shrink_huge_zero_page, > + .scan_objects = shrink_huge_zero_page_scan, > + .count_objects = shrink_huge_zero_page_count, > .seeks = DEFAULT_SEEKS, > }; -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html