X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Finclude%2Flprocfs_status.h;h=c7b077cd5ecef59f2332ae21ead89824f8904be1;hb=06a67987e06f7fa9c0bfde549d54e2bed0a78ade;hp=ea1abe24037ddf60b2108c1cce975709fa835e54;hpb=3d7756a454b7d643dc27fbb88086769be8100ef2;p=fs%2Flustre-release.git diff --git a/lustre/include/lprocfs_status.h b/lustre/include/lprocfs_status.h index ea1abe2..c7b077c 100644 --- a/lustre/include/lprocfs_status.h +++ b/lustre/include/lprocfs_status.h @@ -26,7 +26,7 @@ * GPL HEADER END */ /* - * Copyright 2008 Sun Microsystems, Inc. All rights reserved + * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. */ /* @@ -42,7 +42,6 @@ #ifndef _LPROCFS_SNMP_H #define _LPROCFS_SNMP_H -#include #if defined(__linux__) #include #elif defined(__APPLE__) @@ -52,6 +51,7 @@ #else #error Unsupported operating system. #endif +#include #undef LPROCFS #if (defined(__KERNEL__) && defined(CONFIG_PROC_FS)) @@ -78,7 +78,7 @@ struct lprocfs_static_vars { /* if we find more consumers this could be generalized */ #define OBD_HIST_MAX 32 struct obd_histogram { - spinlock_t oh_lock; + cfs_spinlock_t oh_lock; unsigned long oh_buckets[OBD_HIST_MAX]; }; @@ -139,8 +139,8 @@ enum { }; struct lprocfs_atomic { - atomic_t la_entry; - atomic_t la_exit; + cfs_atomic_t la_entry; + cfs_atomic_t la_exit; }; #define LC_MIN_INIT ((~(__u64)0) >> 1) @@ -150,6 +150,7 @@ struct lprocfs_counter { unsigned int lc_config; __s64 lc_count; __s64 lc_sum; + __s64 lc_sum_irq; __s64 lc_min; __s64 lc_max; __s64 lc_sumsquare; @@ -185,11 +186,14 @@ enum lprocfs_fields_flags { struct lprocfs_stats { unsigned int ls_num; /* # of counters */ int ls_flags; /* See LPROCFS_STATS_FLAG_* */ - spinlock_t ls_lock; /* Lock used only when there are + cfs_spinlock_t ls_lock; /* Lock used only when there are * no percpu stats areas */ struct lprocfs_percpu *ls_percpu[0]; }; +#define OPC_RANGE(seg) (seg ## _LAST_OPC - seg ## _FIRST_OPC) + +/* Pack all opcodes down into a single monotonically increasing index */ static inline int opcode_offset(__u32 opc) { if (opc < OST_LAST_OPC) { /* OST opcode */ @@ -197,75 +201,75 @@ static inline int opcode_offset(__u32 opc) { } else if (opc < MDS_LAST_OPC) { /* MDS opcode */ return (opc - MDS_FIRST_OPC + - (OST_LAST_OPC - OST_FIRST_OPC)); + OPC_RANGE(OST)); } else if (opc < LDLM_LAST_OPC) { /* LDLM Opcode */ return (opc - LDLM_FIRST_OPC + - (MDS_LAST_OPC - MDS_FIRST_OPC) + - (OST_LAST_OPC - OST_FIRST_OPC)); + OPC_RANGE(MDS) + + OPC_RANGE(OST)); } else if (opc < MGS_LAST_OPC) { /* MGS Opcode */ return (opc - MGS_FIRST_OPC + - (LDLM_LAST_OPC - LDLM_FIRST_OPC) + - (MDS_LAST_OPC - MDS_FIRST_OPC) + - (OST_LAST_OPC - OST_FIRST_OPC)); + OPC_RANGE(LDLM) + + OPC_RANGE(MDS) + + OPC_RANGE(OST)); } else if (opc < OBD_LAST_OPC) { /* OBD Ping */ return (opc - OBD_FIRST_OPC + - (MGS_LAST_OPC - MGS_FIRST_OPC) + - (LDLM_LAST_OPC - LDLM_FIRST_OPC) + - (MDS_LAST_OPC - MDS_FIRST_OPC) + - (OST_LAST_OPC - OST_FIRST_OPC)); + OPC_RANGE(MGS) + + OPC_RANGE(LDLM) + + OPC_RANGE(MDS) + + OPC_RANGE(OST)); } else if (opc < LLOG_LAST_OPC) { /* LLOG Opcode */ return (opc - LLOG_FIRST_OPC + - (OBD_LAST_OPC - OBD_FIRST_OPC) + - (MGS_LAST_OPC - MGS_FIRST_OPC) + - (LDLM_LAST_OPC - LDLM_FIRST_OPC) + - (MDS_LAST_OPC - MDS_FIRST_OPC) + - (OST_LAST_OPC - OST_FIRST_OPC)); + OPC_RANGE(OBD) + + OPC_RANGE(MGS) + + OPC_RANGE(LDLM) + + OPC_RANGE(MDS) + + OPC_RANGE(OST)); } else if (opc < QUOTA_LAST_OPC) { /* LQUOTA Opcode */ return (opc - QUOTA_FIRST_OPC + - (LLOG_LAST_OPC - LLOG_FIRST_OPC) + - (OBD_LAST_OPC - OBD_FIRST_OPC) + - (MGS_LAST_OPC - MGS_FIRST_OPC) + - (LDLM_LAST_OPC - LDLM_FIRST_OPC) + - (MDS_LAST_OPC - MDS_FIRST_OPC) + - (OST_LAST_OPC - OST_FIRST_OPC)); + OPC_RANGE(LLOG) + + OPC_RANGE(OBD) + + OPC_RANGE(MGS) + + OPC_RANGE(LDLM) + + OPC_RANGE(MDS) + + OPC_RANGE(OST)); } else if (opc < SEQ_LAST_OPC) { /* SEQ opcode */ return (opc - SEQ_FIRST_OPC + - (QUOTA_LAST_OPC- QUOTA_FIRST_OPC) + - (LLOG_LAST_OPC - LLOG_FIRST_OPC) + - (OBD_LAST_OPC - OBD_FIRST_OPC) + - (MGS_LAST_OPC - MGS_FIRST_OPC) + - (LDLM_LAST_OPC - LDLM_FIRST_OPC) + - (MDS_LAST_OPC - MDS_FIRST_OPC) + - (OST_LAST_OPC - OST_FIRST_OPC)); + OPC_RANGE(QUOTA) + + OPC_RANGE(LLOG) + + OPC_RANGE(OBD) + + OPC_RANGE(MGS) + + OPC_RANGE(LDLM) + + OPC_RANGE(MDS) + + OPC_RANGE(OST)); } else if (opc < SEC_LAST_OPC) { /* SEC opcode */ return (opc - SEC_FIRST_OPC + - (SEQ_LAST_OPC - SEQ_FIRST_OPC) + - (QUOTA_LAST_OPC- QUOTA_FIRST_OPC) + - (LLOG_LAST_OPC - LLOG_FIRST_OPC) + - (OBD_LAST_OPC - OBD_FIRST_OPC) + - (MGS_LAST_OPC - MGS_FIRST_OPC) + - (LDLM_LAST_OPC - LDLM_FIRST_OPC) + - (MDS_LAST_OPC - MDS_FIRST_OPC) + - (OST_LAST_OPC - OST_FIRST_OPC)); + OPC_RANGE(SEQ) + + OPC_RANGE(QUOTA) + + OPC_RANGE(LLOG) + + OPC_RANGE(OBD) + + OPC_RANGE(MGS) + + OPC_RANGE(LDLM) + + OPC_RANGE(MDS) + + OPC_RANGE(OST)); } else if (opc < FLD_LAST_OPC) { /* FLD opcode */ return (opc - FLD_FIRST_OPC + - (SEC_LAST_OPC - SEC_FIRST_OPC) + - (SEQ_LAST_OPC - SEQ_FIRST_OPC) + - (QUOTA_LAST_OPC- QUOTA_FIRST_OPC) + - (LLOG_LAST_OPC - LLOG_FIRST_OPC) + - (OBD_LAST_OPC - OBD_FIRST_OPC) + - (MGS_LAST_OPC - MGS_FIRST_OPC) + - (LDLM_LAST_OPC - LDLM_FIRST_OPC) + - (MDS_LAST_OPC - MDS_FIRST_OPC) + - (OST_LAST_OPC - OST_FIRST_OPC)); + OPC_RANGE(SEC) + + OPC_RANGE(SEQ) + + OPC_RANGE(QUOTA) + + OPC_RANGE(LLOG) + + OPC_RANGE(OBD) + + OPC_RANGE(MGS) + + OPC_RANGE(LDLM) + + OPC_RANGE(MDS) + + OPC_RANGE(OST)); } else { /* Unknown Opcode */ return -1; @@ -273,19 +277,19 @@ static inline int opcode_offset(__u32 opc) { } -#define LUSTRE_MAX_OPCODES ((OST_LAST_OPC - OST_FIRST_OPC) + \ - (MDS_LAST_OPC - MDS_FIRST_OPC) + \ - (LDLM_LAST_OPC - LDLM_FIRST_OPC) + \ - (MGS_LAST_OPC - MGS_FIRST_OPC) + \ - (OBD_LAST_OPC - OBD_FIRST_OPC) + \ - (LLOG_LAST_OPC - LLOG_FIRST_OPC) + \ - (QUOTA_LAST_OPC - QUOTA_FIRST_OPC) + \ - (SEQ_LAST_OPC - SEQ_FIRST_OPC) + \ - (SEC_LAST_OPC - SEC_FIRST_OPC) + \ - (FLD_LAST_OPC - FLD_FIRST_OPC)) +#define LUSTRE_MAX_OPCODES (OPC_RANGE(OST) + \ + OPC_RANGE(MDS) + \ + OPC_RANGE(LDLM) + \ + OPC_RANGE(MGS) + \ + OPC_RANGE(OBD) + \ + OPC_RANGE(LLOG) + \ + OPC_RANGE(SEC) + \ + OPC_RANGE(SEQ) + \ + OPC_RANGE(SEC) + \ + OPC_RANGE(FLD) ) #define EXTRA_MAX_OPCODES ((PTLRPC_LAST_CNTR - PTLRPC_FIRST_CNTR) + \ - (EXTRA_LAST_OPC - EXTRA_FIRST_OPC)) + OPC_RANGE(EXTRA)) enum { PTLRPC_REQWAIT_CNTR = 0, @@ -352,14 +356,14 @@ static inline int lprocfs_stats_lock(struct lprocfs_stats *stats, int type) rc = 1; if (type & LPROCFS_GET_SMP_ID) rc = 0; - spin_lock(&stats->ls_lock); + cfs_spin_lock(&stats->ls_lock); } else { if (type & LPROCFS_GET_NUM_CPU) - rc = num_possible_cpus(); + rc = cfs_num_possible_cpus(); if (type & LPROCFS_GET_SMP_ID) { - stats->ls_flags &= LPROCFS_STATS_GET_SMP_ID; + stats->ls_flags |= LPROCFS_STATS_GET_SMP_ID; rc = cfs_get_cpu(); - } + } } return rc; } @@ -367,9 +371,9 @@ static inline int lprocfs_stats_lock(struct lprocfs_stats *stats, int type) static inline void lprocfs_stats_unlock(struct lprocfs_stats *stats) { if (stats->ls_flags & LPROCFS_STATS_FLAG_NOPERCPU) - spin_unlock(&stats->ls_lock); - else if (stats->ls_flags & LPROCFS_STATS_GET_SMP_ID) - cfs_put_cpu(); + cfs_spin_unlock(&stats->ls_lock); + else if (stats->ls_flags & LPROCFS_STATS_GET_SMP_ID) + cfs_put_cpu(); } /* Two optimized LPROCFS counter increment functions are provided: @@ -399,7 +403,7 @@ static inline __u64 lprocfs_stats_collector(struct lprocfs_stats *stats, int i; LASSERT(stats != NULL); - for (i = 0; i < num_possible_cpus(); i++) + for (i = 0; i < cfs_num_possible_cpus(); i++) ret += lprocfs_read_helper(&(stats->ls_percpu[i]->lp_cntr[idx]), field); return ret; @@ -411,6 +415,8 @@ 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); @@ -420,12 +426,13 @@ extern void lprocfs_counter_init(struct lprocfs_stats *stats, int index, unsigned conf, const char *name, const char *units); extern void lprocfs_free_obd_stats(struct obd_device *obddev); +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); extern int lprocfs_exp_setup(struct obd_export *exp, - lnet_nid_t *peer_nid, int *newnid); + lnet_nid_t *peer_nid, int reconnect, int *newnid); 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, @@ -434,7 +441,7 @@ extern cfs_proc_dir_entry_t *lprocfs_add_simple(struct proc_dir_entry *root, void *data, struct file_operations *fops); extern struct proc_dir_entry *lprocfs_add_symlink(const char *name, - struct proc_dir_entry *parent, const char *dest); + struct proc_dir_entry *parent, const char *format, ...); extern void lprocfs_free_per_client_stats(struct obd_device *obd); extern int lprocfs_nid_stats_clear_write(struct file *file, const char *buffer, unsigned long count, void *data); @@ -563,40 +570,54 @@ int lprocfs_obd_rd_hash(char *page, char **start, off_t off, extern int lprocfs_seq_release(struct inode *, struct file *); /* in lprocfs_stat.c, to protect the private data for proc entries */ -extern struct rw_semaphore _lprocfs_lock; +extern cfs_rw_semaphore_t _lprocfs_lock; #define LPROCFS_ENTRY() do { \ - down_read(&_lprocfs_lock); \ + cfs_down_read(&_lprocfs_lock); \ } while(0) #define LPROCFS_EXIT() do { \ - up_read(&_lprocfs_lock); \ -} while(0) -#define LPROCFS_ENTRY_AND_CHECK(dp) do { \ - typecheck(struct proc_dir_entry *, dp); \ - LPROCFS_ENTRY(); \ - if ((dp)->deleted) { \ - LPROCFS_EXIT(); \ - return -ENODEV; \ - } \ + cfs_up_read(&_lprocfs_lock); \ } while(0) + +#ifdef HAVE_PROCFS_DELETED +static inline +int LPROCFS_ENTRY_AND_CHECK(struct proc_dir_entry *dp) +{ + LPROCFS_ENTRY(); + if ((dp)->deleted) { + LPROCFS_EXIT(); + return -ENODEV; + } + return 0; +} +#else +static inline +int LPROCFS_ENTRY_AND_CHECK(struct proc_dir_entry *dp) +{ + LPROCFS_ENTRY(); + return 0; +} +#endif + #define LPROCFS_WRITE_ENTRY() do { \ - down_write(&_lprocfs_lock); \ + cfs_down_write(&_lprocfs_lock); \ } while(0) #define LPROCFS_WRITE_EXIT() do { \ - up_write(&_lprocfs_lock); \ + cfs_up_write(&_lprocfs_lock); \ } while(0) + /* You must use these macros when you want to refer to * the import in a client obd_device for a lprocfs entry */ #define LPROCFS_CLIMP_CHECK(obd) do { \ typecheck(struct obd_device *, obd); \ - down_read(&(obd)->u.cli.cl_sem); \ + cfs_down_read(&(obd)->u.cli.cl_sem); \ if ((obd)->u.cli.cl_import == NULL) { \ - up_read(&(obd)->u.cli.cl_sem); \ + cfs_up_read(&(obd)->u.cli.cl_sem); \ return -ENODEV; \ } \ } while(0) #define LPROCFS_CLIMP_EXIT(obd) \ - up_read(&(obd)->u.cli.cl_sem); + cfs_up_read(&(obd)->u.cli.cl_sem); /* write the name##_seq_show function, call LPROC_SEQ_FOPS_RO for read-only @@ -631,14 +652,17 @@ struct file_operations name##_fops = { \ struct ptlrpc_request; extern void target_print_req(void *seq_file, struct ptlrpc_request *req); -/* lprocfs_status.c: read recovery max time bz13079 */ -int lprocfs_obd_rd_recovery_maxtime(char *page, char **start, off_t off, - int count, int *eof, void *data); - -/* lprocfs_status.c: write recovery max time bz13079 */ -int lprocfs_obd_wr_recovery_maxtime(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_obd_rd_mntdev(char *page, char **start, off_t off, + int count, int *eof, void *data); /* all quota proc functions */ extern int lprocfs_quota_rd_bunit(char *page, char **start, off_t off, int count, int *eof, void *data); @@ -689,25 +713,6 @@ extern int lprocfs_quota_rd_qs_factor(char *page, char **start, off_t off, extern int lprocfs_quota_wr_qs_factor(struct file *file, const char *buffer, unsigned long count, void *data); -/** struct for holding changelog data for seq_file processing */ -struct changelog_seq_iter { - void *csi_dev; - struct llog_ctxt *csi_ctxt; - struct llog_handle *csi_llh; - __u64 csi_startrec; - __u64 csi_endrec; - loff_t csi_pos; - int csi_wrote; - int csi_startcat; - int csi_startidx; - int csi_fill:1; - int csi_done:1; -}; -int changelog_seq_open(struct inode *inode, struct file *file, - struct changelog_seq_iter **csih); -int changelog_seq_release(struct inode *inode, struct file *file); -loff_t changelog_seq_lseek(struct file *file, loff_t offset, int origin); - #else @@ -744,6 +749,9 @@ static inline int lprocfs_register_stats(cfs_proc_dir_entry_t *root, 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, @@ -754,12 +762,14 @@ static inline int lprocfs_alloc_md_stats(struct obd_device *obddev, { return 0; } static inline void lprocfs_free_obd_stats(struct obd_device *obddev) { return; } +static inline void lprocfs_free_md_stats(struct obd_device *obddev) +{ return; } struct obd_export; static inline int lprocfs_add_clear_entry(struct obd_export *exp) { 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, + int reconnect, int *newnid) { return 0; } static inline int lprocfs_exp_cleanup(struct obd_export *exp) { return 0; } @@ -771,7 +781,7 @@ static inline cfs_proc_dir_entry_t *lprocfs_add_simple(struct proc_dir_entry *ro 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 *dest) + struct proc_dir_entry *parent, const char *format, ...) {return NULL; } static inline void lprocfs_free_per_client_stats(struct obd_device *obd) {}