mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-22 10:37:35 +03:00
FreeBSD: Add support for procfs_list
The procfs_list interface is required by several kstats. Implement
this functionality for FreeBSD to provide access to these kstats.
Reviewed-by: Allan Jude <allan@klarasystems.com>
Reviewed-by: Ryan Moeller <ryan@ixsystems.com>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Matt Macy <mmacy@FreeBSD.org>
Closes #10890
This commit is contained in:
@@ -83,6 +83,14 @@ typedef struct kstat_s kstat_t;
|
||||
typedef int kid_t; /* unique kstat id */
|
||||
typedef int kstat_update_t(struct kstat_s *, int); /* dynamic update cb */
|
||||
|
||||
struct seq_file {
|
||||
char *sf_buf;
|
||||
size_t sf_size;
|
||||
};
|
||||
|
||||
void seq_printf(struct seq_file *m, const char *fmt, ...);
|
||||
|
||||
|
||||
typedef struct kstat_module {
|
||||
char ksm_name[KSTAT_STRLEN+1]; /* module name */
|
||||
struct list_head ksm_module_list; /* module linkage */
|
||||
@@ -92,6 +100,7 @@ typedef struct kstat_module {
|
||||
|
||||
typedef struct kstat_raw_ops {
|
||||
int (*headers)(char *buf, size_t size);
|
||||
int (*seq_headers)(struct seq_file *);
|
||||
int (*data)(char *buf, size_t size, void *data);
|
||||
void *(*addr)(kstat_t *ksp, loff_t index);
|
||||
} kstat_raw_ops_t;
|
||||
@@ -112,6 +121,7 @@ struct kstat_s {
|
||||
size_t ks_data_size; /* size of kstat data section */
|
||||
kstat_update_t *ks_update; /* dynamic updates */
|
||||
void *ks_private; /* private data */
|
||||
void *ks_private1; /* 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 */
|
||||
@@ -185,6 +195,12 @@ 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));
|
||||
|
||||
extern void __kstat_set_seq_raw_ops(kstat_t *ksp,
|
||||
int (*headers)(struct seq_file *),
|
||||
int (*data)(char *buf, size_t size, void *data),
|
||||
void* (*addr)(kstat_t *ksp, loff_t index));
|
||||
|
||||
|
||||
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);
|
||||
@@ -196,6 +212,8 @@ extern void kstat_waitq_exit(kstat_io_t *);
|
||||
extern void kstat_runq_enter(kstat_io_t *);
|
||||
extern void kstat_runq_exit(kstat_io_t *);
|
||||
|
||||
#define kstat_set_seq_raw_ops(k, h, d, a) \
|
||||
__kstat_set_seq_raw_ops(k, h, d, a)
|
||||
#define kstat_set_raw_ops(k, h, d, a) \
|
||||
__kstat_set_raw_ops(k, h, d, a)
|
||||
#define kstat_create(m, i, n, c, t, s, f) \
|
||||
|
||||
@@ -33,16 +33,18 @@
|
||||
* procfs list manipulation
|
||||
*/
|
||||
|
||||
struct seq_file { };
|
||||
void seq_printf(struct seq_file *m, const char *fmt, ...);
|
||||
|
||||
typedef struct procfs_list {
|
||||
typedef struct procfs_list procfs_list_t;
|
||||
struct procfs_list {
|
||||
void *pl_private;
|
||||
void *pl_next_data;
|
||||
kmutex_t pl_lock;
|
||||
list_t pl_list;
|
||||
uint64_t pl_next_id;
|
||||
int (*pl_show)(struct seq_file *f, void *p);
|
||||
int (*pl_show_header)(struct seq_file *f);
|
||||
int (*pl_clear)(procfs_list_t *procfs_list);
|
||||
size_t pl_node_offset;
|
||||
} procfs_list_t;
|
||||
};
|
||||
|
||||
typedef struct procfs_list_node {
|
||||
list_node_t pln_link;
|
||||
@@ -50,6 +52,7 @@ typedef struct procfs_list_node {
|
||||
} procfs_list_node_t;
|
||||
|
||||
void procfs_list_install(const char *module,
|
||||
const char *submodule,
|
||||
const char *name,
|
||||
mode_t mode,
|
||||
procfs_list_t *procfs_list,
|
||||
|
||||
@@ -57,6 +57,7 @@ typedef struct procfs_list_node {
|
||||
} procfs_list_node_t;
|
||||
|
||||
void procfs_list_install(const char *module,
|
||||
const char *submodule,
|
||||
const char *name,
|
||||
mode_t mode,
|
||||
procfs_list_t *procfs_list,
|
||||
|
||||
Reference in New Issue
Block a user