]> git.proxmox.com Git - mirror_zfs.git/blobdiff - include/spl/sys/kstat.h
Fixes for procfs files backed by linked lists
[mirror_zfs.git] / include / spl / sys / kstat.h
index f197ce455e65a4f1cca0a82c5baaeb95992c127e..53274d8f59c4e93df9af02e9afc8382ec5cad6f0 100644 (file)
@@ -98,30 +98,34 @@ typedef struct kstat_raw_ops {
        void *(*addr)(kstat_t *ksp, loff_t index);
 } kstat_raw_ops_t;
 
+typedef struct kstat_proc_entry {
+       char    kpe_name[KSTAT_STRLEN+1];       /* kstat name */
+       char    kpe_module[KSTAT_STRLEN+1];     /* provider module name */
+       kstat_module_t          *kpe_owner;     /* kstat module linkage */
+       struct list_head        kpe_list;       /* kstat linkage */
+       struct proc_dir_entry   *kpe_proc;      /* procfs entry */
+} kstat_proc_entry_t;
+
 struct kstat_s {
        int             ks_magic;               /* magic value */
        kid_t           ks_kid;                 /* unique kstat ID */
        hrtime_t        ks_crtime;              /* creation time */
        hrtime_t        ks_snaptime;            /* last access time */
-       char            ks_module[KSTAT_STRLEN+1]; /* provider module name */
        int             ks_instance;            /* provider module instance */
-       char            ks_name[KSTAT_STRLEN+1]; /* kstat name */
        char            ks_class[KSTAT_STRLEN+1]; /* kstat class */
        uchar_t         ks_type;                /* kstat data type */
        uchar_t         ks_flags;               /* kstat flags */
        void            *ks_data;               /* kstat type-specific data */
        uint_t          ks_ndata;               /* # of data records */
        size_t          ks_data_size;           /* size of kstat data section */
-       struct proc_dir_entry *ks_proc;         /* proc linkage */
        kstat_update_t  *ks_update;             /* dynamic updates */
        void            *ks_private;            /* private data */
        kmutex_t        ks_private_lock;        /* kstat private data lock */
        kmutex_t        *ks_lock;               /* kstat data lock */
-       struct list_head ks_list;               /* kstat linkage */
-       kstat_module_t  *ks_owner;              /* kstat module linkage */
        kstat_raw_ops_t ks_raw_ops;             /* ops table for raw type */
        char            *ks_raw_buf;            /* buf used for raw ops */
        size_t          ks_raw_bufsize;         /* size of raw ops buffer */
+       kstat_proc_entry_t      ks_proc;        /* data for procfs entry */
 };
 
 typedef struct kstat_named_s {
@@ -189,6 +193,12 @@ extern kstat_t *__kstat_create(const char *ks_module, int ks_instance,
     const char *ks_name, const char *ks_class, uchar_t ks_type,
     uint_t ks_ndata, uchar_t ks_flags);
 
+extern void kstat_proc_entry_init(kstat_proc_entry_t *kpep,
+    const char *module, const char *name);
+extern void kstat_proc_entry_delete(kstat_proc_entry_t *kpep);
+extern void kstat_proc_entry_install(kstat_proc_entry_t *kpep,
+    const struct file_operations *file_ops, void *data);
+
 extern void __kstat_install(kstat_t *ksp);
 extern void __kstat_delete(kstat_t *ksp);
 extern void kstat_waitq_enter(kstat_io_t *);