Blame view

include/linux/shrinker.h 1.5 KB
b0d40c92a   Dave Chinner   superblock: intro...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
  #ifndef _LINUX_SHRINKER_H
  #define _LINUX_SHRINKER_H
  
  /*
   * This struct is used to pass information from page reclaim to the shrinkers.
   * We consolidate the values for easier extention later.
   */
  struct shrink_control {
  	gfp_t gfp_mask;
  
  	/* How many slab objects shrinker() should scan and try to reclaim */
  	unsigned long nr_to_scan;
  };
  
  /*
   * A callback you can register to apply pressure to ageable caches.
   *
   * 'sc' is passed shrink_control which includes 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).
09f363c73   Mikulas Patocka   vmscan: fix shrin...
23
   * The callback must not return -1 if nr_to_scan is zero.
b0d40c92a   Dave Chinner   superblock: intro...
24
25
26
27
28
29
30
31
32
33
34
35
36
37
   *
   * 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.
   */
  struct shrinker {
  	int (*shrink)(struct shrinker *, struct shrink_control *sc);
  	int seeks;	/* seeks to recreate an obj */
  	long batch;	/* reclaim batch size, 0 = default */
  
  	/* These are for internal use */
  	struct list_head list;
83aeeada7   Konstantin Khlebnikov   vmscan: use atomi...
38
  	atomic_long_t nr_in_batch; /* objs pending delete */
b0d40c92a   Dave Chinner   superblock: intro...
39
40
41
42
43
  };
  #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 *);
  #endif