X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Finclude%2Flprocfs_status.h;h=abac33c4c5f4f95d1d738109d0c9fd4e8901c543;hb=92f7ed4a92abf85b9b1cdfb0cae06e50a5f8319d;hp=6d7cbfb96a161ea98394ab71137341e98b07a927;hpb=adde80ffefe375e113c0e4a2a5f8e37519205b5c;p=fs%2Flustre-release.git diff --git a/lustre/include/lprocfs_status.h b/lustre/include/lprocfs_status.h index 6d7cbfb..abac33c 100644 --- a/lustre/include/lprocfs_status.h +++ b/lustre/include/lprocfs_status.h @@ -16,8 +16,8 @@ * in the LICENSE file that accompanied this code). * * You should have received a copy of the GNU General Public License - * version 2 along with this program; If not, see [sun.com URL with a - * copy of GPLv2]. + * 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 @@ -64,6 +64,10 @@ struct lprocfs_vars { cfs_write_proc_t *write_fptr; void *data; struct file_operations *fops; + /** + * /proc file mode. + */ + mode_t proc_mode; }; struct lprocfs_static_vars { @@ -161,9 +165,11 @@ struct lprocfs_percpu { #define LPROCFS_GET_SMP_ID 0x0002 enum lprocfs_stats_flags { - LPROCFS_STATS_FLAG_PERCPU = 0x0000, /* per cpu counter */ + LPROCFS_STATS_FLAG_NONE = 0x0000, /* per cpu counter */ LPROCFS_STATS_FLAG_NOPERCPU = 0x0001, /* stats have no percpu * area and need locking */ + LPROCFS_STATS_GET_SMP_ID = 0x0002, /* just record locking with + * LPROCFS_GET_SMP_ID flag */ }; enum lprocfs_fields_flags { @@ -218,9 +224,9 @@ static inline int opcode_offset(__u32 opc) { (LDLM_LAST_OPC - LDLM_FIRST_OPC) + (MDS_LAST_OPC - MDS_FIRST_OPC) + (OST_LAST_OPC - OST_FIRST_OPC)); -} else if (opc < FLD_LAST_OPC) { - /* FLD opcode */ - return (opc - FLD_FIRST_OPC + + } 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) + @@ -230,7 +236,7 @@ static inline int opcode_offset(__u32 opc) { } else if (opc < SEQ_LAST_OPC) { /* SEQ opcode */ return (opc - SEQ_FIRST_OPC + - (FLD_LAST_OPC - FLD_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) + @@ -241,7 +247,19 @@ static inline int opcode_offset(__u32 opc) { /* SEC opcode */ return (opc - SEC_FIRST_OPC + (SEQ_LAST_OPC - SEQ_FIRST_OPC) + - (FLD_LAST_OPC - FLD_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)); + } 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) + @@ -254,15 +272,17 @@ static inline int opcode_offset(__u32 opc) { } } -#define LUSTRE_MAX_OPCODES ((LDLM_LAST_OPC - LDLM_FIRST_OPC) + \ + +#define LUSTRE_MAX_OPCODES ((OST_LAST_OPC - OST_FIRST_OPC) + \ (MDS_LAST_OPC - MDS_FIRST_OPC) + \ - (OST_LAST_OPC - OST_FIRST_OPC) + \ - (OBD_LAST_OPC - OBD_FIRST_OPC) + \ - (FLD_LAST_OPC - FLD_FIRST_OPC) + \ - (SEQ_LAST_OPC - SEQ_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) + \ - (SEC_LAST_OPC - SEC_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 EXTRA_MAX_OPCODES ((PTLRPC_LAST_CNTR - PTLRPC_FIRST_CNTR) + \ (EXTRA_LAST_OPC - EXTRA_FIRST_OPC)) @@ -284,12 +304,15 @@ enum { LDLM_EXTENT_ENQUEUE, LDLM_FLOCK_ENQUEUE, LDLM_IBITS_ENQUEUE, + MDS_REINT_SETATTR, MDS_REINT_CREATE, MDS_REINT_LINK, - MDS_REINT_OPEN, - MDS_REINT_SETATTR, - MDS_REINT_RENAME, MDS_REINT_UNLINK, + MDS_REINT_RENAME, + MDS_REINT_OPEN, + MDS_REINT_SETXATTR, + BRW_READ_BYTES, + BRW_WRITE_BYTES, EXTRA_LAST_OPC }; @@ -333,8 +356,10 @@ static inline int lprocfs_stats_lock(struct lprocfs_stats *stats, int type) } else { if (type & LPROCFS_GET_NUM_CPU) rc = num_possible_cpus(); - if (type & LPROCFS_GET_SMP_ID) - rc = smp_processor_id(); + if (type & LPROCFS_GET_SMP_ID) { + stats->ls_flags |= LPROCFS_STATS_GET_SMP_ID; + rc = cfs_get_cpu(); + } } return rc; } @@ -343,6 +368,8 @@ 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(); } /* Two optimized LPROCFS counter increment functions are provided: @@ -362,10 +389,10 @@ extern void lprocfs_counter_sub(struct lprocfs_stats *stats, int idx, #define lprocfs_counter_decr(stats, idx) \ lprocfs_counter_sub(stats, idx, 1) -extern __s64 lprocfs_read_helper(struct lprocfs_counter *lc, +extern __s64 lprocfs_read_helper(struct lprocfs_counter *lc, enum lprocfs_fields_flags field); -static inline __u64 lprocfs_stats_collector(struct lprocfs_stats *stats, - int idx, +static inline __u64 lprocfs_stats_collector(struct lprocfs_stats *stats, + int idx, enum lprocfs_fields_flags field) { __u64 ret = 0; @@ -382,10 +409,13 @@ 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, +extern void lprocfs_init_ops_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); +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, unsigned conf, const char *name, const char *units); @@ -397,9 +427,12 @@ extern int lprocfs_add_clear_entry(struct obd_device * obd, extern int lprocfs_exp_setup(struct obd_export *exp, lnet_nid_t *peer_nid, int *newnid); extern int lprocfs_exp_cleanup(struct obd_export *exp); -extern int lprocfs_add_simple(struct proc_dir_entry *root, - char *name, cfs_read_proc_t *read_proc, - cfs_write_proc_t *write_proc, void *data); +extern cfs_proc_dir_entry_t *lprocfs_add_simple(struct proc_dir_entry *root, + char *name, + cfs_read_proc_t *read_proc, + cfs_write_proc_t *write_proc, + 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); extern void lprocfs_free_per_client_stats(struct obd_device *obd); @@ -430,14 +463,10 @@ extern cfs_proc_dir_entry_t *lprocfs_srch(cfs_proc_dir_entry_t *root, extern int lprocfs_obd_setup(struct obd_device *obd, struct lprocfs_vars *list); extern int lprocfs_obd_cleanup(struct obd_device *obd); -extern int lprocfs_add_simple(struct proc_dir_entry *root, char *name, - cfs_read_proc_t *read_proc, - cfs_write_proc_t *write_proc, - void *data); extern void lprocfs_free_per_client_stats(struct obd_device *obd); extern struct file_operations lprocfs_evict_client_fops; -extern int lprocfs_seq_create(cfs_proc_dir_entry_t *parent, char *name, +extern int lprocfs_seq_create(cfs_proc_dir_entry_t *parent, char *name, mode_t mode, struct file_operations *seq_fops, void *data); extern int lprocfs_obd_seq_create(struct obd_device *dev, char *name, @@ -466,6 +495,10 @@ 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, @@ -504,7 +537,7 @@ 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_read_frac_helper(char *buffer, unsigned long count, +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); @@ -515,16 +548,18 @@ void lprocfs_oh_tally_log2(struct obd_histogram *oh, unsigned int value); void lprocfs_oh_clear(struct obd_histogram *oh); unsigned long lprocfs_oh_sum(struct obd_histogram *oh); -/* lprocfs_status.c: counter read/write functions */ -extern int lprocfs_counter_read(char *page, char **start, off_t off, - int count, int *eof, void *data); -extern int lprocfs_counter_write(struct file *file, const char *buffer, - unsigned long count, void *data); +void lprocfs_stats_collect(struct lprocfs_stats *stats, int idx, + struct lprocfs_counter *cnt); + /* 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); + extern int lprocfs_seq_release(struct inode *, struct file *); /* in lprocfs_stat.c, to protect the private data for proc entries */ @@ -550,7 +585,7 @@ extern struct rw_semaphore _lprocfs_lock; up_write(&_lprocfs_lock); \ } while(0) -/* You must use these macros when you want to refer to +/* 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); \ @@ -564,8 +599,8 @@ extern struct rw_semaphore _lprocfs_lock; up_read(&(obd)->u.cli.cl_sem); -/* 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 +/* 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); */ #define __LPROC_SEQ_FOPS(name, custom_seq_write) \ @@ -603,8 +638,83 @@ int lprocfs_obd_rd_recovery_maxtime(char *page, char **start, off_t off, /* 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); + +/* 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); + +/** 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 /* LPROCFS is not defined */ + + + static inline void lprocfs_counter_add(struct lprocfs_stats *stats, int index, long amount) { return; } static inline void lprocfs_counter_incr(struct lprocfs_stats *stats, @@ -616,8 +726,8 @@ static inline void lprocfs_counter_init(struct lprocfs_stats *stats, const char *name, const char *units) { return; } -static inline __u64 lc_read_helper(struct lprocfs_counter *lc, - enum lprocfs_fields_flags field) +static inline __u64 lc_read_helper(struct lprocfs_counter *lc, + enum lprocfs_fields_flags field) { return 0; } static inline struct lprocfs_stats* lprocfs_alloc_stats(unsigned int num, @@ -631,11 +741,16 @@ static inline int lprocfs_register_stats(cfs_proc_dir_entry_t *root, const char *name, struct lprocfs_stats *stats) { return 0; } -static inline void lprocfs_init_ops_stats(int num_private_stats, +static inline void lprocfs_init_ops_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_private_stats) +{ return 0; } +static inline int lprocfs_alloc_md_stats(struct obd_device *obddev, + unsigned int num_private_stats) { return 0; } static inline void lprocfs_free_obd_stats(struct obd_device *obddev) { return; } @@ -644,15 +759,16 @@ 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) + lnet_nid_t *peer_nid, int *newnid) { return 0; } static inline int lprocfs_exp_cleanup(struct obd_export *exp) { return 0; } -static inline int lprocfs_add_simple(struct proc_dir_entry *root, +static inline cfs_proc_dir_entry_t *lprocfs_add_simple(struct proc_dir_entry *root, char *name, cfs_read_proc_t *read_proc, cfs_write_proc_t *write_proc, - void *data) + void *data, + 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) @@ -694,6 +810,12 @@ static inline int lprocfs_rd_server_uuid(char *page, char **start, off_t off, 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_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; } @@ -752,14 +874,11 @@ void lprocfs_oh_clear(struct obd_histogram *oh) {} static inline unsigned long lprocfs_oh_sum(struct obd_histogram *oh) { return 0; } static inline -int lprocfs_counter_read(char *page, char **start, off_t off, - int count, int *eof, void *data) { return 0; } -static inline -int lprocfs_counter_write(struct file *file, const char *buffer, - unsigned long count, void *data) { return 0; } +void lprocfs_stats_collect(struct lprocfs_stats *stats, int idx, + struct lprocfs_counter *cnt) {} static inline -__u64 lprocfs_stats_collector(struct lprocfs_stats *stats, int idx, +__u64 lprocfs_stats_collector(struct lprocfs_stats *stats, int idx, enum lprocfs_fields_flags field) { return (__u64)0; }