X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Fptlrpc%2Flproc_ptlrpc.c;h=a86b460b844be3946145b7379bb089f91f6728be;hp=2a5b643b29eb2736d257657071b782e54f95e2b4;hb=6299d78713ef2b6f69f6dd046256aa91a85147a8;hpb=96c0696453f3aaf5c29a46fd7c6f0bdc25301d71 diff --git a/lustre/ptlrpc/lproc_ptlrpc.c b/lustre/ptlrpc/lproc_ptlrpc.c index 2a5b643..a86b460 100644 --- a/lustre/ptlrpc/lproc_ptlrpc.c +++ b/lustre/ptlrpc/lproc_ptlrpc.c @@ -27,7 +27,7 @@ * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. * - * Copyright (c) 2011, 2013, Intel Corporation. + * Copyright (c) 2011, 2014, Intel Corporation. */ /* * This file is part of Lustre, http://www.lustre.org/ @@ -35,9 +35,6 @@ */ #define DEBUG_SUBSYSTEM S_CLASS -#ifndef __KERNEL__ -# include -#endif #include #include @@ -48,7 +45,7 @@ #include "ptlrpc_internal.h" -struct ll_rpc_opcode { +static struct ll_rpc_opcode { __u32 opcode; const char *opname; } ll_rpc_opcode_table[LUSTRE_MAX_OPCODES] = { @@ -142,7 +139,7 @@ struct ll_rpc_opcode { { LFSCK_QUERY, "lfsck_query" }, }; -struct ll_eopcode { +static struct ll_eopcode { __u32 opcode; const char *opname; } ll_eopcode_table[EXTRA_LAST_OPC] = { @@ -181,13 +178,14 @@ const char *ll_opcode2str(__u32 opcode) return ll_rpc_opcode_table[offset].opname; } -const char* ll_eopcode2str(__u32 opcode) +static const char *ll_eopcode2str(__u32 opcode) { LASSERT(ll_eopcode_table[opcode].opcode == opcode); return ll_eopcode_table[opcode].opname; } -#ifdef LPROCFS -void ptlrpc_lprocfs_register(struct proc_dir_entry *root, char *dir, + +#ifdef CONFIG_PROC_FS +static void ptlrpc_lprocfs_register(struct proc_dir_entry *root, char *dir, char *name, struct proc_dir_entry **procroot_ret, struct lprocfs_stats **stats_ret) { @@ -205,7 +203,7 @@ void ptlrpc_lprocfs_register(struct proc_dir_entry *root, char *dir, return; if (dir) { - svc_procroot = lprocfs_seq_register(dir, root, NULL, NULL); + svc_procroot = lprocfs_register(dir, root, NULL, NULL); if (IS_ERR(svc_procroot)) { lprocfs_free_stats(&svc_stats); return; @@ -289,7 +287,8 @@ ptlrpc_lprocfs_req_history_max_seq_show(struct seq_file *m, void *n) } static ssize_t -ptlrpc_lprocfs_req_history_max_seq_write(struct file *file, const char *buffer, +ptlrpc_lprocfs_req_history_max_seq_write(struct file *file, + const char __user *buffer, size_t count, loff_t *off) { struct seq_file *m = file->private_data; @@ -336,8 +335,9 @@ ptlrpc_lprocfs_threads_min_seq_show(struct seq_file *m, void *n) } static ssize_t -ptlrpc_lprocfs_threads_min_seq_write(struct file *file, const char *buffer, - size_t count, loff_t *off) +ptlrpc_lprocfs_threads_min_seq_write(struct file *file, + const char __user *buffer, + size_t count, loff_t *off) { struct seq_file *m = file->private_data; struct ptlrpc_service *svc = m->private; @@ -389,7 +389,8 @@ ptlrpc_lprocfs_threads_max_seq_show(struct seq_file *m, void *n) } static ssize_t -ptlrpc_lprocfs_threads_max_seq_write(struct file *file, const char *buffer, +ptlrpc_lprocfs_threads_max_seq_write(struct file *file, + const char __user *buffer, size_t count, loff_t *off) { struct seq_file *m = file->private_data; @@ -418,12 +419,6 @@ ptlrpc_lprocfs_threads_max_seq_write(struct file *file, const char *buffer, LPROC_SEQ_FOPS(ptlrpc_lprocfs_threads_max); /** - * \addtogoup nrs - * @{ - */ -extern struct nrs_core nrs_core; - -/** * Translates \e ptlrpc_nrs_pol_state values to human-readable strings. * * \param[in] state The policy state @@ -459,7 +454,7 @@ void nrs_policy_get_info_locked(struct ptlrpc_nrs_policy *policy, { LASSERT(policy != NULL); LASSERT(info != NULL); - LASSERT(spin_is_locked(&policy->pol_nrs->nrs_lock)); + assert_spin_locked(&policy->pol_nrs->nrs_lock); memcpy(info->pi_name, policy->pol_desc->pd_name, NRS_POL_NAME_MAX); @@ -520,8 +515,8 @@ again: pol_idx = 0; - cfs_list_for_each_entry(policy, &nrs->nrs_policy_list, - pol_list) { + list_for_each_entry(policy, &nrs->nrs_policy_list, + pol_list) { LASSERT(pol_idx < num_pols); nrs_policy_get_info_locked(policy, &tmp); @@ -643,7 +638,7 @@ out: * regular and high-priority (if the service has one) NRS head. */ static ssize_t -ptlrpc_lprocfs_nrs_seq_write(struct file *file, const char *buffer, +ptlrpc_lprocfs_nrs_seq_write(struct file *file, const char __user *buffer, size_t count, loff_t *off) { struct seq_file *m = file->private_data; @@ -732,12 +727,12 @@ struct ptlrpc_srh_iterator { struct ptlrpc_request *srhi_req; }; -int +static int ptlrpc_lprocfs_svc_req_history_seek(struct ptlrpc_service_part *svcpt, struct ptlrpc_srh_iterator *srhi, __u64 seq) { - cfs_list_t *e; + struct list_head *e; struct ptlrpc_request *req; if (srhi->srhi_req != NULL && @@ -753,7 +748,7 @@ ptlrpc_lprocfs_svc_req_history_seek(struct ptlrpc_service_part *svcpt, "%s:%d: seek seq "LPU64", request seq "LPU64"\n", svcpt->scp_service->srv_name, svcpt->scp_cpt, srhi->srhi_seq, srhi->srhi_req->rq_history_seq); - LASSERTF(!cfs_list_empty(&svcpt->scp_hist_reqs), + LASSERTF(!list_empty(&svcpt->scp_hist_reqs), "%s:%d: seek offset "LPU64", request seq "LPU64", " "last culled "LPU64"\n", svcpt->scp_service->srv_name, svcpt->scp_cpt, @@ -765,7 +760,7 @@ ptlrpc_lprocfs_svc_req_history_seek(struct ptlrpc_service_part *svcpt, } while (e != &svcpt->scp_hist_reqs) { - req = cfs_list_entry(e, struct ptlrpc_request, rq_history_list); + req = list_entry(e, struct ptlrpc_request, rq_history_list); if (req->rq_history_seq >= seq) { srhi->srhi_seq = req->rq_history_seq; @@ -947,27 +942,30 @@ static int ptlrpc_lprocfs_svc_req_history_show(struct seq_file *s, void *iter) rc = ptlrpc_lprocfs_svc_req_history_seek(svcpt, srhi, srhi->srhi_seq); - if (rc == 0) { - req = srhi->srhi_req; - - /* Print common req fields. - * CAVEAT EMPTOR: we're racing with the service handler - * here. The request could contain any old crap, so you - * must be just as careful as the service's request - * parser. Currently I only print stuff here I know is OK - * to look at coz it was set up in request_in_callback()!!! */ - seq_printf(s, LPD64":%s:%s:x"LPU64":%d:%s:%ld:%lds(%+lds) ", - req->rq_history_seq, libcfs_nid2str(req->rq_self), - libcfs_id2str(req->rq_peer), req->rq_xid, - req->rq_reqlen, ptlrpc_rqphase2str(req), - req->rq_arrival_time.tv_sec, - req->rq_sent - req->rq_arrival_time.tv_sec, - req->rq_sent - req->rq_deadline); + if (rc == 0) { + char nidstr[LNET_NIDSTR_SIZE]; + + req = srhi->srhi_req; + + libcfs_nid2str_r(req->rq_self, nidstr, sizeof(nidstr)); + /* Print common req fields. + * CAVEAT EMPTOR: we're racing with the service handler + * here. The request could contain any old crap, so you + * must be just as careful as the service's request + * parser. Currently I only print stuff here I know is OK + * to look at coz it was set up in request_in_callback()!!! */ + seq_printf(s, LPD64":%s:%s:x"LPU64":%d:%s:%ld:%lds(%+lds) ", + req->rq_history_seq, nidstr, + libcfs_id2str(req->rq_peer), req->rq_xid, + req->rq_reqlen, ptlrpc_rqphase2str(req), + req->rq_arrival_time.tv_sec, + req->rq_sent - req->rq_arrival_time.tv_sec, + req->rq_sent - req->rq_deadline); if (svc->srv_ops.so_req_printer == NULL) seq_printf(s, "\n"); else svc->srv_ops.so_req_printer(s, srhi->srhi_req); - } + } spin_unlock(&svcpt->scp_lock); return rc; @@ -985,7 +983,10 @@ ptlrpc_lprocfs_svc_req_history_open(struct inode *inode, struct file *file) struct seq_file *seqf; int rc; - LPROCFS_ENTRY_CHECK(PDE(inode)); + rc = LPROCFS_ENTRY_CHECK(inode); + if (rc < 0) + return rc; + rc = seq_open(file, &sops); if (rc) return rc; @@ -1022,7 +1023,7 @@ static int ptlrpc_lprocfs_timeouts_seq_show(struct seq_file *m, void *n) DHMS_FMT" ago) ", "service", cur, worst, worstt, DHMS_VARS(&ts)); - lprocfs_seq_at_hist_helper(m, &svcpt->scp_at_estimate); + lprocfs_at_hist_helper(m, &svcpt->scp_at_estimate); } return 0; @@ -1036,7 +1037,7 @@ static int ptlrpc_lprocfs_hp_ratio_seq_show(struct seq_file *m, void *v) } static ssize_t -ptlrpc_lprocfs_hp_ratio_seq_write(struct file *file, const char *buffer, +ptlrpc_lprocfs_hp_ratio_seq_write(struct file *file, const char __user *buffer, size_t count, loff_t *off) { struct seq_file *m = file->private_data; @@ -1062,7 +1063,7 @@ LPROC_SEQ_FOPS(ptlrpc_lprocfs_hp_ratio); void ptlrpc_lprocfs_register_service(struct proc_dir_entry *entry, struct ptlrpc_service *svc) { - struct lprocfs_seq_vars lproc_vars[] = { + struct lprocfs_vars lproc_vars[] = { { .name = "high_priority_ratio", .fops = &ptlrpc_lprocfs_hp_ratio_fops, .data = svc }, @@ -1105,7 +1106,7 @@ void ptlrpc_lprocfs_register_service(struct proc_dir_entry *entry, if (svc->srv_procroot == NULL) return; - lprocfs_seq_add_vars(svc->srv_procroot, lproc_vars, NULL); + lprocfs_add_vars(svc->srv_procroot, lproc_vars, NULL); rc = lprocfs_seq_create(svc->srv_procroot, "req_history", 0400, &req_history_fops, svc); @@ -1182,137 +1183,6 @@ void ptlrpc_lprocfs_unregister_obd(struct obd_device *obd) } EXPORT_SYMBOL(ptlrpc_lprocfs_unregister_obd); -#ifndef HAVE_ONLY_PROCFS_SEQ -int lprocfs_wr_ping(struct file *file, const char *buffer, - unsigned long count, void *data) -{ - struct obd_device *obd = data; - struct ptlrpc_request *req; - int rc; - ENTRY; - - LPROCFS_CLIMP_CHECK(obd); - req = ptlrpc_prep_ping(obd->u.cli.cl_import); - LPROCFS_CLIMP_EXIT(obd); - if (req == NULL) - RETURN(-ENOMEM); - - req->rq_send_state = LUSTRE_IMP_FULL; - - rc = ptlrpc_queue_wait(req); - - ptlrpc_req_finished(req); - if (rc >= 0) - RETURN(count); - RETURN(rc); -} -EXPORT_SYMBOL(lprocfs_wr_ping); - -int lprocfs_wr_import(struct file *file, const char *buffer, - unsigned long count, void *data) -{ - struct obd_device *obd = data; - struct obd_import *imp = obd->u.cli.cl_import; - char *kbuf = NULL; - char *uuid; - char *ptr; - int do_reconn = 1; - const char prefix[] = "connection="; - const int prefix_len = sizeof(prefix) - 1; - - if (count > PAGE_CACHE_SIZE - 1 || count <= prefix_len) - return -EINVAL; - - OBD_ALLOC(kbuf, count + 1); - if (kbuf == NULL) - return -ENOMEM; - - if (copy_from_user(kbuf, buffer, count)) - GOTO(out, count = -EFAULT); - - kbuf[count] = 0; - - /* only support connection=uuid::instance now */ - if (strncmp(prefix, kbuf, prefix_len) != 0) - GOTO(out, count = -EINVAL); - - uuid = kbuf + prefix_len; - ptr = strstr(uuid, "::"); - if (ptr) { - __u32 inst; - char *endptr; - - *ptr = 0; - do_reconn = 0; - ptr += strlen("::"); - inst = simple_strtol(ptr, &endptr, 10); - if (*endptr) { - CERROR("config: wrong instance # %s\n", ptr); - } else if (inst != imp->imp_connect_data.ocd_instance) { - CDEBUG(D_INFO, "IR: %s is connecting to an obsoleted " - "target(%u/%u), reconnecting...\n", - imp->imp_obd->obd_name, - imp->imp_connect_data.ocd_instance, inst); - do_reconn = 1; - } else { - CDEBUG(D_INFO, "IR: %s has already been connecting to " - "new target(%u)\n", - imp->imp_obd->obd_name, inst); - } - } - - if (do_reconn) - ptlrpc_recover_import(imp, uuid, 1); - -out: - OBD_FREE(kbuf, count + 1); - return count; -} -EXPORT_SYMBOL(lprocfs_wr_import); - -int lprocfs_rd_pinger_recov(char *page, char **start, off_t off, - int count, int *eof, void *data) -{ - struct obd_device *obd = data; - struct obd_import *imp = obd->u.cli.cl_import; - int rc; - - LPROCFS_CLIMP_CHECK(obd); - rc = snprintf(page, count, "%d\n", !imp->imp_no_pinger_recover); - LPROCFS_CLIMP_EXIT(obd); - - return rc; -} -EXPORT_SYMBOL(lprocfs_rd_pinger_recov); - -int lprocfs_wr_pinger_recov(struct file *file, const char *buffer, - unsigned long count, void *data) -{ - struct obd_device *obd = data; - struct client_obd *cli = &obd->u.cli; - struct obd_import *imp = cli->cl_import; - int rc, val; - - rc = lprocfs_write_helper(buffer, count, &val); - if (rc < 0) - return rc; - - if (val != 0 && val != 1) - return -ERANGE; - - LPROCFS_CLIMP_CHECK(obd); - spin_lock(&imp->imp_lock); - imp->imp_no_pinger_recover = !val; - spin_unlock(&imp->imp_lock); - LPROCFS_CLIMP_EXIT(obd); - - return count; - -} -EXPORT_SYMBOL(lprocfs_wr_pinger_recov); - -#endif /* HAVE_ONLY_PROCFS_SEQ */ - ssize_t lprocfs_ping_seq_write(struct file *file, const char *buffer, size_t count, loff_t *off) @@ -1345,8 +1215,8 @@ EXPORT_SYMBOL(lprocfs_ping_seq_write); * "echo connection=192.168.0.1@tcp0::instance > .../import". */ ssize_t -lprocfs_import_seq_write(struct file *file, const char *buffer, size_t count, - loff_t *off) +lprocfs_import_seq_write(struct file *file, const char __user *buffer, + size_t count, loff_t *off) { struct seq_file *m = file->private_data; struct obd_device *obd = m->private; @@ -1447,4 +1317,4 @@ lprocfs_pinger_recov_seq_write(struct file *file, const char *buffer, } EXPORT_SYMBOL(lprocfs_pinger_recov_seq_write); -#endif /* LPROCFS */ +#endif /* CONFIG_PROC_FS */