mm: clean up and kernelify shrinker registration
I can never remember what the function to register to receive VM pressure is called. I have to trace down from __alloc_pages() to find it. It's called "set_shrinker()", and it needs Your Help. 1) Don't hide struct shrinker. It contains no magic. 2) Don't allocate "struct shrinker". It's not helpful. 3) Call them "register_shrinker" and "unregister_shrinker". 4) Call the function "shrink" not "shrinker". 5) Reduce the 17 lines of waffly comments to 13, but document it properly. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> Cc: David Chinner <dgc@sgi.com> Cc: Trond Myklebust <trond.myklebust@fys.uio.no> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:

committed by
Linus Torvalds

parent
5ad333eb66
commit
8e1f936b73
@@ -810,27 +810,31 @@ extern unsigned long do_mremap(unsigned long addr,
|
||||
unsigned long flags, unsigned long new_addr);
|
||||
|
||||
/*
|
||||
* Prototype to add a shrinker callback for ageable caches.
|
||||
*
|
||||
* These functions are passed a count `nr_to_scan' and a gfpmask. They should
|
||||
* scan `nr_to_scan' objects, attempting to free them.
|
||||
* A callback you can register to apply pressure to ageable caches.
|
||||
*
|
||||
* The callback must return the number of objects which remain in the cache.
|
||||
* '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
|
||||
* which remain in the cache. If it returns -1, it means it cannot do
|
||||
* any scanning at this time (eg. there is a risk of deadlock).
|
||||
*
|
||||
* The callback will be passed nr_to_scan == 0 when the VM is querying the
|
||||
* cache size, so a fastpath for that case is appropriate.
|
||||
* The 'gfpmask' refers to the allocation we are currently trying to
|
||||
* fulfil.
|
||||
*
|
||||
* Note that 'shrink' will be passed nr_to_scan == 0 when the VM is
|
||||
* querying the cache size, so a fastpath for that case is appropriate.
|
||||
*/
|
||||
typedef int (*shrinker_t)(int nr_to_scan, gfp_t gfp_mask);
|
||||
struct shrinker {
|
||||
int (*shrink)(int nr_to_scan, gfp_t gfp_mask);
|
||||
int seeks; /* seeks to recreate an obj */
|
||||
|
||||
/*
|
||||
* Add an aging callback. The int is the number of 'seeks' it takes
|
||||
* to recreate one of the objects that these functions age.
|
||||
*/
|
||||
|
||||
#define DEFAULT_SEEKS 2
|
||||
struct shrinker;
|
||||
extern struct shrinker *set_shrinker(int, shrinker_t);
|
||||
extern void remove_shrinker(struct shrinker *shrinker);
|
||||
/* These are for internal use */
|
||||
struct list_head list;
|
||||
long nr; /* objs pending delete */
|
||||
};
|
||||
#define DEFAULT_SEEKS 2 /* A good number if you don't know better. */
|
||||
extern void register_shrinker(struct shrinker *);
|
||||
extern void unregister_shrinker(struct shrinker *);
|
||||
|
||||
/*
|
||||
* Some shared mappigns will want the pages marked read-only
|
||||
|
Reference in New Issue
Block a user