File: /Users/paulross/dev/linux/linux-3.13/include/linux/shrinker.h

Green shading in the line number column means the source is part of the translation unit, red means it is conditionally excluded. Highlighted line numbers link to the translation unit page. Highlighted macros link to the macro page.

       1: #ifndef _LINUX_SHRINKER_H
       2: #define _LINUX_SHRINKER_H
       3: 
       4: /*
       5:  * This struct is used to pass information from page reclaim to the shrinkers.
       6:  * We consolidate the values for easier extention later.
       7:  *
       8:  * The 'gfpmask' refers to the allocation we are currently trying to
       9:  * fulfil.
      10:  */
      11: struct shrink_control {
      12:     gfp_t gfp_mask;
      13: 
      14:     /*
      15:      * How many objects scan_objects should scan and try to reclaim.
      16:      * This is reset before every call, so it is safe for callees
      17:      * to modify.
      18:      */
      19:     unsigned long nr_to_scan;
      20: 
      21:     /* shrink from these nodes */
      22:     nodemask_t nodes_to_scan;
      23:     /* current node being shrunk (for NUMA aware shrinkers) */
      24:     int nid;
      25: };
      26: 
      27: #define SHRINK_STOP (~0UL)
      28: /*
      29:  * A callback you can register to apply pressure to ageable caches.
      30:  *
      31:  * @count_objects should return the number of freeable items in the cache. If
      32:  * there are no objects to free or the number of freeable items cannot be
      33:  * determined, it should return 0. No deadlock checks should be done during the
      34:  * count callback - the shrinker relies on aggregating scan counts that couldn't
      35:  * be executed due to potential deadlocks to be run at a later call when the
      36:  * deadlock condition is no longer pending.
      37:  *
      38:  * @scan_objects will only be called if @count_objects returned a non-zero
      39:  * value for the number of freeable objects. The callout should scan the cache
      40:  * and attempt to free items from the cache. It should then return the number
      41:  * of objects freed during the scan, or SHRINK_STOP if progress cannot be made
      42:  * due to potential deadlocks. If SHRINK_STOP is returned, then no further
      43:  * attempts to call the @scan_objects will be made from the current reclaim
      44:  * context.
      45:  *
      46:  * @flags determine the shrinker abilities, like numa awareness
      47:  */
      48: struct shrinker {
      49:     unsigned long (*count_objects)(struct shrinker *,
      50:                        struct shrink_control *sc);
      51:     unsigned long (*scan_objects)(struct shrinker *,
      52:                       struct shrink_control *sc);
      53: 
      54:     int seeks;    /* seeks to recreate an obj */
      55:     long batch;    /* reclaim batch size, 0 = default */
      56:     unsigned long flags;
      57: 
      58:     /* These are for internal use */
      59:     struct list_head list;
      60:     /* objs pending delete, per node */
      61:     atomic_long_t *nr_deferred;
      62: };
      63: #define DEFAULT_SEEKS 2 /* A good number if you don't know better. */
      64: 
      65: /* Flags */
      66: #define SHRINKER_NUMA_AWARE (1 << 0)
      67: 
      68: extern int register_shrinker(struct shrinker *);
      69: extern void unregister_shrinker(struct shrinker *);
      70: #endif
      71: