]> git.proxmox.com Git - mirror_zfs.git/blobdiff - include/sys/zfs_context.h
Fixes for procfs files backed by linked lists
[mirror_zfs.git] / include / sys / zfs_context.h
index 6f502897ec18bedb9ad35c4687c2c61b7d733dec..11c048c2399c817ccb58da386dfdea1edf542d74 100644 (file)
@@ -62,6 +62,7 @@
 #include <sys/ctype.h>
 #include <sys/disp.h>
 #include <sys/trace.h>
+#include <sys/procfs_list.h>
 #include <linux/dcache_compat.h>
 #include <linux/utsname_compat.h>
 
@@ -351,6 +352,37 @@ extern void kstat_set_raw_ops(kstat_t *ksp,
     int (*data)(char *buf, size_t size, void *data),
     void *(*addr)(kstat_t *ksp, loff_t index));
 
+/*
+ * procfs list manipulation
+ */
+
+struct seq_file { };
+void seq_printf(struct seq_file *m, const char *fmt, ...);
+
+typedef struct procfs_list {
+       void            *pl_private;
+       kmutex_t        pl_lock;
+       list_t          pl_list;
+       uint64_t        pl_next_id;
+       size_t          pl_node_offset;
+} procfs_list_t;
+
+typedef struct procfs_list_node {
+       list_node_t     pln_link;
+       uint64_t        pln_id;
+} procfs_list_node_t;
+
+void procfs_list_install(const char *module,
+    const char *name,
+    procfs_list_t *procfs_list,
+    int (*show)(struct seq_file *f, void *p),
+    int (*show_header)(struct seq_file *f),
+    int (*clear)(procfs_list_t *procfs_list),
+    size_t procfs_list_node_off);
+void procfs_list_uninstall(procfs_list_t *procfs_list);
+void procfs_list_destroy(procfs_list_t *procfs_list);
+void procfs_list_add(procfs_list_t *procfs_list, void *p);
+
 /*
  * Kernel memory
  */