⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lproc_llite.c

📁 lustre 1.6.5 source code
💻 C
📖 第 1 页 / 共 4 页
字号:
        rc = lprocfs_write_helper(buffer, count, &val);        if (rc)                return rc;        if (val)                sbi->ll_flags |=  (LL_SBI_LLITE_CHECKSUM|LL_SBI_DATA_CHECKSUM);        else                sbi->ll_flags &= ~(LL_SBI_LLITE_CHECKSUM|LL_SBI_DATA_CHECKSUM);        rc = obd_set_info_async(sbi->ll_osc_exp, strlen("checksum"), "checksum",                                sizeof(val), &val, NULL);        if (rc)                CWARN("Failed to set OSC checksum flags: %d\n", rc);        return count;}static int ll_rd_max_rw_chunk(char *page, char **start, off_t off,                          int count, int *eof, void *data){        struct super_block *sb = data;        return snprintf(page, count, "%lu\n", ll_s2sbi(sb)->ll_max_rw_chunk);}static int ll_wr_max_rw_chunk(struct file *file, const char *buffer,                          unsigned long count, void *data){        struct super_block *sb = data;        int rc, val;        rc = lprocfs_write_helper(buffer, count, &val);        if (rc)                return rc;        ll_s2sbi(sb)->ll_max_rw_chunk = val;        return count;}static int ll_rd_track_id(char *page, int count, void *data,                           enum stats_track_type type){        struct super_block *sb = data;        if (ll_s2sbi(sb)->ll_stats_track_type == type) {                return snprintf(page, count, "%d\n",                                ll_s2sbi(sb)->ll_stats_track_id);                } else if (ll_s2sbi(sb)->ll_stats_track_type == STATS_TRACK_ALL) {                return snprintf(page, count, "0 (all)\n");        } else {                return snprintf(page, count, "untracked\n");        }}static int ll_wr_track_id(const char *buffer, unsigned long count, void *data,                          enum stats_track_type type){        struct super_block *sb = data;        int rc, pid;        rc = lprocfs_write_helper(buffer, count, &pid);        if (rc)                return rc;        ll_s2sbi(sb)->ll_stats_track_id = pid;        if (pid == 0)                ll_s2sbi(sb)->ll_stats_track_type = STATS_TRACK_ALL;        else                ll_s2sbi(sb)->ll_stats_track_type = type;        lprocfs_clear_stats(ll_s2sbi(sb)->ll_stats);        return count;}static int ll_rd_track_pid(char *page, char **start, off_t off,                          int count, int *eof, void *data){        return (ll_rd_track_id(page, count, data, STATS_TRACK_PID));}static int ll_wr_track_pid(struct file *file, const char *buffer,                          unsigned long count, void *data){        return (ll_wr_track_id(buffer, count, data, STATS_TRACK_PID));}static int ll_rd_track_ppid(char *page, char **start, off_t off,                          int count, int *eof, void *data){        return (ll_rd_track_id(page, count, data, STATS_TRACK_PPID));}static int ll_wr_track_ppid(struct file *file, const char *buffer,                          unsigned long count, void *data){        return (ll_wr_track_id(buffer, count, data, STATS_TRACK_PPID));}static int ll_rd_track_gid(char *page, char **start, off_t off,                          int count, int *eof, void *data){        return (ll_rd_track_id(page, count, data, STATS_TRACK_GID));}static int ll_wr_track_gid(struct file *file, const char *buffer,                          unsigned long count, void *data){                                                                         return (ll_wr_track_id(buffer, count, data, STATS_TRACK_GID));}static int ll_rd_contention_time(char *page, char **start, off_t off,                                 int count, int *eof, void *data){        struct super_block *sb = data;        *eof = 1;        return snprintf(page, count, "%u\n", ll_s2sbi(sb)->ll_contention_time);}static int ll_wr_contention_time(struct file *file, const char *buffer,                                 unsigned long count, void *data){        struct super_block *sb = data;        struct ll_sb_info *sbi = ll_s2sbi(sb);        return lprocfs_write_helper(buffer, count,&sbi->ll_contention_time) ?:                count;}static int ll_rd_statahead_max(char *page, char **start, off_t off,                               int count, int *eof, void *data){        struct super_block *sb = data;        struct ll_sb_info *sbi = ll_s2sbi(sb);        return snprintf(page, count, "%u\n", sbi->ll_sa_max);}static int ll_wr_statahead_max(struct file *file, const char *buffer,                               unsigned long count, void *data){        struct super_block *sb = data;        struct ll_sb_info *sbi = ll_s2sbi(sb);        int val, rc;        rc = lprocfs_write_helper(buffer, count, &val);        if (rc)                return rc;        if (val >= 0 && val <= LL_SA_RPC_MAX)                sbi->ll_sa_max = val;        else                CERROR("Bad statahead_max value %d. Valid values are in the "                       "range [0, %d]\n", val, LL_SA_RPC_MAX);        return count;}static int ll_rd_statahead_stats(char *page, char **start, off_t off,                                 int count, int *eof, void *data){        struct super_block *sb = data;        struct ll_sb_info *sbi = ll_s2sbi(sb);        return snprintf(page, count,                        "statahead wrong: %u\n"                        "statahead total: %u\n"                        "ls blocked:      %llu\n"                        "ls cached:       %llu\n"                        "hit count:       %llu\n"                        "miss count:      %llu\n",                        sbi->ll_sa_wrong,                        sbi->ll_sa_total,                        sbi->ll_sa_blocked,                        sbi->ll_sa_cached,                        sbi->ll_sa_hit,                        sbi->ll_sa_miss);}static struct lprocfs_vars lprocfs_llite_obd_vars[] = {        { "uuid",         ll_rd_sb_uuid,          0, 0 },        //{ "mntpt_path",   ll_rd_path,             0, 0 },        { "fstype",       ll_rd_fstype,           0, 0 },        { "blocksize",    ll_rd_blksize,          0, 0 },        { "kbytestotal",  ll_rd_kbytestotal,      0, 0 },        { "kbytesfree",   ll_rd_kbytesfree,       0, 0 },        { "kbytesavail",  ll_rd_kbytesavail,      0, 0 },        { "filestotal",   ll_rd_filestotal,       0, 0 },        { "filesfree",    ll_rd_filesfree,        0, 0 },        //{ "filegroups",   lprocfs_rd_filegroups,  0, 0 },        { "max_read_ahead_mb", ll_rd_max_readahead_mb,                               ll_wr_max_readahead_mb, 0 },        { "max_read_ahead_whole_mb", ll_rd_max_read_ahead_whole_mb,                                     ll_wr_max_read_ahead_whole_mb, 0 },        { "max_cached_mb",  ll_rd_max_cached_mb, ll_wr_max_cached_mb, 0 },        { "checksum_pages", ll_rd_checksum, ll_wr_checksum, 0 },        { "max_rw_chunk",   ll_rd_max_rw_chunk, ll_wr_max_rw_chunk, 0 },        { "stats_track_pid",  ll_rd_track_pid, ll_wr_track_pid, 0 },        { "stats_track_ppid", ll_rd_track_ppid, ll_wr_track_ppid, 0 },        { "stats_track_gid",  ll_rd_track_gid, ll_wr_track_gid, 0 },        { "contention_seconds", ll_rd_contention_time, ll_wr_contention_time, 0},        { "statahead_max",      ll_rd_statahead_max, ll_wr_statahead_max, 0 },        { "statahead_stats",    ll_rd_statahead_stats, 0, 0 },        { 0 }};#define MAX_STRING_SIZE 128struct llite_file_opcode {        __u32       opcode;        __u32       type;        const char *opname;} llite_opcode_table[LPROC_LL_FILE_OPCODES] = {        /* file operation */        { LPROC_LL_DIRTY_HITS,     LPROCFS_TYPE_REGS, "dirty_pages_hits" },        { LPROC_LL_DIRTY_MISSES,   LPROCFS_TYPE_REGS, "dirty_pages_misses" },        { LPROC_LL_WB_WRITEPAGE,   LPROCFS_CNTR_AVGMINMAX|LPROCFS_TYPE_PAGES,                                   "writeback_from_writepage" },        { LPROC_LL_WB_PRESSURE,    LPROCFS_CNTR_AVGMINMAX|LPROCFS_TYPE_PAGES,                                   "writeback_from_pressure" },        { LPROC_LL_WB_OK,          LPROCFS_CNTR_AVGMINMAX|LPROCFS_TYPE_PAGES,                                   "writeback_ok_pages" },        { LPROC_LL_WB_FAIL,        LPROCFS_CNTR_AVGMINMAX|LPROCFS_TYPE_PAGES,                                   "writeback_failed_pages" },        { LPROC_LL_READ_BYTES,     LPROCFS_CNTR_AVGMINMAX|LPROCFS_TYPE_BYTES,                                   "read_bytes" },        { LPROC_LL_WRITE_BYTES,    LPROCFS_CNTR_AVGMINMAX|LPROCFS_TYPE_BYTES,                                   "write_bytes" },        { LPROC_LL_BRW_READ,       LPROCFS_CNTR_AVGMINMAX|LPROCFS_TYPE_PAGES,                                   "brw_read" },        { LPROC_LL_BRW_WRITE,      LPROCFS_CNTR_AVGMINMAX|LPROCFS_TYPE_PAGES,                                   "brw_write" },        { LPROC_LL_IOCTL,          LPROCFS_TYPE_REGS, "ioctl" },        { LPROC_LL_OPEN,           LPROCFS_TYPE_REGS, "open" },        { LPROC_LL_RELEASE,        LPROCFS_TYPE_REGS, "close" },        { LPROC_LL_MAP,            LPROCFS_TYPE_REGS, "mmap" },        { LPROC_LL_LLSEEK,         LPROCFS_TYPE_REGS, "seek" },        { LPROC_LL_FSYNC,          LPROCFS_TYPE_REGS, "fsync" },        /* inode operation */        { LPROC_LL_SETATTR,        LPROCFS_TYPE_REGS, "setattr" },        { LPROC_LL_TRUNC,          LPROCFS_TYPE_REGS, "truncate" },        { LPROC_LL_FLOCK,          LPROCFS_TYPE_REGS, "flock" },#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))        { LPROC_LL_GETATTR,        LPROCFS_TYPE_REGS, "getattr" },#else        { LPROC_LL_REVALIDATE,     LPROCFS_TYPE_REGS, "getattr" },#endif        /* special inode operation */        { LPROC_LL_STAFS,          LPROCFS_TYPE_REGS, "statfs" },        { LPROC_LL_ALLOC_INODE,    LPROCFS_TYPE_REGS, "alloc_inode" },        { LPROC_LL_SETXATTR,       LPROCFS_TYPE_REGS, "setxattr" },        { LPROC_LL_GETXATTR,       LPROCFS_TYPE_REGS, "getxattr" },        { LPROC_LL_LISTXATTR,      LPROCFS_TYPE_REGS, "listxattr" },        { LPROC_LL_REMOVEXATTR,    LPROCFS_TYPE_REGS, "removexattr" },        { LPROC_LL_INODE_PERM,     LPROCFS_TYPE_REGS, "inode_permission" },        { LPROC_LL_DIRECT_READ,    LPROCFS_CNTR_AVGMINMAX|LPROCFS_TYPE_PAGES,                                   "direct_read" },        { LPROC_LL_DIRECT_WRITE,   LPROCFS_CNTR_AVGMINMAX|LPROCFS_TYPE_PAGES,                                   "direct_write" },        { LPROC_LL_LOCKLESS_READ,  LPROCFS_CNTR_AVGMINMAX|LPROCFS_TYPE_BYTES,                                   "lockless_read_bytes" },        { LPROC_LL_LOCKLESS_WRITE, LPROCFS_CNTR_AVGMINMAX|LPROCFS_TYPE_BYTES,                                   "lockless_write_bytes" },};void ll_stats_ops_tally(struct ll_sb_info *sbi, int op, int count){        if (!sbi->ll_stats)                return;        if (sbi->ll_stats_track_type == STATS_TRACK_ALL)                lprocfs_counter_add(sbi->ll_stats, op, count);        else if (sbi->ll_stats_track_type == STATS_TRACK_PID &&                 sbi->ll_stats_track_id == current->pid)                lprocfs_counter_add(sbi->ll_stats, op, count);        else if (sbi->ll_stats_track_type == STATS_TRACK_PPID &&                 sbi->ll_stats_track_id == current->p_pptr->pid)                lprocfs_counter_add(sbi->ll_stats, op, count);        else if (sbi->ll_stats_track_type == STATS_TRACK_GID &&                 sbi->ll_stats_track_id == current->gid)                lprocfs_counter_add(sbi->ll_stats, op, count);}EXPORT_SYMBOL(ll_stats_ops_tally);int lprocfs_register_mountpoint(struct proc_dir_entry *parent,                                struct super_block *sb, char *osc, char *mdc){        struct lprocfs_vars lvars[2];        struct lustre_sb_info *lsi = s2lsi(sb);        struct ll_sb_info *sbi = ll_s2sbi(sb);        struct obd_device *obd;        char name[MAX_STRING_SIZE + 1], *ptr;        int err, id, len;        struct proc_dir_entry *entry;        ENTRY;        memset(lvars, 0, sizeof(lvars));        name[MAX_STRING_SIZE] = '\0';        lvars[0].name = name;        LASSERT(sbi != NULL);        LASSERT(mdc != NULL);        LASSERT(osc != NULL);        /* Get fsname */        len = strlen(lsi->lsi_lmd->lmd_profile);        ptr = strrchr(lsi->lsi_lmd->lmd_profile, '-');        if (ptr && (strcmp(ptr, "-client") == 0))                len -= 7;                 /* Mount info */        snprintf(name, MAX_STRING_SIZE, "%.*s-%p", len,                 lsi->lsi_lmd->lmd_profile, sb);                sbi->ll_proc_root = lprocfs_register(name, parent, NULL, NULL);        if (IS_ERR(sbi->ll_proc_root)) {                err = PTR_ERR(sbi->ll_proc_root);                sbi->ll_proc_root = NULL;                RETURN(err);        }        entry = create_proc_entry("dump_page_cache", 0444, sbi->ll_proc_root);        if (entry == NULL)                GOTO(out, err = -ENOMEM);        entry->proc_fops = &llite_dump_pgcache_fops;        entry->data = sbi;        entry = create_proc_entry("read_ahead_stats", 0644, sbi->ll_proc_root);        if (entry == NULL)                GOTO(out, err = -ENOMEM);        entry->proc_fops = &ll_ra_stats_fops;        entry->data = sbi;        entry = create_proc_entry("extents_stats", 0644, sbi->ll_proc_root);        if (entry == NULL)                 GOTO(out, err = -ENOMEM);        entry->proc_fops = &ll_rw_extents_stats_fops;        entry->data = sbi;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -