X-Git-Url: https://git.camperquake.de/gitweb.cgi?a=blobdiff_plain;f=include%2Fsys%2Farc.h;h=dbc91ea3dc40c138a115803570cfd166850aaf93;hb=9759c60f1a1503e48dc5c45a209c3edd5758319f;hp=8f189c62d31dd417314ad4057939c0d2189059bb;hpb=6283f55ea1b91e680386388c17d14b89e344fa8d;p=zfs.git diff --git a/include/sys/arc.h b/include/sys/arc.h index 8f189c6..dbc91ea 100644 --- a/include/sys/arc.h +++ b/include/sys/arc.h @@ -34,16 +34,27 @@ extern "C" { #include #include #include +#include typedef struct arc_buf_hdr arc_buf_hdr_t; typedef struct arc_buf arc_buf_t; +typedef struct arc_prune arc_prune_t; typedef void arc_done_func_t(zio_t *zio, arc_buf_t *buf, void *private); +typedef void arc_prune_func_t(int64_t bytes, void *private); typedef int arc_evict_func_t(void *private); /* generic arc_done_func_t's which you can use */ arc_done_func_t arc_bcopy_func; arc_done_func_t arc_getbuf_func; +/* generic arc_prune_func_t wrapper for callbacks */ +struct arc_prune { + arc_prune_func_t *p_pfunc; + void *p_private; + list_node_t p_node; + refcount_t p_refcnt; +}; + struct arc_buf { arc_buf_hdr_t *b_hdr; arc_buf_t *b_next; @@ -98,6 +109,7 @@ int arc_released(arc_buf_t *buf); int arc_has_callback(arc_buf_t *buf); void arc_buf_freeze(arc_buf_t *buf); void arc_buf_thaw(arc_buf_t *buf); +boolean_t arc_buf_eviction_needed(arc_buf_t *buf); #ifdef ZFS_DEBUG int arc_referenced(arc_buf_t *buf); #endif @@ -113,9 +125,13 @@ zio_t *arc_write(zio_t *pio, spa_t *spa, uint64_t txg, arc_done_func_t *ready, arc_done_func_t *done, void *private, int priority, int zio_flags, const zbookmark_t *zb); +arc_prune_t *arc_add_prune_callback(arc_prune_func_t *func, void *private); +void arc_remove_prune_callback(arc_prune_t *p); + void arc_set_callback(arc_buf_t *buf, arc_evict_func_t *func, void *private); int arc_buf_evict(arc_buf_t *buf); +void arc_adjust_meta(int64_t adjustment, boolean_t may_prune); void arc_flush(spa_t *spa); void arc_tempreserve_clear(uint64_t reserve); int arc_tempreserve_space(uint64_t reserve, uint64_t txg); @@ -135,6 +151,11 @@ void l2arc_fini(void); void l2arc_start(void); void l2arc_stop(void); +/* Global tunings */ +extern int zfs_write_limit_shift; +extern unsigned long zfs_write_limit_max; +extern kmutex_t zfs_write_limit_lock; + #ifdef __cplusplus } #endif