X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fptlrpc%2Fnrs_crr.c;h=31a0629e0358fded7f96ccc5d3bfaf9f11225164;hb=6030d0cfb15bfa4cfd7aaee4e3c2a34746424dd2;hp=1d3259d33a37dbfd273d5478a4afb7cd0b2f9381;hpb=46487b52695829f7befc1c382517ca2b4076453d;p=fs%2Flustre-release.git diff --git a/lustre/ptlrpc/nrs_crr.c b/lustre/ptlrpc/nrs_crr.c index 1d3259d..31a0629 100644 --- a/lustre/ptlrpc/nrs_crr.c +++ b/lustre/ptlrpc/nrs_crr.c @@ -20,7 +20,7 @@ * GPL HEADER END */ /* - * Copyright (c) 2011 Intel Corporation + * Copyright (c) 2013, 2017, Intel Corporation. * * Copyright 2012 Xyratex Technology Limited */ @@ -41,9 +41,6 @@ #ifdef HAVE_SERVER_SUPPORT #define DEBUG_SUBSYSTEM S_RPC -#ifndef __KERNEL__ -#include -#endif #include #include #include @@ -75,7 +72,8 @@ * \retval 0 e1 > e2 * \retval 1 e1 <= e2 */ -static int crrn_req_compare(cfs_binheap_node_t *e1, cfs_binheap_node_t *e2) +static int +crrn_req_compare(struct cfs_binheap_node *e1, struct cfs_binheap_node *e2) { struct ptlrpc_nrs_request *nrq1; struct ptlrpc_nrs_request *nrq2; @@ -91,7 +89,7 @@ static int crrn_req_compare(cfs_binheap_node_t *e1, cfs_binheap_node_t *e2) return nrq1->nr_u.crr.cr_sequence < nrq2->nr_u.crr.cr_sequence; } -static cfs_binheap_ops_t nrs_crrn_heap_ops = { +static struct cfs_binheap_ops nrs_crrn_heap_ops = { .hop_enter = NULL, .hop_exit = NULL, .hop_compare = crrn_req_compare, @@ -106,7 +104,7 @@ static cfs_binheap_ops_t nrs_crrn_heap_ops = { #define NRS_NID_BKT_BITS 8 #define NRS_NID_BITS 16 -static unsigned nrs_crrn_hop_hash(cfs_hash_t *hs, const void *key, +static unsigned nrs_crrn_hop_hash(struct cfs_hash *hs, const void *key, unsigned mask) { return cfs_hash_djb2_hash(key, sizeof(lnet_nid_t), mask); @@ -134,7 +132,7 @@ static void *nrs_crrn_hop_object(struct hlist_node *hnode) return hlist_entry(hnode, struct nrs_crrn_client, cc_hnode); } -static void nrs_crrn_hop_get(cfs_hash_t *hs, struct hlist_node *hnode) +static void nrs_crrn_hop_get(struct cfs_hash *hs, struct hlist_node *hnode) { struct nrs_crrn_client *cli = hlist_entry(hnode, struct nrs_crrn_client, @@ -142,7 +140,7 @@ static void nrs_crrn_hop_get(cfs_hash_t *hs, struct hlist_node *hnode) atomic_inc(&cli->cc_ref); } -static void nrs_crrn_hop_put(cfs_hash_t *hs, struct hlist_node *hnode) +static void nrs_crrn_hop_put(struct cfs_hash *hs, struct hlist_node *hnode) { struct nrs_crrn_client *cli = hlist_entry(hnode, struct nrs_crrn_client, @@ -150,7 +148,7 @@ static void nrs_crrn_hop_put(cfs_hash_t *hs, struct hlist_node *hnode) atomic_dec(&cli->cc_ref); } -static void nrs_crrn_hop_exit(cfs_hash_t *hs, struct hlist_node *hnode) +static void nrs_crrn_hop_exit(struct cfs_hash *hs, struct hlist_node *hnode) { struct nrs_crrn_client *cli = hlist_entry(hnode, struct nrs_crrn_client, @@ -162,7 +160,7 @@ static void nrs_crrn_hop_exit(cfs_hash_t *hs, struct hlist_node *hnode) OBD_FREE_PTR(cli); } -static cfs_hash_ops_t nrs_crrn_hash_ops = { +static struct cfs_hash_ops nrs_crrn_hash_ops = { .hs_hash = nrs_crrn_hop_hash, .hs_keycmp = nrs_crrn_hop_keycmp, .hs_key = nrs_crrn_hop_key, @@ -196,7 +194,7 @@ static int nrs_crrn_start(struct ptlrpc_nrs_policy *policy, char *arg) nrs_pol2cptab(policy), nrs_pol2cptid(policy)); if (net->cn_binheap == NULL) - GOTO(failed, rc = -ENOMEM); + GOTO(out_net, rc = -ENOMEM); net->cn_cli_hash = cfs_hash_create("nrs_crrn_nid_hash", NRS_NID_BITS, NRS_NID_BITS, @@ -206,7 +204,7 @@ static int nrs_crrn_start(struct ptlrpc_nrs_policy *policy, char *arg) &nrs_crrn_hash_ops, CFS_HASH_RW_BKTLOCK); if (net->cn_cli_hash == NULL) - GOTO(failed, rc = -ENOMEM); + GOTO(out_binheap, rc = -ENOMEM); /** * Set default quantum value to max_rpcs_in_flight for non-MDS OSCs; @@ -225,10 +223,9 @@ static int nrs_crrn_start(struct ptlrpc_nrs_policy *policy, char *arg) RETURN(rc); -failed: - if (net->cn_binheap != NULL) - cfs_binheap_destroy(net->cn_binheap); - +out_binheap: + cfs_binheap_destroy(net->cn_binheap); +out_net: OBD_FREE_PTR(net); RETURN(rc); @@ -273,8 +270,9 @@ static void nrs_crrn_stop(struct ptlrpc_nrs_policy *policy) * \retval 0 operation carried out successfully * \retval -ve error */ -int nrs_crrn_ctl(struct ptlrpc_nrs_policy *policy, enum ptlrpc_nrs_ctl opc, - void *arg) +static int nrs_crrn_ctl(struct ptlrpc_nrs_policy *policy, + enum ptlrpc_nrs_ctl opc, + void *arg) { assert_spin_locked(&policy->pol_nrs->nrs_lock); @@ -329,10 +327,10 @@ int nrs_crrn_ctl(struct ptlrpc_nrs_policy *policy, enum ptlrpc_nrs_ctl opc, * * \see nrs_resource_get_safe() */ -int nrs_crrn_res_get(struct ptlrpc_nrs_policy *policy, - struct ptlrpc_nrs_request *nrq, - const struct ptlrpc_nrs_resource *parent, - struct ptlrpc_nrs_resource **resp, bool moving_req) +static int nrs_crrn_res_get(struct ptlrpc_nrs_policy *policy, + struct ptlrpc_nrs_request *nrq, + const struct ptlrpc_nrs_resource *parent, + struct ptlrpc_nrs_resource **resp, bool moving_req) { struct nrs_crrn_net *net; struct nrs_crrn_client *cli; @@ -416,7 +414,7 @@ struct ptlrpc_nrs_request *nrs_crrn_req_get(struct ptlrpc_nrs_policy *policy, bool peek, bool force) { struct nrs_crrn_net *net = policy->pol_private; - cfs_binheap_node_t *node = cfs_binheap_root(net->cn_binheap); + struct cfs_binheap_node *node = cfs_binheap_root(net->cn_binheap); struct ptlrpc_nrs_request *nrq; nrq = unlikely(node == NULL) ? NULL : @@ -438,7 +436,7 @@ struct ptlrpc_nrs_request *nrs_crrn_req_get(struct ptlrpc_nrs_policy *policy, CDEBUG(D_RPCTRACE, "NRS: starting to handle %s request from %s, with round " - LPU64"\n", NRS_POL_NAME_CRRN, + "%llu\n", NRS_POL_NAME_CRRN, libcfs_id2str(req->rq_peer), nrq->nr_u.crr.cr_round); /** Peek at the next request to be served */ @@ -578,7 +576,7 @@ static void nrs_crrn_req_del(struct ptlrpc_nrs_policy *policy, */ if (unlikely(is_root)) { /** Peek at the next request to be served */ - cfs_binheap_node_t *node = cfs_binheap_root(net->cn_binheap); + struct cfs_binheap_node *node = cfs_binheap_root(net->cn_binheap); /** No more requests */ if (unlikely(node == NULL)) { @@ -607,15 +605,13 @@ static void nrs_crrn_req_stop(struct ptlrpc_nrs_policy *policy, rq_nrq); CDEBUG(D_RPCTRACE, - "NRS: finished handling %s request from %s, with round "LPU64 + "NRS: finished handling %s request from %s, with round %llu" "\n", NRS_POL_NAME_CRRN, libcfs_id2str(req->rq_peer), nrq->nr_u.crr.cr_round); } -#ifdef LPROCFS - /** - * lprocfs interface + * debugfs interface */ /** @@ -702,7 +698,8 @@ no_hp: */ static ssize_t ptlrpc_lprocfs_nrs_crrn_quantum_seq_write(struct file *file, - const char *buffer, size_t count, + const char __user *buffer, + size_t count, loff_t *off) { struct ptlrpc_service *svc = ((struct seq_file *)file->private_data)->private; @@ -732,7 +729,9 @@ ptlrpc_lprocfs_nrs_crrn_quantum_seq_write(struct file *file, val = lprocfs_find_named_value(kernbuf, NRS_LPROCFS_QUANTUM_NAME_REG, &count_copy); if (val != kernbuf) { - quantum_reg = simple_strtol(val, NULL, 10); + rc = kstrtol(val, 10, &quantum_reg); + if (rc) + return rc; queue |= PTLRPC_NRS_QUEUE_REG; } @@ -748,7 +747,9 @@ ptlrpc_lprocfs_nrs_crrn_quantum_seq_write(struct file *file, if (!nrs_svc_has_hp(svc)) return -ENODEV; - quantum_hp = simple_strtol(val, NULL, 10); + rc = kstrtol(val, 10, &quantum_hp); + if (rc) + return rc; queue |= PTLRPC_NRS_QUEUE_HP; } @@ -758,10 +759,9 @@ ptlrpc_lprocfs_nrs_crrn_quantum_seq_write(struct file *file, * value */ if (queue == 0) { - if (!isdigit(kernbuf[0])) - return -EINVAL; - - quantum_reg = simple_strtol(kernbuf, NULL, 10); + rc = kstrtol(kernbuf, 10, &quantum_reg); + if (rc) + return rc; queue = PTLRPC_NRS_QUEUE_REG; @@ -809,7 +809,8 @@ ptlrpc_lprocfs_nrs_crrn_quantum_seq_write(struct file *file, return rc == -ENODEV && rc2 == -ENODEV ? -ENODEV : count; } -LPROC_SEQ_FOPS(ptlrpc_lprocfs_nrs_crrn_quantum); + +LDEBUGFS_SEQ_FOPS(ptlrpc_lprocfs_nrs_crrn_quantum); /** * Initializes a CRR-N policy's lprocfs interface for service \a svc @@ -819,38 +820,22 @@ LPROC_SEQ_FOPS(ptlrpc_lprocfs_nrs_crrn_quantum); * \retval 0 success * \retval != 0 error */ -int nrs_crrn_lprocfs_init(struct ptlrpc_service *svc) +static int nrs_crrn_lprocfs_init(struct ptlrpc_service *svc) { - struct lprocfs_seq_vars nrs_crrn_lprocfs_vars[] = { + struct lprocfs_vars nrs_crrn_lprocfs_vars[] = { { .name = "nrs_crrn_quantum", .fops = &ptlrpc_lprocfs_nrs_crrn_quantum_fops, .data = svc }, { NULL } }; - if (svc->srv_procroot == NULL) + if (IS_ERR_OR_NULL(svc->srv_debugfs_entry)) return 0; - return lprocfs_seq_add_vars(svc->srv_procroot, nrs_crrn_lprocfs_vars, - NULL); + return ldebugfs_add_vars(svc->srv_debugfs_entry, nrs_crrn_lprocfs_vars, NULL); } /** - * Cleans up a CRR-N policy's lprocfs interface for service \a svc - * - * \param[in] svc the service - */ -void nrs_crrn_lprocfs_fini(struct ptlrpc_service *svc) -{ - if (svc->srv_procroot == NULL) - return; - - lprocfs_remove_proc_entry("nrs_crrn_quantum", svc->srv_procroot); -} - -#endif /* LPROCFS */ - -/** * CRR-N policy operations */ static const struct ptlrpc_nrs_pol_ops nrs_crrn_ops = { @@ -863,10 +848,7 @@ static const struct ptlrpc_nrs_pol_ops nrs_crrn_ops = { .op_req_enqueue = nrs_crrn_req_add, .op_req_dequeue = nrs_crrn_req_del, .op_req_stop = nrs_crrn_req_stop, -#ifdef LPROCFS .op_lprocfs_init = nrs_crrn_lprocfs_init, - .op_lprocfs_fini = nrs_crrn_lprocfs_fini, -#endif }; /**