X-Git-Url: https://git.camperquake.de/gitweb.cgi?a=blobdiff_plain;f=include%2Fsys%2Farc.h;h=dd9b128bc1ea157101f6efe9c6dd4f370cf29f66;hb=ab26409db753bb087842ab6f1af943f3386c764f;hp=8f189c62d31dd417314ad4057939c0d2189059bb;hpb=6283f55ea1b91e680386388c17d14b89e344fa8d;p=zfs.git diff --git a/include/sys/arc.h b/include/sys/arc.h index 8f189c6..dd9b128 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; @@ -113,9 +124,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);