Hi > Index: linux-2.6/include/linux/mm.h > =================================================================== > --- linux-2.6.orig/include/linux/mm.h 2010-10-19 14:19:40.000000000 +1100 > +++ linux-2.6/include/linux/mm.h 2010-10-19 14:36:48.000000000 +1100 > @@ -997,6 +997,10 @@ > /* > * A callback you can register to apply pressure to ageable caches. > * > + * 'shrink_zone' is the new shrinker API. It is to be used in preference > + * to 'shrink'. One must point to a shrinker function, the other must > + * be NULL. See 'shrink_slab' for details about the shrink_zone API. > + * > * 'shrink' is passed a count 'nr_to_scan' and a 'gfpmask'. It should > * look through the least-recently-used 'nr_to_scan' entries and > * attempt to free them up. It should return the number of objects > @@ -1013,13 +1017,53 @@ > int (*shrink)(struct shrinker *, int nr_to_scan, gfp_t gfp_mask); > int seeks; /* seeks to recreate an obj */ > > + /* > + * shrink_zone - slab shrinker callback for reclaimable objects > + * @shrink: this struct shrinker > + * @zone: zone to scan > + * @scanned: pagecache lru pages scanned in zone > + * @total: total pagecache lru pages in zone > + * @global: global pagecache lru pages (for zone-unaware shrinkers) > + * @flags: shrinker flags > + * @gfp_mask: gfp context we are operating within > + * > + * The shrinkers are responsible for calculating the appropriate > + * pressure to apply, batching up scanning (and cond_resched, > + * cond_resched_lock etc), and updating events counters including > + * count_vm_event(SLABS_SCANNED, nr). > + * > + * This approach gives flexibility to the shrinkers. They know best how > + * to do batching, how much time between cond_resched is appropriate, > + * what statistics to increment, etc. > + */ > + void (*shrink_zone)(struct shrinker *shrink, > + struct zone *zone, unsigned long scanned, > + unsigned long total, unsigned long global, > + unsigned long flags, gfp_t gfp_mask); Now we decided to don't remove old (*shrink)() interface and zone unaware slab users continue to use it. so why do we need global argument? If only zone aware shrinker user (*shrink_zone)(), we can remove it. Personally I think we should remove it because a removing makes a clear message that all shrinker need to implement zone awareness eventually. -- 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