X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Finclude%2Flustre_nrs_tbf.h;h=0e5c929b321d42a5ea2616e6342ee03cd1cbdd22;hb=a5a7890093ea2509db15f8aa8a8c9d9c86133209;hp=df80599e19e4ff1bb85832850183d2b513533db5;hpb=1f1d3a376d488d715dd1b0c94d5b66ea05c1e6ca;p=fs%2Flustre-release.git diff --git a/lustre/include/lustre_nrs_tbf.h b/lustre/include/lustre_nrs_tbf.h index df80599..0e5c929 100644 --- a/lustre/include/lustre_nrs_tbf.h +++ b/lustre/include/lustre_nrs_tbf.h @@ -6,22 +6,22 @@ * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 only, * as published by the Free Software Foundation. - + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License version 2 for more details. A copy is - * included in the COPYING file that accompanied this code. - + * GNU General Public License version 2 for more details. + * * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * along with this program; If not, see + * http://www.gnu.org/licenses/gpl-2.0.html * * GPL HEADER END */ /* * Copyright (C) 2013 DataDirect Networks, Inc. * + * Copyright (c) 2014, Intel Corporation. */ /* * @@ -31,7 +31,6 @@ #ifndef _LUSTRE_NRS_TBF_H #define _LUSTRE_NRS_TBF_H -#include /* \name tbf * @@ -56,10 +55,12 @@ struct nrs_tbf_client { /** NID of the client. */ lnet_nid_t tc_nid; /** Jobid of the client. */ - char tc_jobid[JOBSTATS_JOBID_SIZE]; + char tc_jobid[LUSTRE_JOBID_SIZE]; /** Reference number of the client. */ atomic_t tc_ref; - /** Likage to rule. */ + /** Lock to protect rule and linkage. */ + spinlock_t tc_rule_lock; + /** Linkage to rule. */ struct list_head tc_linkage; /** Pointer to rule. */ struct nrs_tbf_rule *tc_rule; @@ -78,7 +79,7 @@ struct nrs_tbf_client { /** List of queued requests. */ struct list_head tc_list; /** Node in binary heap. */ - cfs_binheap_node_t tc_node; + struct cfs_binheap_node tc_node; /** Whether the client is in heap. */ bool tc_in_heap; /** Sequence of the newest rule. */ @@ -116,6 +117,8 @@ struct nrs_tbf_rule { __u64 tr_nsecs; /** Token bucket depth. */ __u64 tr_depth; + /** Lock to protect the list of clients. */ + spinlock_t tr_rule_lock; /** List of client. */ struct list_head tr_cli_list; /** Flags of the rule. */ @@ -147,6 +150,7 @@ struct nrs_tbf_ops { #define NRS_TBF_TYPE_JOBID "jobid" #define NRS_TBF_TYPE_NID "nid" #define NRS_TBF_TYPE_MAX_LEN 20 +#define NRS_TBF_FLAG_INVALID 0 #define NRS_TBF_FLAG_JOBID 0x0000001 #define NRS_TBF_FLAG_NID 0x0000002 @@ -197,11 +201,11 @@ struct nrs_tbf_head { /** * Heap of queues. */ - cfs_binheap_t *th_binheap; + struct cfs_binheap *th_binheap; /** * Hash of clients. */ - cfs_hash_t *th_cli_hash; + struct cfs_hash *th_cli_hash; /** * Type of TBF policy. */ @@ -223,19 +227,28 @@ struct nrs_tbf_head { enum nrs_tbf_cmd_type { NRS_CTL_TBF_START_RULE = 0, NRS_CTL_TBF_STOP_RULE, - NRS_CTL_TBF_CHANGE_RATE, + NRS_CTL_TBF_CHANGE_RULE, }; struct nrs_tbf_cmd { - enum nrs_tbf_cmd_type tc_cmd; - char *tc_name; - __u64 tc_rpc_rate; - struct list_head tc_nids; - char *tc_nids_str; - struct list_head tc_jobids; - char *tc_jobids_str; - __u32 tc_valid_types; - __u32 tc_rule_flags; + enum nrs_tbf_cmd_type tc_cmd; + char *tc_name; + union { + struct nrs_tbf_cmd_start { + __u64 ts_rpc_rate; + struct list_head ts_nids; + char *ts_nids_str; + struct list_head ts_jobids; + char *ts_jobids_str; + __u32 ts_valid_type; + __u32 ts_rule_flags; + char *ts_next_name; + } tc_start; + struct nrs_tbf_cmd_change { + __u64 tc_rpc_rate; + char *tc_next_name; + } tc_change; + } u; }; struct nrs_tbf_req { @@ -261,6 +274,10 @@ enum nrs_ctl_tbf { * Write the the data of a TBF policy. */ NRS_CTL_TBF_WR_RULE, + /** + * Read the TBF policy type preset by proc entry "nrs_policies". + */ + NRS_CTL_TBF_RD_TYPE_FLAG, }; /** @} tbf */