X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Finclude%2Flprocfs_status.h;h=2b66f7af7a4bd2c7553e2e528fa9836fece7c8e9;hp=ffb85ca78d8c567b5e63f1ca0212c75c519f62ec;hb=c1d0a355a6;hpb=7f66fe7572a2a8ab6711146bdea67d04e6381b4b diff --git a/lustre/include/lprocfs_status.h b/lustre/include/lprocfs_status.h index ffb85ca..2b66f7a 100644 --- a/lustre/include/lprocfs_status.h +++ b/lustre/include/lprocfs_status.h @@ -15,11 +15,7 @@ * * You should have received a copy of the GNU General Public License * version 2 along with this program; If not, see - * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * http://www.gnu.org/licenses/gpl-2.0.html * * GPL HEADER END */ @@ -27,7 +23,7 @@ * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. * - * Copyright (c) 2011, 2013, Intel Corporation. + * Copyright (c) 2011, 2017, Intel Corporation. */ /* * This file is part of Lustre, http://www.lustre.org/ @@ -35,46 +31,24 @@ * * lustre/include/lprocfs_status.h * - * Top level header file for LProc SNMP + * Top level header file for LProc * * Author: Hariharan Thantry thantry@users.sourceforge.net */ -#ifndef _LPROCFS_SNMP_H -#define _LPROCFS_SNMP_H - -#if defined(__linux__) -#include -#elif defined(__APPLE__) -#include -#elif defined(__WINNT__) -#include -#else -#error Unsupported operating system. -#endif -#include -#include +#ifndef _LPROCFS_STATUS_H +#define _LPROCFS_STATUS_H -#ifndef HAVE_ONLY_PROCFS_SEQ -struct lprocfs_vars { - const char *name; - read_proc_t *read_fptr; - write_proc_t *write_fptr; - void *data; - const struct file_operations *fops; - /** - * /proc file mode. - */ - mode_t proc_mode; -}; +#include +#include +#include +#include +#include +#include -struct lprocfs_static_vars { - struct lprocfs_vars *module_vars; - struct lprocfs_vars *obd_vars; -}; +#include +#include -#endif - -struct lprocfs_seq_vars { +struct lprocfs_vars { const char *name; const struct file_operations *fops; void *data; @@ -84,6 +58,30 @@ struct lprocfs_seq_vars { mode_t proc_mode; }; +static inline unsigned int pct(unsigned long a, unsigned long b) +{ + return b ? a * 100 / b : 0; +} + +#define PAGES_TO_MiB(pages) ((pages) >> (20 - PAGE_SHIFT)) +#define MiB_TO_PAGES(mb) ((mb) << (20 - PAGE_SHIFT)) + +/** + * Append a space separated list of current set flags to str. + */ +#define flag2str(port, flag) \ + do { \ + if ((port)->port##_##flag) { \ + seq_printf(m, "%s" #flag, first ? "" : ", "); \ + first = false; \ + } \ + } while (0) + +void obd_connect_seq_flags2str(struct seq_file *m, __u64 flags, __u64 flags2, + const char *sep); +void obd_connect_data_seqprint(struct seq_file *m, + struct obd_connect_data *ocd); + /* if we find more consumers this could be generalized */ #define OBD_HIST_MAX 32 struct obd_histogram { @@ -182,14 +180,13 @@ struct lprocfs_counter { #define lc_sum_irq lc_array_sum[1] struct lprocfs_percpu { -#ifndef __GNUC__ - __s64 pad; -#endif - struct lprocfs_counter lp_cntr[0]; + struct lprocfs_counter lp_cntr[0]; }; -#define LPROCFS_GET_NUM_CPU 0x0001 -#define LPROCFS_GET_SMP_ID 0x0002 +enum lprocfs_stats_lock_ops { + LPROCFS_GET_NUM_CPU = 0x0001, /* number allocated per-CPU stats */ + LPROCFS_GET_SMP_ID = 0x0002, /* current stat to be updated */ +}; enum lprocfs_stats_flags { LPROCFS_STATS_FLAG_NONE = 0x0000, /* per cpu counter */ @@ -199,13 +196,13 @@ enum lprocfs_stats_flags { }; enum lprocfs_fields_flags { - LPROCFS_FIELDS_FLAGS_CONFIG = 0x0001, - LPROCFS_FIELDS_FLAGS_SUM = 0x0002, - LPROCFS_FIELDS_FLAGS_MIN = 0x0003, - LPROCFS_FIELDS_FLAGS_MAX = 0x0004, - LPROCFS_FIELDS_FLAGS_AVG = 0x0005, - LPROCFS_FIELDS_FLAGS_SUMSQUARE = 0x0006, - LPROCFS_FIELDS_FLAGS_COUNT = 0x0007, + LPROCFS_FIELDS_FLAGS_CONFIG = 0x0001, + LPROCFS_FIELDS_FLAGS_SUM = 0x0002, + LPROCFS_FIELDS_FLAGS_MIN = 0x0003, + LPROCFS_FIELDS_FLAGS_MAX = 0x0004, + LPROCFS_FIELDS_FLAGS_AVG = 0x0005, + LPROCFS_FIELDS_FLAGS_SUMSQUARE = 0x0006, + LPROCFS_FIELDS_FLAGS_COUNT = 0x0007, }; struct lprocfs_stats { @@ -302,9 +299,9 @@ static inline int opcode_offset(__u32 opc) { OPC_RANGE(LDLM) + OPC_RANGE(MDS) + OPC_RANGE(OST)); - } else if (opc < UPDATE_LAST_OPC) { + } else if (opc < OUT_UPDATE_LAST_OPC) { /* update opcode */ - return (opc - UPDATE_FIRST_OPC + + return (opc - OUT_UPDATE_FIRST_OPC + OPC_RANGE(FLD) + OPC_RANGE(SEC) + OPC_RANGE(SEQ) + @@ -318,7 +315,7 @@ static inline int opcode_offset(__u32 opc) { } else if (opc < LFSCK_LAST_OPC) { /* LFSCK opcode */ return (opc - LFSCK_FIRST_OPC + - OPC_RANGE(UPDATE) + + OPC_RANGE(OUT_UPDATE) + OPC_RANGE(FLD) + OPC_RANGE(SEC) + OPC_RANGE(SEQ) + @@ -346,7 +343,7 @@ static inline int opcode_offset(__u32 opc) { OPC_RANGE(SEQ) + \ OPC_RANGE(SEC) + \ OPC_RANGE(FLD) + \ - OPC_RANGE(UPDATE) + \ + OPC_RANGE(OUT_UPDATE) + \ OPC_RANGE(LFSCK)) #define EXTRA_MAX_OPCODES ((PTLRPC_LAST_CNTR - PTLRPC_FIRST_CNTR) + \ @@ -363,145 +360,63 @@ enum { #define PTLRPC_FIRST_CNTR PTLRPC_REQWAIT_CNTR -enum { - LDLM_GLIMPSE_ENQUEUE = 0, - LDLM_PLAIN_ENQUEUE, - LDLM_EXTENT_ENQUEUE, - LDLM_FLOCK_ENQUEUE, - LDLM_IBITS_ENQUEUE, - MDS_REINT_SETATTR, - MDS_REINT_CREATE, - MDS_REINT_LINK, - MDS_REINT_UNLINK, - MDS_REINT_RENAME, - MDS_REINT_OPEN, - MDS_REINT_SETXATTR, - BRW_READ_BYTES, - BRW_WRITE_BYTES, - EXTRA_LAST_OPC +enum lprocfs_extra_opc { + LDLM_GLIMPSE_ENQUEUE = 0, + LDLM_PLAIN_ENQUEUE, + LDLM_EXTENT_ENQUEUE, + LDLM_FLOCK_ENQUEUE, + LDLM_IBITS_ENQUEUE, + MDS_REINT_SETATTR, + MDS_REINT_CREATE, + MDS_REINT_LINK, + MDS_REINT_UNLINK, + MDS_REINT_RENAME, + MDS_REINT_OPEN, + MDS_REINT_SETXATTR, + MDS_REINT_RESYNC, + BRW_READ_BYTES, + BRW_WRITE_BYTES, + EXTRA_LAST_OPC }; #define EXTRA_FIRST_OPC LDLM_GLIMPSE_ENQUEUE /* class_obd.c */ -extern cfs_proc_dir_entry_t *proc_lustre_root; +extern struct proc_dir_entry *proc_lustre_root; +extern struct dentry *debugfs_lustre_root; +extern struct kset *lustre_kset; struct obd_device; struct obd_histogram; -/* Days / hours / mins / seconds format */ -struct dhms { - int d,h,m,s; -}; -static inline void s2dhms(struct dhms *ts, time_t secs) -{ - ts->d = secs / 86400; - secs = secs % 86400; - ts->h = secs / 3600; - secs = secs % 3600; - ts->m = secs / 60; - ts->s = secs % 60; -} -#define DHMS_FMT "%dd%dh%02dm%02ds" -#define DHMS_VARS(x) (x)->d, (x)->h, (x)->m, (x)->s - #define JOBSTATS_JOBID_VAR_MAX_LEN 20 #define JOBSTATS_DISABLE "disable" #define JOBSTATS_PROCNAME_UID "procname_uid" +#define JOBSTATS_NODELOCAL "nodelocal" +#define JOBSTATS_SESSION "session" typedef void (*cntr_init_callback)(struct lprocfs_stats *stats); struct obd_job_stats { - cfs_hash_t *ojs_hash; - cfs_list_t ojs_list; - rwlock_t ojs_lock; /* protect the obj_list */ - cntr_init_callback ojs_cntr_init_fn; - int ojs_cntr_num; - int ojs_cleanup_interval; - time_t ojs_last_cleanup; + struct cfs_hash *ojs_hash; /* hash of jobids */ + struct list_head ojs_list; /* list of job_stat structs */ + rwlock_t ojs_lock; /* protect ojs_list/js_list */ + unsigned int ojs_cleanup_interval;/* seconds before expiry */ + time64_t ojs_last_cleanup; /* previous cleanup time */ + cntr_init_callback ojs_cntr_init_fn;/* lprocfs_stats initializer */ + unsigned short ojs_cntr_num; /* number of stats in struct */ + bool ojs_cleaning; /* currently expiring stats */ }; -#ifdef LPROCFS +#ifdef CONFIG_PROC_FS -extern int lprocfs_stats_alloc_one(struct lprocfs_stats *stats, - unsigned int cpuid); -/* - * \return value - * < 0 : on error (only possible for opc as LPROCFS_GET_SMP_ID) - */ -static inline int lprocfs_stats_lock(struct lprocfs_stats *stats, int opc, - unsigned long *flags) -{ - int rc = 0; - - switch (opc) { - default: - LBUG(); - - case LPROCFS_GET_SMP_ID: - if (stats->ls_flags & LPROCFS_STATS_FLAG_NOPERCPU) { - if (stats->ls_flags & LPROCFS_STATS_FLAG_IRQ_SAFE) - spin_lock_irqsave(&stats->ls_lock, *flags); - else - spin_lock(&stats->ls_lock); - return 0; - } else { - unsigned int cpuid = get_cpu(); - - if (unlikely(stats->ls_percpu[cpuid] == NULL)) { - rc = lprocfs_stats_alloc_one(stats, cpuid); - if (rc < 0) { - put_cpu(); - return rc; - } - } - return cpuid; - } - - case LPROCFS_GET_NUM_CPU: - if (stats->ls_flags & LPROCFS_STATS_FLAG_NOPERCPU) { - if (stats->ls_flags & LPROCFS_STATS_FLAG_IRQ_SAFE) - spin_lock_irqsave(&stats->ls_lock, *flags); - else - spin_lock(&stats->ls_lock); - return 1; - } else { - return stats->ls_biggest_alloc_num; - } - } -} - -static inline void lprocfs_stats_unlock(struct lprocfs_stats *stats, int opc, - unsigned long *flags) -{ - switch (opc) { - default: - LBUG(); - - case LPROCFS_GET_SMP_ID: - if (stats->ls_flags & LPROCFS_STATS_FLAG_NOPERCPU) { - if (stats->ls_flags & LPROCFS_STATS_FLAG_IRQ_SAFE) { - spin_unlock_irqrestore(&stats->ls_lock, - *flags); - } else { - spin_unlock(&stats->ls_lock); - } - } else { - put_cpu(); - } - return; - - case LPROCFS_GET_NUM_CPU: - if (stats->ls_flags & LPROCFS_STATS_FLAG_NOPERCPU) { - if (stats->ls_flags & LPROCFS_STATS_FLAG_IRQ_SAFE) { - spin_unlock_irqrestore(&stats->ls_lock, - *flags); - } else { - spin_unlock(&stats->ls_lock); - } - } - return; - } -} +int lprocfs_stats_alloc_one(struct lprocfs_stats *stats, + unsigned int cpuid); +int lprocfs_stats_lock(struct lprocfs_stats *stats, + enum lprocfs_stats_lock_ops opc, + unsigned long *flags); +void lprocfs_stats_unlock(struct lprocfs_stats *stats, + enum lprocfs_stats_lock_ops opc, + unsigned long *flags); static inline unsigned int lprocfs_stats_counter_size(struct lprocfs_stats *stats) @@ -555,41 +470,16 @@ extern __s64 lprocfs_read_helper(struct lprocfs_counter *lc, struct lprocfs_counter_header *header, enum lprocfs_stats_flags flags, enum lprocfs_fields_flags field); -static inline __u64 lprocfs_stats_collector(struct lprocfs_stats *stats, - int idx, - enum lprocfs_fields_flags field) -{ - int i; - unsigned int num_cpu; - unsigned long flags = 0; - __u64 ret = 0; - - LASSERT(stats != NULL); - - num_cpu = lprocfs_stats_lock(stats, LPROCFS_GET_NUM_CPU, &flags); - for (i = 0; i < num_cpu; i++) { - if (stats->ls_percpu[i] == NULL) - continue; - ret += lprocfs_read_helper( - lprocfs_stats_counter_get(stats, i, idx), - &stats->ls_cnt_header[idx], stats->ls_flags, - field); - } - lprocfs_stats_unlock(stats, LPROCFS_GET_NUM_CPU, &flags); - return ret; -} +u64 lprocfs_stats_collector(struct lprocfs_stats *stats, int idx, + enum lprocfs_fields_flags field); extern struct lprocfs_stats * lprocfs_alloc_stats(unsigned int num, enum lprocfs_stats_flags flags); extern void lprocfs_clear_stats(struct lprocfs_stats *stats); extern void lprocfs_free_stats(struct lprocfs_stats **stats); -extern void lprocfs_init_ops_stats(int num_private_stats, - struct lprocfs_stats *stats); -extern void lprocfs_init_mps_stats(int num_private_stats, - struct lprocfs_stats *stats); extern void lprocfs_init_ldlm_stats(struct lprocfs_stats *ldlm_stats); extern int lprocfs_alloc_obd_stats(struct obd_device *obddev, - unsigned int num_private_stats); + unsigned int num_stats); extern int lprocfs_alloc_md_stats(struct obd_device *obddev, unsigned int num_private_stats); extern void lprocfs_counter_init(struct lprocfs_stats *stats, int index, @@ -600,75 +490,86 @@ extern void lprocfs_free_md_stats(struct obd_device *obddev); struct obd_export; struct nid_stat; extern int lprocfs_add_clear_entry(struct obd_device * obd, - cfs_proc_dir_entry_t *entry); + struct proc_dir_entry *entry); #ifdef HAVE_SERVER_SUPPORT -extern int lprocfs_exp_setup(struct obd_export *exp, - lnet_nid_t *peer_nid, int *newnid); -#endif +extern int lprocfs_exp_setup(struct obd_export *exp, lnet_nid_t *peer_nid); extern int lprocfs_exp_cleanup(struct obd_export *exp); -extern cfs_proc_dir_entry_t *lprocfs_add_simple(struct proc_dir_entry *root, - char *name, -#ifndef HAVE_ONLY_PROCFS_SEQ - read_proc_t *read_proc, - write_proc_t *write_proc, +struct dentry *ldebugfs_add_symlink(const char *name, const char *target, + const char *format, ...); +#else +static inline int lprocfs_exp_cleanup(struct obd_export *exp) +{ return 0; } #endif - void *data, - struct file_operations *fops); +struct dentry *ldebugfs_add_simple(struct dentry *root, char *name, void *data, + const struct file_operations *fops); +extern struct proc_dir_entry * +lprocfs_add_simple(struct proc_dir_entry *root, char *name, + void *data, const struct file_operations *fops); extern struct proc_dir_entry * lprocfs_add_symlink(const char *name, struct proc_dir_entry *parent, const char *format, ...); extern void lprocfs_free_per_client_stats(struct obd_device *obd); #ifdef HAVE_SERVER_SUPPORT -#ifndef HAVE_ONLY_PROCFS_SEQ -extern int -lprocfs_nid_stats_clear_write(struct file *file, const char *buffer, - unsigned long count, void *data); -extern int lprocfs_nid_stats_clear_read(char *page, char **start, off_t off, - int count, int *eof, void *data); -#endif extern ssize_t -lprocfs_nid_stats_clear_seq_write(struct file *file, const char *buffer, +lprocfs_nid_stats_clear_seq_write(struct file *file, const char __user *buffer, size_t count, loff_t *off); extern int lprocfs_nid_stats_clear_seq_show(struct seq_file *file, void *data); #endif -extern int lprocfs_register_stats(cfs_proc_dir_entry_t *root, const char *name, +extern int ldebugfs_register_stats(struct dentry *parent, const char *name, + struct lprocfs_stats *stats); +extern int lprocfs_register_stats(struct proc_dir_entry *root, const char *name, struct lprocfs_stats *stats); /* lprocfs_status.c */ -#ifndef HAVE_ONLY_PROCFS_SEQ -extern int lprocfs_add_vars(cfs_proc_dir_entry_t *root, - struct lprocfs_vars *var, - void *data); - -extern cfs_proc_dir_entry_t *lprocfs_register(const char *name, - cfs_proc_dir_entry_t *parent, - struct lprocfs_vars *list, - void *data); -#endif -extern int lprocfs_seq_add_vars(cfs_proc_dir_entry_t *root, - struct lprocfs_seq_vars *var, - void *data); - -extern cfs_proc_dir_entry_t * -lprocfs_seq_register(const char *name, cfs_proc_dir_entry_t *parent, - struct lprocfs_seq_vars *list, void *data); -extern void lprocfs_remove(cfs_proc_dir_entry_t **root); +extern int ldebugfs_add_vars(struct dentry *parent, struct lprocfs_vars *var, + void *data); +extern int lprocfs_add_vars(struct proc_dir_entry *root, + struct lprocfs_vars *var, void *data); + +extern struct dentry *ldebugfs_register(const char *name, + struct dentry *parent, + struct lprocfs_vars *list, + void *data); +extern struct proc_dir_entry * +lprocfs_register(const char *name, struct proc_dir_entry *parent, + struct lprocfs_vars *list, void *data); + +extern void ldebugfs_remove(struct dentry **entryp); +extern void lprocfs_remove(struct proc_dir_entry **root); extern void lprocfs_remove_proc_entry(const char *name, struct proc_dir_entry *parent); -#ifndef HAVE_ONLY_PROCFS_SEQ -extern void lprocfs_try_remove_proc_entry(const char *name, - struct proc_dir_entry *parent); +#ifndef HAVE_REMOVE_PROC_SUBTREE +extern int remove_proc_subtree(const char *name, + struct proc_dir_entry *parent); +#define PDE_DATA(inode) (PDE(inode)->data) -extern cfs_proc_dir_entry_t *lprocfs_srch(cfs_proc_dir_entry_t *root, - const char *name); -extern int lprocfs_obd_setup(struct obd_device *obd, struct lprocfs_vars *list); +static inline int LPROCFS_ENTRY_CHECK(struct inode *inode) +{ + struct proc_dir_entry *dp = PDE(inode); + int deleted = 0; + + spin_lock(&(dp)->pde_unload_lock); + if (dp->proc_fops == NULL) + deleted = 1; + spin_unlock(&(dp)->pde_unload_lock); + if (deleted) + return -ENODEV; + return 0; +} +#else +static inline int LPROCFS_ENTRY_CHECK(struct inode *inode) +{ return 0; } #endif -extern int lprocfs_seq_obd_setup(struct obd_device *dev); + +extern int lprocfs_obd_setup(struct obd_device *obd, bool uuid_only); extern int lprocfs_obd_cleanup(struct obd_device *obd); #ifdef HAVE_SERVER_SUPPORT -extern struct file_operations lprocfs_evict_client_fops; +extern const struct file_operations lprocfs_evict_client_fops; #endif -extern int lprocfs_seq_create(cfs_proc_dir_entry_t *parent, const char *name, + +int ldebugfs_seq_create(struct dentry *parent, const char *name, umode_t mode, + const struct file_operations *seq_fops, void *data); +extern int lprocfs_seq_create(struct proc_dir_entry *parent, const char *name, mode_t mode, const struct file_operations *seq_fops, void *data); @@ -678,134 +579,51 @@ extern int lprocfs_obd_seq_create(struct obd_device *dev, const char *name, void *data); /* Generic callbacks */ -#ifndef HAVE_ONLY_PROCFS_SEQ -extern int lprocfs_rd_u64(char *page, char **start, off_t off, - int count, int *eof, void *data); -extern int lprocfs_rd_atomic(char *page, char **start, off_t off, - int count, int *eof, void *data); -extern int lprocfs_wr_atomic(struct file *file, const char *buffer, - unsigned long count, void *data); -extern int lprocfs_rd_uint(char *page, char **start, off_t off, - int count, int *eof, void *data); -extern int lprocfs_rd_uuid(char *page, char **start, off_t off, - int count, int *eof, void *data); -extern int lprocfs_rd_name(char *page, char **start, off_t off, - int count, int *eof, void *data); -extern int lprocfs_rd_server_uuid(char *page, char **start, off_t off, - int count, int *eof, void *data); -extern int lprocfs_rd_conn_uuid(char *page, char **start, off_t off, - int count, int *eof, void *data); -extern int lprocfs_rd_import(char *page, char **start, off_t off, int count, - int *eof, void *data); -extern int lprocfs_rd_state(char *page, char **start, off_t off, int count, - int *eof, void *data); -extern int lprocfs_rd_connect_flags(char *page, char **start, off_t off, - int count, int *eof, void *data); -extern int lprocfs_rd_num_exports(char *page, char **start, off_t off, - int count, int *eof, void *data); -extern int lprocfs_rd_numrefs(char *page, char **start, off_t off, - int count, int *eof, void *data); -#endif -extern int lprocfs_u64_seq_show(struct seq_file *m, void *data); -extern int lprocfs_atomic_seq_show(struct seq_file *m, void *data); -extern ssize_t lprocfs_atomic_seq_write(struct file *file, const char *buffer, - size_t count, loff_t *off); -extern int lprocfs_uint_seq_show(struct seq_file *m, void *data); -extern ssize_t lprocfs_uint_seq_write(struct file *file, const char *buffer, - size_t count, loff_t *off); -extern int lprocfs_wr_uint(struct file *file, const char *buffer, - unsigned long count, void *data); extern int lprocfs_uuid_seq_show(struct seq_file *m, void *data); -extern int lprocfs_name_seq_show(struct seq_file *m, void *data); extern int lprocfs_server_uuid_seq_show(struct seq_file *m, void *data); -extern int lprocfs_conn_uuid_seq_show(struct seq_file *m, void *data); +ssize_t conn_uuid_show(struct kobject *kobj, struct attribute *attr, char *buf); extern int lprocfs_import_seq_show(struct seq_file *m, void *data); extern int lprocfs_state_seq_show(struct seq_file *m, void *data); extern int lprocfs_connect_flags_seq_show(struct seq_file *m, void *data); #ifdef HAVE_SERVER_SUPPORT -extern int lprocfs_num_exports_seq_show(struct seq_file *m, void *data); +ssize_t num_exports_show(struct kobject *kobj, struct attribute *attr, + char *buf); #endif struct adaptive_timeout; -#ifndef HAVE_ONLY_PROCFS_SEQ -extern int lprocfs_at_hist_helper(char *page, int count, int rc, - struct adaptive_timeout *at); -extern int lprocfs_rd_timeouts(char *page, char **start, off_t off, - int count, int *eof, void *data); -extern int lprocfs_wr_timeouts(struct file *file, const char *buffer, - unsigned long count, void *data); -#endif -extern int lprocfs_seq_at_hist_helper(struct seq_file *m, - struct adaptive_timeout *at); +extern int lprocfs_at_hist_helper(struct seq_file *m, + struct adaptive_timeout *at); extern int lprocfs_timeouts_seq_show(struct seq_file *m, void *data); extern ssize_t -lprocfs_timeouts_seq_write(struct file *file, const char *buffer, +lprocfs_timeouts_seq_write(struct file *file, const char __user *buffer, size_t count, loff_t *off); -#ifndef HAVE_ONLY_PROCFS_SEQ -#ifdef HAVE_SERVER_SUPPORT -extern int lprocfs_wr_evict_client(struct file *file, const char *buffer, - unsigned long count, void *data); -#endif -extern int lprocfs_wr_ping(struct file *file, const char *buffer, - unsigned long count, void *data); -extern int lprocfs_wr_import(struct file *file, const char *buffer, - unsigned long count, void *data); -extern int lprocfs_rd_pinger_recov(char *page, char **start, off_t off, - int count, int *eof, void *data); -extern int lprocfs_wr_pinger_recov(struct file *file, const char *buffer, - unsigned long count, void *data); -#endif #ifdef HAVE_SERVER_SUPPORT extern ssize_t -lprocfs_evict_client_seq_write(struct file *file, const char *buffer, +lprocfs_evict_client_seq_write(struct file *file, const char __user *buffer, size_t count, loff_t *off); #endif +ssize_t ping_store(struct kobject *kobj, struct attribute *attr, + const char *buffer, size_t count); +ssize_t ping_show(struct kobject *kobj, struct attribute *attr, + char *buffer); + extern ssize_t -lprocfs_ping_seq_write(struct file *file, const char *buffer, - size_t count, loff_t *off); -extern ssize_t -lprocfs_import_seq_write(struct file *file, const char *buffer, +lprocfs_import_seq_write(struct file *file, const char __user *buffer, size_t count, loff_t *off); extern int lprocfs_pinger_recov_seq_show(struct seq_file *m, void *data); extern ssize_t -lprocfs_pinger_recov_seq_write(struct file *file, const char *buffer, +lprocfs_pinger_recov_seq_write(struct file *file, const char __user *buffer, size_t count, loff_t *off); -/* Statfs helpers */ -#ifndef HAVE_ONLY_PROCFS_SEQ -extern int lprocfs_rd_blksize(char *page, char **start, off_t off, - int count, int *eof, void *data); -extern int lprocfs_rd_kbytestotal(char *page, char **start, off_t off, - int count, int *eof, void *data); -extern int lprocfs_rd_kbytesfree(char *page, char **start, off_t off, - int count, int *eof, void *data); -extern int lprocfs_rd_kbytesavail(char *page, char **start, off_t off, - int count, int *eof, void *data); -extern int lprocfs_rd_filestotal(char *page, char **start, off_t off, - int count, int *eof, void *data); -extern int lprocfs_rd_filesfree(char *page, char **start, off_t off, - int count, int *eof, void *data); -extern int lprocfs_rd_filegroups(char *page, char **start, off_t off, - int count, int *eof, void *data); -#endif -extern int lprocfs_blksize_seq_show(struct seq_file *m, void *data); -extern int lprocfs_kbytestotal_seq_show(struct seq_file *m, void *data); -extern int lprocfs_kbytesfree_seq_show(struct seq_file *m, void *data); -extern int lprocfs_kbytesavail_seq_show(struct seq_file *m, void *data); -extern int lprocfs_filestotal_seq_show(struct seq_file *m, void *data); -extern int lprocfs_filesfree_seq_show(struct seq_file *m, void *data); - -extern int lprocfs_write_helper(const char *buffer, unsigned long count, - int *val); -extern int lprocfs_write_frac_helper(const char *buffer, unsigned long count, - int *val, int mult); -extern int lprocfs_seq_read_frac_helper(struct seq_file *m, long val, int mult); -extern int lprocfs_read_frac_helper(char *buffer, unsigned long count, - long val, int mult); -extern int lprocfs_write_u64_helper(const char *buffer, unsigned long count, - __u64 *val); -extern int lprocfs_write_frac_u64_helper(const char *buffer, - unsigned long count, - __u64 *val, int mult); +int lu_str_to_s64(char *buffer, unsigned long count, __s64 *val, char defunit); +extern int lprocfs_str_with_units_to_s64(const char __user *buffer, + unsigned long count, __s64 *val, + char defunit); + +extern int lprocfs_str_with_units_to_u64(const char __user *buffer, + unsigned long count, __u64 *val, + char defunit); + +char *lprocfs_strnstr(const char *s1, const char *s2, size_t len); char *lprocfs_find_named_value(const char *buffer, const char *name, size_t *count); void lprocfs_oh_tally(struct obd_histogram *oh, unsigned int value); @@ -817,20 +635,6 @@ void lprocfs_stats_collect(struct lprocfs_stats *stats, int idx, struct lprocfs_counter *cnt); #ifdef HAVE_SERVER_SUPPORT -#ifndef HAVE_ONLY_PROCFS_SEQ -/* lprocfs_status.c: recovery status */ -int lprocfs_obd_rd_recovery_status(char *page, char **start, off_t off, - int count, int *eof, void *data); -/* lprocfs_statuc.c: hash statistics */ -int lprocfs_obd_rd_hash(char *page, char **start, off_t off, - int count, int *eof, void *data); - -/* lprocfs_status.c: IR factor */ -int lprocfs_obd_rd_ir_factor(char *page, char **start, off_t off, - int count, int *eof, void *data); -int lprocfs_obd_wr_ir_factor(struct file *file, const char *buffer, - unsigned long count, void *data); -#endif /* lprocfs_status.c: recovery status */ int lprocfs_recovery_status_seq_show(struct seq_file *m, void *data); @@ -838,13 +642,20 @@ int lprocfs_recovery_status_seq_show(struct seq_file *m, void *data); int lprocfs_hash_seq_show(struct seq_file *m, void *data); /* lprocfs_status.c: IR factor */ -int lprocfs_ir_factor_seq_show(struct seq_file *m, void *data); +ssize_t ir_factor_show(struct kobject *kobj, struct attribute *attr, + char *buf); +ssize_t ir_factor_store(struct kobject *kobj, struct attribute *attr, + const char *buffer, size_t count); +#endif + +/* lprocfs_status.c: dump pages on cksum error */ +int lprocfs_checksum_dump_seq_show(struct seq_file *m, void *data); ssize_t -lprocfs_ir_factor_seq_write(struct file *file, const char *buffer, +lprocfs_checksum_dump_seq_write(struct file *file, const char __user *buffer, size_t count, loff_t *off); -#endif -extern int lprocfs_single_release(cfs_inode_t *, struct file *); -extern int lprocfs_seq_release(cfs_inode_t *, struct file *); + +extern int lprocfs_single_release(struct inode *, struct file *); +extern int lprocfs_seq_release(struct inode *, struct file *); /* You must use these macros when you want to refer to * the import in a client obd_device for a lprocfs entry */ @@ -859,17 +670,96 @@ extern int lprocfs_seq_release(cfs_inode_t *, struct file *); #define LPROCFS_CLIMP_EXIT(obd) \ up_read(&(obd)->u.cli.cl_sem); +/* write the name##_seq_show function, call LDEBUGFS_SEQ_FOPS_RO for read-only + * debugfs entries; otherwise, you will define name##_seq_write function also + * for a read-write debugfs entry, and then call LDEBUGFS_SEQ_FOPS instead. + * Finally, call ldebugfs_seq_create(obd, filename, 0444, &name#_fops, data); + */ +#define __LDEBUGFS_SEQ_FOPS(name, custom_seq_write) \ +static int name##_single_open(struct inode *inode, struct file *file) \ +{ \ + return single_open(file, name##_seq_show, inode->i_private); \ +} \ +static const struct file_operations name##_fops = { \ + .owner = THIS_MODULE, \ + .open = name##_single_open, \ + .read = seq_read, \ + .write = custom_seq_write, \ + .llseek = seq_lseek, \ + .release = single_release, \ +} + +#define LDEBUGFS_SEQ_FOPS_RO(name) __LDEBUGFS_SEQ_FOPS(name, NULL) +#define LDEBUGFS_SEQ_FOPS(name) __LDEBUGFS_SEQ_FOPS(name, \ + name##_seq_write) + +#define LDEBUGFS_SEQ_FOPS_RO_TYPE(name, type) \ + static int name##_##type##_seq_show(struct seq_file *m, void *v)\ + { \ + if (!m->private) \ + return -ENODEV; \ + return lprocfs_##type##_seq_show(m, m->private); \ + } \ + LDEBUGFS_SEQ_FOPS_RO(name##_##type) + +#define LDEBUGFS_SEQ_FOPS_RW_TYPE(name, type) \ + static int name##_##type##_seq_show(struct seq_file *m, void *v)\ + { \ + if (!m->private) \ + return -ENODEV; \ + return lprocfs_##type##_seq_show(m, m->private); \ + } \ + static ssize_t name##_##type##_seq_write(struct file *file, \ + const char __user *buffer, size_t count, \ + loff_t *off) \ + { \ + struct seq_file *seq = file->private_data; \ + \ + if (!seq->private) \ + return -ENODEV; \ + return ldebugfs_##type##_seq_write(file, buffer, count, \ + seq->private); \ + } \ + LDEBUGFS_SEQ_FOPS(name##_##type); + +#define LDEBUGFS_FOPS_WR_ONLY(name, type) \ + static ssize_t name##_##type##_write(struct file *file, \ + const char __user *buffer, size_t count, \ + loff_t *off) \ + { \ + return ldebugfs_##type##_seq_write(file, buffer, count, \ + off); \ + } \ + static int name##_##type##_open(struct inode *inode, \ + struct file *file) \ + { \ + return single_open(file, NULL, inode->i_private); \ + } \ + static const struct file_operations name##_##type##_fops = { \ + .open = name##_##type##_open, \ + .write = name##_##type##_write, \ + .release = single_release, \ + }; + /* write the name##_seq_show function, call LPROC_SEQ_FOPS_RO for read-only - proc entries; otherwise, you will define name##_seq_write function also for - a read-write proc entry, and then call LPROC_SEQ_SEQ instead. Finally, - call lprocfs_obd_seq_create(obd, filename, 0444, &name#_fops, data); */ + * proc entries; otherwise, you will define name##_seq_write function also for + * a read-write proc entry, and then call LPROC_SEQ_FOPS instead. Finally, + * call ldebugfs_obd_seq_create(obd, filename, 0444, &name#_fops, data); + */ #define __LPROC_SEQ_FOPS(name, custom_seq_write) \ -static int name##_single_open(cfs_inode_t *inode, struct file *file) \ +static int name##_single_open(struct inode *inode, struct file *file) \ { \ - LPROCFS_ENTRY_CHECK(PDE(inode)); \ - return single_open(file, name##_seq_show, PDE_DATA(inode)); \ + int rc; \ + \ + rc = LPROCFS_ENTRY_CHECK(inode); \ + if (rc < 0) \ + return rc; \ + \ + return single_open(file, name##_seq_show, \ + inode->i_private ? inode->i_private : \ + PDE_DATA(inode)); \ } \ -struct file_operations name##_fops = { \ +static const struct file_operations name##_fops = { \ .owner = THIS_MODULE, \ .open = name##_single_open, \ .read = seq_read, \ @@ -894,30 +784,56 @@ struct file_operations name##_fops = { \ return lprocfs_##type##_seq_show(m, m->private); \ } \ static ssize_t name##_##type##_seq_write(struct file *file, \ - const char *buffer, size_t count, loff_t *off) \ + const char __user *buffer, size_t count, \ + loff_t *off) \ { \ struct seq_file *seq = file->private_data; \ return lprocfs_##type##_seq_write(file, buffer, \ - count, seq->private); \ + count, seq->private); \ } \ LPROC_SEQ_FOPS(name##_##type); -#define LPROC_SEQ_FOPS_WO_TYPE(name, type) \ +#define LPROC_SEQ_FOPS_WR_ONLY(name, type) \ static ssize_t name##_##type##_write(struct file *file, \ - const char *buffer, size_t count, loff_t *off) \ + const char __user *buffer, size_t count, \ + loff_t *off) \ { \ - return lprocfs_##type##_seq_write(file, buffer, count, off); \ + return lprocfs_##type##_seq_write(file, buffer, count, off);\ } \ - static int name##_##type##_open(cfs_inode_t *inode, struct file *file) \ + static int name##_##type##_open(struct inode *inode, struct file *file)\ { \ - return single_open(file, NULL, PDE_DATA(inode)); \ + return single_open(file, NULL, \ + inode->i_private ? inode->i_private : \ + PDE_DATA(inode)); \ } \ - struct file_operations name##_##type##_fops = { \ + static const struct file_operations name##_##type##_fops = { \ .open = name##_##type##_open, \ .write = name##_##type##_write, \ .release = lprocfs_single_release, \ }; +struct lustre_attr { + struct attribute attr; + ssize_t (*show)(struct kobject *kobj, struct attribute *attr, + char *buf); + ssize_t (*store)(struct kobject *kobj, struct attribute *attr, + const char *buf, size_t len); +}; + +#define LUSTRE_ATTR(name, mode, show, store) \ +static struct lustre_attr lustre_attr_##name = __ATTR(name, mode, show, store) + +#define LUSTRE_WO_ATTR(name) LUSTRE_ATTR(name, 0200, NULL, name##_store) +#define LUSTRE_RO_ATTR(name) LUSTRE_ATTR(name, 0444, name##_show, NULL) +#define LUSTRE_RW_ATTR(name) LUSTRE_ATTR(name, 0644, name##_show, name##_store) + +ssize_t lustre_attr_show(struct kobject *kobj, struct attribute *attr, + char *buf); +ssize_t lustre_attr_store(struct kobject *kobj, struct attribute *attr, + const char *buf, size_t len); + +extern const struct sysfs_ops lustre_sysfs_ops; + /* lproc_ptlrpc.c */ struct ptlrpc_request; extern void target_print_req(void *seq_file, struct ptlrpc_request *req); @@ -929,113 +845,46 @@ int lprocfs_job_stats_log(struct obd_device *obd, char *jobid, void lprocfs_job_stats_fini(struct obd_device *obd); int lprocfs_job_stats_init(struct obd_device *obd, int cntr_num, cntr_init_callback fn); -#ifndef HAVE_ONLY_PROCFS_SEQ -int lprocfs_rd_job_interval(char *page, char **start, off_t off, - int count, int *eof, void *data); -int lprocfs_wr_job_interval(struct file *file, const char *buffer, - unsigned long count, void *data); - -/* lproc_status.c */ -int lprocfs_obd_rd_recovery_time_soft(char *page, char **start, off_t off, - int count, int *eof, void *data); -int lprocfs_obd_wr_recovery_time_soft(struct file *file, - const char *buffer, - unsigned long count, void *data); -int lprocfs_obd_rd_recovery_time_hard(char *page, char **start, off_t off, - int count, int *eof, void *data); -int lprocfs_obd_wr_recovery_time_hard(struct file *file, - const char *buffer, - unsigned long count, void *data); -int lprocfs_target_rd_instance(char *page, char **start, off_t off, - int count, int *eof, void *data); +ssize_t job_cleanup_interval_show(struct kobject *kobj, struct attribute *attr, + char *buf); +ssize_t job_cleanup_interval_store(struct kobject *kobj, + struct attribute *attr, + const char *buffer, size_t count); +/* lproc_status_server.c */ +ssize_t recovery_time_soft_show(struct kobject *kobj, struct attribute *attr, + char *buf); +ssize_t recovery_time_soft_store(struct kobject *kobj, + struct attribute *attr, + const char *buffer, size_t count); +ssize_t recovery_time_hard_show(struct kobject *kobj, struct attribute *attr, + char *buf); +ssize_t recovery_time_hard_store(struct kobject *kobj, + struct attribute *attr, + const char *buffer, size_t count); +ssize_t instance_show(struct kobject *kobj, struct attribute *attr, + char *buf); #endif -int lprocfs_job_interval_seq_show(struct seq_file *m, void *data); -ssize_t -lprocfs_job_interval_seq_write(struct file *file, const char *buffer, - size_t count, loff_t *off); /* lproc_status.c */ -int lprocfs_recovery_time_soft_seq_show(struct seq_file *m, void *data); -ssize_t lprocfs_recovery_time_soft_seq_write(struct file *file, - const char *buffer, - size_t count, loff_t *off); -int lprocfs_recovery_time_hard_seq_show(struct seq_file *m, void *data); -ssize_t -lprocfs_recovery_time_hard_seq_write(struct file *file, const char *buffer, - size_t count, loff_t *off); -int lprocfs_target_instance_seq_show(struct seq_file *m, void *data); -#endif -#ifndef HAVE_ONLY_PROCFS_SEQ -int lprocfs_obd_rd_max_pages_per_rpc(char *page, char **start, off_t off, - int count, int *eof, void *data); -int lprocfs_obd_wr_max_pages_per_rpc(struct file *file, const char *buffer, - unsigned long count, void *data); -#endif int lprocfs_obd_max_pages_per_rpc_seq_show(struct seq_file *m, void *data); -ssize_t -lprocfs_obd_max_pages_per_rpc_seq_write(struct file *file, const char *buffer, - size_t count, loff_t *off); - -/* all quota proc functions */ -extern int lprocfs_quota_rd_bunit(char *page, char **start, - off_t off, int count, - int *eof, void *data); -extern int lprocfs_quota_wr_bunit(struct file *file, const char *buffer, - unsigned long count, void *data); -extern int lprocfs_quota_rd_btune(char *page, char **start, - off_t off, int count, - int *eof, void *data); -extern int lprocfs_quota_wr_btune(struct file *file, const char *buffer, - unsigned long count, void *data); -extern int lprocfs_quota_rd_iunit(char *page, char **start, - off_t off, int count, - int *eof, void *data); -extern int lprocfs_quota_wr_iunit(struct file *file, const char *buffer, - unsigned long count, void *data); -extern int lprocfs_quota_rd_itune(char *page, char **start, - off_t off, int count, - int *eof, void *data); -extern int lprocfs_quota_wr_itune(struct file *file, const char *buffer, - unsigned long count, void *data); -extern int lprocfs_quota_rd_type(char *page, char **start, off_t off, int count, - int *eof, void *data); -extern int lprocfs_quota_wr_type(struct file *file, const char *buffer, - unsigned long count, void *data); -extern int lprocfs_quota_rd_switch_seconds(char *page, char **start, off_t off, - int count, int *eof, void *data); -extern int lprocfs_quota_wr_switch_seconds(struct file *file, - const char *buffer, - unsigned long count, void *data); -extern int lprocfs_quota_rd_sync_blk(char *page, char **start, off_t off, - int count, int *eof, void *data); -extern int lprocfs_quota_wr_sync_blk(struct file *file, const char *buffer, - unsigned long count, void *data); -extern int lprocfs_quota_rd_switch_qs(char *page, char **start, off_t off, - int count, int *eof, void *data); -extern int lprocfs_quota_wr_switch_qs(struct file *file, - const char *buffer, - unsigned long count, void *data); -extern int lprocfs_quota_rd_boundary_factor(char *page, char **start, off_t off, - int count, int *eof, void *data); -extern int lprocfs_quota_wr_boundary_factor(struct file *file, - const char *buffer, - unsigned long count, void *data); -extern int lprocfs_quota_rd_least_bunit(char *page, char **start, off_t off, - int count, int *eof, void *data); -extern int lprocfs_quota_wr_least_bunit(struct file *file, - const char *buffer, - unsigned long count, void *data); -extern int lprocfs_quota_rd_least_iunit(char *page, char **start, off_t off, - int count, int *eof, void *data); -extern int lprocfs_quota_wr_least_iunit(struct file *file, - const char *buffer, - unsigned long count, void *data); -extern int lprocfs_quota_rd_qs_factor(char *page, char **start, off_t off, - int count, int *eof, void *data); -extern int lprocfs_quota_wr_qs_factor(struct file *file, - const char *buffer, - unsigned long count, void *data); -#else -/* LPROCFS is not defined */ +ssize_t lprocfs_obd_max_pages_per_rpc_seq_write(struct file *file, + const char __user *buffer, + size_t count, loff_t *off); +int lprocfs_obd_short_io_bytes_seq_show(struct seq_file *m, void *data); +ssize_t lprocfs_obd_short_io_bytes_seq_write(struct file *file, + const char __user *buffer, + size_t count, loff_t *off); +ssize_t short_io_bytes_show(struct kobject *kobj, struct attribute *attr, + char *buf); +ssize_t short_io_bytes_store(struct kobject *kobj, struct attribute *attr, + const char *buffer, size_t count); + +struct root_squash_info; +int lprocfs_wr_root_squash(const char __user *buffer, unsigned long count, + struct root_squash_info *squash, char *name); +int lprocfs_wr_nosquash_nids(const char __user *buffer, unsigned long count, + struct root_squash_info *squash, char *name); + +#else /* !CONFIG_PROC_FS */ #define proc_lustre_root NULL @@ -1068,20 +917,14 @@ static inline void lprocfs_clear_stats(struct lprocfs_stats *stats) { return; } static inline void lprocfs_free_stats(struct lprocfs_stats **stats) { return; } -static inline int lprocfs_register_stats(cfs_proc_dir_entry_t *root, +static inline int lprocfs_register_stats(struct proc_dir_entry *root, const char *name, struct lprocfs_stats *stats) { return 0; } -static inline void lprocfs_init_ops_stats(int num_private_stats, - struct lprocfs_stats *stats) -{ return; } -static inline void lprocfs_init_mps_stats(int num_private_stats, - struct lprocfs_stats *stats) -{ return; } static inline void lprocfs_init_ldlm_stats(struct lprocfs_stats *ldlm_stats) { return; } static inline int lprocfs_alloc_obd_stats(struct obd_device *obddev, - unsigned int num_private_stats) + unsigned int num_stats) { return 0; } static inline int lprocfs_alloc_md_stats(struct obd_device *obddev, unsigned int num_private_stats) @@ -1097,148 +940,47 @@ static inline int lprocfs_add_clear_entry(struct obd_export *exp) static inline void lprocfs_free_per_client_stats(struct obd_device *obd) { return; } #ifdef HAVE_SERVER_SUPPORT -#ifndef HAVE_ONLY_PROCFS_SEQ -static inline -int lprocfs_nid_stats_clear_write(struct file *file, const char *buffer, - unsigned long count, void *data) -{return count;} static inline -int lprocfs_nid_stats_clear_read(char *page, char **start, off_t off, - int count, int *eof, void *data) -{return count;} -#endif -static inline -ssize_t lprocfs_nid_stats_seq_write(struct file *file, const char *buffer, - size_t count, loff_t *off) +ssize_t lprocfs_nid_stats_seq_write(struct file *file, + const char __user *buffer, + size_t count, loff_t *off) {return 0;} static inline int lprocfs_nid_stats_clear_seq_show(struct seq_file *m, void *data) {return 0;} -static inline int lprocfs_exp_setup(struct obd_export *exp,lnet_nid_t *peer_nid, - int *newnid) +static inline int lprocfs_exp_setup(struct obd_export *exp,lnet_nid_t *peer_nid) { return 0; } #endif static inline int lprocfs_exp_cleanup(struct obd_export *exp) { return 0; } -static inline cfs_proc_dir_entry_t * +static inline struct proc_dir_entry * lprocfs_add_simple(struct proc_dir_entry *root, char *name, -#ifndef HAVE_ONLY_PROCFS_SEQ - read_proc_t *read_proc, write_proc_t *write_proc, -#endif - void *data, struct file_operations *fops) + void *data, const struct file_operations *fops) {return 0; } static inline struct proc_dir_entry * lprocfs_add_symlink(const char *name, struct proc_dir_entry *parent, const char *format, ...) {return NULL; } -#ifndef HAVE_ONLY_PROCFS_SEQ -static inline cfs_proc_dir_entry_t * -lprocfs_register(const char *name, cfs_proc_dir_entry_t *parent, - struct lprocfs_vars *list, void *data) -{ return NULL; } -static inline int lprocfs_add_vars(cfs_proc_dir_entry_t *root, - struct lprocfs_vars *var, - void *data) +static inline int lprocfs_add_vars(struct proc_dir_entry *root, + struct lprocfs_vars *var, void *data) { return 0; } -#endif -static inline int lprocfs_seq_add_vars(cfs_proc_dir_entry_t *root, - struct lprocfs_seq_vars *var, - void *data) -{ return 0; } -#ifndef HAVE_ONLY_PROCFS_SEQ -static inline cfs_proc_dir_entry_t * -lprocfs_seq_register(const char *name, cfs_proc_dir_entry_t *parent, - struct lprocfs_vars *list, void *data) +static inline struct proc_dir_entry * +lprocfs_register(const char *name, struct proc_dir_entry *parent, + struct lprocfs_vars *list, void *data) { return NULL; } -#endif -static inline void lprocfs_remove(cfs_proc_dir_entry_t **root) +static inline void lprocfs_remove(struct proc_dir_entry **root) { return; } static inline void lprocfs_remove_proc_entry(const char *name, struct proc_dir_entry *parent) { return; } -#ifndef HAVE_ONLY_PROCFS_SEQ -static inline void lprocfs_try_remove_proc_entry(const char *name, - struct proc_dir_entry *parent) -{ return; } -static inline cfs_proc_dir_entry_t *lprocfs_srch(cfs_proc_dir_entry_t *head, - const char *name) -{ return 0; } -static inline int lprocfs_obd_setup(struct obd_device *dev, - struct lprocfs_vars *list) -{ return 0; } -#endif -static inline int lprocfs_seq_obd_setup(struct obd_device *dev) +static inline int lprocfs_obd_setup(struct obd_device *dev, bool uuid_only) { return 0; } static inline int lprocfs_obd_cleanup(struct obd_device *dev) { return 0; } -static inline int lprocfs_rd_u64(char *page, char **start, off_t off, - int count, int *eof, void *data) -{ return 0; } -#ifndef HAVE_ONLY_PROCFS_SEQ -static inline int lprocfs_rd_uuid(char *page, char **start, off_t off, - int count, int *eof, void *data) -{ return 0; } -static inline int lprocfs_rd_name(char *page, char **start, off_t off, - int count, int *eof, void *data) -{ return 0; } -static inline int lprocfs_rd_server_uuid(char *page, char **start, off_t off, - int count, int *eof, void *data) -{ return 0; } -static inline int lprocfs_rd_conn_uuid(char *page, char **start, off_t off, - int count, int *eof, void *data) -{ return 0; } -static inline int lprocfs_rd_import(char *page, char **start, off_t off, - int count, int *eof, void *data) -{ return 0; } -static inline int lprocfs_rd_pinger_recov(char *page, char **start, off_t off, - int count, int *eof, void *data) -{ return 0; } -static inline int lprocfs_rd_state(char *page, char **start, off_t off, - int count, int *eof, void *data) -{ return 0; } -static inline int lprocfs_rd_connect_flags(char *page, char **start, off_t off, - int count, int *eof, void *data) -{ return 0; } -static inline int lprocfs_rd_num_exports(char *page, char **start, off_t off, - int count, int *eof, void *data) -{ return 0; } -static inline int lprocfs_rd_numrefs(struct seq_file *m, void *data) -{ return 0; } -struct adaptive_timeout; -static inline int lprocfs_at_hist_helper(char *page, int count, int rc, - struct adaptive_timeout *at) -{ return 0; } -static inline int lprocfs_rd_timeouts(char *page, char **start, off_t off, - int count, int *eof, void *data) -{ return 0; } -static inline int lprocfs_wr_timeouts(struct file *file, - const char *buffer, - unsigned long count, void *data) -{ return 0; } -#ifdef HAVE_SERVER_SUPPORT -static inline int lprocfs_wr_evict_client(struct file *file, - const char *buffer, - unsigned long count, void *data) -{ return 0; } -#endif -static inline int lprocfs_wr_ping(struct file *file, const char *buffer, - unsigned long count, void *data) -{ return 0; } -static inline int lprocfs_wr_import(struct file *file, const char *buffer, - unsigned long count, void *data) -{ return 0; } -static inline int lprocfs_wr_pinger_recov(struct file *file, const char *buffer, - unsigned long count, void *data) -{ return 0; } -#endif static inline int lprocfs_uuid_seq_show(struct seq_file *m, void *data) { return 0; } -static inline int lprocfs_name_seq_show(struct seq_file *m, void *data) -{ return 0; } static inline int lprocfs_server_seq_show(struct seq_file *m, void *data) { return 0; } -static inline int lprocfs_conn_uuid_seq_show(struct seq_file *m, void *data) -{ return 0; } static inline int lprocfs_import_seq_show(struct seq_file *m, void *data) { return 0; } static inline int lprocfs_state_seq_show(struct seq_file *m, void *data) @@ -1250,64 +992,38 @@ static inline int lprocfs_num_exports_seq_show(struct seq_file *m, void *data) { return 0; } #endif struct adaptive_timeout; -static inline int lprocfs_seq_at_hist_helper(struct seq_file *m, - struct adaptive_timeout *at) +static inline int lprocfs_at_hist_helper(struct seq_file *m, + struct adaptive_timeout *at) { return 0; } static inline int lprocfs_timeouts_seq_show(struct seq_file *m, void *data) { return 0; } static inline ssize_t -lprocfs_timeouts_seq_write(struct file *file, const char *buffer, +lprocfs_timeouts_seq_write(struct file *file, const char __user *buffer, size_t count, loff_t *off) { return 0; } #ifdef HAVE_SERVER_SUPPORT static inline ssize_t -lprocfs_evict_client_seq_write(struct file *file, const char *buffer, +lprocfs_evict_client_seq_write(struct file *file, const char __user *buffer, size_t count, loff_t *off) { return 0; } #endif static inline ssize_t -lprocfs_ping_seq_write(struct file *file, const char *buffer, +lprocfs_ping_seq_write(struct file *file, const char __user *buffer, size_t count, loff_t *off) { return 0; } static inline ssize_t -lprocfs_import_seq_write(struct file *file, const char *buffer, +lprocfs_import_seq_write(struct file *file, const char __user *buffer, size_t count, loff_t *off) { return 0; } static inline int lprocfs_pinger_recov_seq_show(struct seq_file *m, void *data) { return 0; } static inline ssize_t -lprocfs_pinger_recov_seq_write(struct file *file, const char *buffer, +lprocfs_pinger_recov_seq_write(struct file *file, const char __user *buffer, size_t count, loff_t *off) { return 0; } /* Statfs helpers */ -#ifndef HAVE_ONLY_PROCFS_SEQ -static inline -int lprocfs_rd_blksize(char *page, char **start, off_t off, - int count, int *eof, void *data) -{ return 0; } -static inline -int lprocfs_rd_kbytestotal(char *page, char **start, off_t off, - int count, int *eof, void *data) -{ return 0; } -static inline -int lprocfs_rd_kbytesfree(char *page, char **start, off_t off, - int count, int *eof, void *data) -{ return 0; } -static inline -int lprocfs_rd_kbytesavail(char *page, char **start, off_t off, - int count, int *eof, void *data) -{ return 0; } -static inline -int lprocfs_rd_filestotal(char *page, char **start, off_t off, - int count, int *eof, void *data) -{ return 0; } -static inline -int lprocfs_rd_filesfree(char *page, char **start, off_t off, - int count, int *eof, void *data) -{ return 0; } -#endif static inline int lprocfs_blksize_seq_show(struct seq_file *m, void *data) { return 0; } @@ -1343,15 +1059,15 @@ void lprocfs_stats_collect(struct lprocfs_stats *stats, int idx, struct lprocfs_counter *cnt) { return; } static inline -__u64 lprocfs_stats_collector(struct lprocfs_stats *stats, int idx, - enum lprocfs_fields_flags field) +u64 lprocfs_stats_collector(struct lprocfs_stats *stats, int idx, + enum lprocfs_fields_flags field) { return (__u64)0; } #define LPROC_SEQ_FOPS_RO(name) #define LPROC_SEQ_FOPS(name) #define LPROC_SEQ_FOPS_RO_TYPE(name, type) #define LPROC_SEQ_FOPS_RW_TYPE(name, type) -#define LPROC_SEQ_FOPS_WO_TYPE(name, type) +#define LPROC_SEQ_FOPS_WR_ONLY(name, type) /* lprocfs_jobstats.c */ static inline @@ -1370,6 +1086,6 @@ int lprocfs_job_stats_init(struct obd_device *obd, int cntr_num, /* lproc_ptlrpc.c */ #define target_print_req NULL -#endif /* LPROCFS */ +#endif /* CONFIG_PROC_FS */ -#endif /* LPROCFS_SNMP_H */ +#endif /* LPROCFS_STATUS_H */