int ldlm_namespace_proc_register(struct ldlm_namespace *ns) { struct lprocfs_vars lock_vars[2]; char lock_name[MAX_STRING_SIZE + 1]; proc_dir_entry_t *ns_pde; LASSERT(ns != NULL); LASSERT(ns->ns_rs_hash != NULL); if (ns->ns_proc_dir_entry != NULL) { ns_pde = ns->ns_proc_dir_entry; } else { ns_pde = proc_mkdir(ldlm_ns_name(ns), ldlm_ns_proc_dir); if (ns_pde == NULL) return -ENOMEM; ns->ns_proc_dir_entry = ns_pde; } ns->ns_stats = lprocfs_alloc_stats(LDLM_NSS_LAST, 0); if (ns->ns_stats == NULL) return -ENOMEM; lprocfs_counter_init(ns->ns_stats, LDLM_NSS_LOCKS, LPROCFS_CNTR_AVGMINMAX, "locks", "locks"); lock_name[MAX_STRING_SIZE] = '\0'; memset(lock_vars, 0, sizeof(lock_vars)); lock_vars[0].name = lock_name; LDLM_NS_ADD_VAR("resource_count", ns, &lprocfs_ns_resources_fops); LDLM_NS_ADD_VAR("lock_count", ns, &lprocfs_ns_locks_fops); if (ns_is_client(ns)) { LDLM_NS_ADD_VAR("lock_unused_count", &ns->ns_nr_unused, &ldlm_uint_fops); LDLM_NS_ADD_VAR("lru_size", ns, &lprocfs_lru_size_fops); LDLM_NS_ADD_VAR("lru_max_age", &ns->ns_max_age, &ldlm_rw_uint_fops); LDLM_NS_ADD_VAR("early_lock_cancel", ns, &lprocfs_elc_fops); } else { LDLM_NS_ADD_VAR("ctime_age_limit", &ns->ns_ctime_age_limit, &ldlm_rw_uint_fops); LDLM_NS_ADD_VAR("lock_timeouts", &ns->ns_timeouts, &ldlm_uint_fops); LDLM_NS_ADD_VAR("max_nolock_bytes", &ns->ns_max_nolock_size, &ldlm_rw_uint_fops); LDLM_NS_ADD_VAR("contention_seconds", &ns->ns_contention_time, &ldlm_rw_uint_fops); LDLM_NS_ADD_VAR("contended_locks", &ns->ns_contended_locks, &ldlm_rw_uint_fops); LDLM_NS_ADD_VAR("max_parallel_ast", &ns->ns_max_parallel_ast, &ldlm_rw_uint_fops); } return 0; }
int ldlm_namespace_proc_register(struct ldlm_namespace *ns) { struct lprocfs_vars lock_vars[2]; char lock_name[MAX_STRING_SIZE + 1]; LASSERT(ns != NULL); LASSERT(ns->ns_rs_hash != NULL); ns->ns_stats = lprocfs_alloc_stats(LDLM_NSS_LAST, 0); if (ns->ns_stats == NULL) return -ENOMEM; lprocfs_counter_init(ns->ns_stats, LDLM_NSS_LOCKS, LPROCFS_CNTR_AVGMINMAX, "locks", "locks"); lock_name[MAX_STRING_SIZE] = '\0'; memset(lock_vars, 0, sizeof(lock_vars)); lock_vars[0].name = lock_name; snprintf(lock_name, MAX_STRING_SIZE, "%s/resource_count", ldlm_ns_name(ns)); lock_vars[0].data = ns; lock_vars[0].read_fptr = lprocfs_rd_ns_resources; lprocfs_add_vars(ldlm_ns_proc_dir, lock_vars, 0); snprintf(lock_name, MAX_STRING_SIZE, "%s/lock_count", ldlm_ns_name(ns)); lock_vars[0].data = ns; lock_vars[0].read_fptr = lprocfs_rd_ns_locks; lprocfs_add_vars(ldlm_ns_proc_dir, lock_vars, 0); if (ns_is_client(ns)) { snprintf(lock_name, MAX_STRING_SIZE, "%s/lock_unused_count", ldlm_ns_name(ns)); lock_vars[0].data = &ns->ns_nr_unused; lock_vars[0].read_fptr = lprocfs_rd_uint; lprocfs_add_vars(ldlm_ns_proc_dir, lock_vars, 0); snprintf(lock_name, MAX_STRING_SIZE, "%s/lru_size", ldlm_ns_name(ns)); lock_vars[0].data = ns; lock_vars[0].read_fptr = lprocfs_rd_lru_size; lock_vars[0].write_fptr = lprocfs_wr_lru_size; lprocfs_add_vars(ldlm_ns_proc_dir, lock_vars, 0); snprintf(lock_name, MAX_STRING_SIZE, "%s/lru_max_age", ldlm_ns_name(ns)); lock_vars[0].data = &ns->ns_max_age; lock_vars[0].read_fptr = lprocfs_rd_uint; lock_vars[0].write_fptr = lprocfs_wr_uint; lprocfs_add_vars(ldlm_ns_proc_dir, lock_vars, 0); snprintf(lock_name, MAX_STRING_SIZE, "%s/early_lock_cancel", ldlm_ns_name(ns)); lock_vars[0].data = ns; lock_vars[0].read_fptr = lprocfs_rd_elc; lock_vars[0].write_fptr = lprocfs_wr_elc; lprocfs_add_vars(ldlm_ns_proc_dir, lock_vars, 0); } else { snprintf(lock_name, MAX_STRING_SIZE, "%s/ctime_age_limit", ldlm_ns_name(ns)); lock_vars[0].data = &ns->ns_ctime_age_limit; lock_vars[0].read_fptr = lprocfs_rd_uint; lock_vars[0].write_fptr = lprocfs_wr_uint; lprocfs_add_vars(ldlm_ns_proc_dir, lock_vars, 0); snprintf(lock_name, MAX_STRING_SIZE, "%s/lock_timeouts", ldlm_ns_name(ns)); lock_vars[0].data = &ns->ns_timeouts; lock_vars[0].read_fptr = lprocfs_rd_uint; lprocfs_add_vars(ldlm_ns_proc_dir, lock_vars, 0); snprintf(lock_name, MAX_STRING_SIZE, "%s/max_nolock_bytes", ldlm_ns_name(ns)); lock_vars[0].data = &ns->ns_max_nolock_size; lock_vars[0].read_fptr = lprocfs_rd_uint; lock_vars[0].write_fptr = lprocfs_wr_uint; lprocfs_add_vars(ldlm_ns_proc_dir, lock_vars, 0); snprintf(lock_name, MAX_STRING_SIZE, "%s/contention_seconds", ldlm_ns_name(ns)); lock_vars[0].data = &ns->ns_contention_time; lock_vars[0].read_fptr = lprocfs_rd_uint; lock_vars[0].write_fptr = lprocfs_wr_uint; lprocfs_add_vars(ldlm_ns_proc_dir, lock_vars, 0); snprintf(lock_name, MAX_STRING_SIZE, "%s/contended_locks", ldlm_ns_name(ns)); lock_vars[0].data = &ns->ns_contended_locks; lock_vars[0].read_fptr = lprocfs_rd_uint; lock_vars[0].write_fptr = lprocfs_wr_uint; lprocfs_add_vars(ldlm_ns_proc_dir, lock_vars, 0); snprintf(lock_name, MAX_STRING_SIZE, "%s/max_parallel_ast", ldlm_ns_name(ns)); lock_vars[0].data = &ns->ns_max_parallel_ast; lock_vars[0].read_fptr = lprocfs_rd_uint; lock_vars[0].write_fptr = lprocfs_wr_uint; lprocfs_add_vars(ldlm_ns_proc_dir, lock_vars, 0); } return 0; }