Whamcloud - gitweb
LU-9480 lnet: add enhanced statistics
[fs/lustre-release.git] / lnet / lnet / net_fault.c
index 661cc5d..89b1eb4 100644 (file)
@@ -21,7 +21,7 @@
  * GPL HEADER END
  */
 /*
- * Copyright (c) 2014, Intel Corporation.
+ * Copyright (c) 2014, 2016, Intel Corporation.
  */
 /*
  * This file is part of Lustre, http://www.lustre.org/
@@ -37,7 +37,7 @@
 #define DEBUG_SUBSYSTEM S_LNET
 
 #include <lnet/lib-lnet.h>
-#include <lnet/lnetctl.h>
+#include <uapi/linux/lnet/lnetctl.h>
 
 #define LNET_MSG_MASK          (LNET_PUT_BIT | LNET_ACK_BIT | \
                                 LNET_GET_BIT | LNET_REPLY_BIT)
@@ -326,17 +326,18 @@ drop_rule_match(struct lnet_drop_rule *rule, lnet_nid_t src,
                        rule->dr_time_base += cfs_time_seconds(attr->u.drop.
                                                               da_interval);
 
-                       CDEBUG(D_NET, "Drop Rule %s->%s: next drop : "
-                                     CFS_TIME_T"\n",
-                                     libcfs_nid2str(attr->fa_src),
-                                     libcfs_nid2str(attr->fa_dst),
-                                     rule->dr_drop_time);
+                       CDEBUG(D_NET, "Drop Rule %s->%s: next drop : %ld\n",
+                              libcfs_nid2str(attr->fa_src),
+                              libcfs_nid2str(attr->fa_dst),
+                              rule->dr_drop_time);
                }
 
        } else { /* rate based drop */
-               drop = rule->dr_stat.fs_count++ == rule->dr_drop_at;
+               __u64 count;
 
-               if (rule->dr_stat.fs_count % attr->u.drop.da_rate == 0) {
+               drop = rule->dr_stat.fs_count++ == rule->dr_drop_at;
+               count = rule->dr_stat.fs_count;
+               if (do_div(count, attr->u.drop.da_rate) == 0) {
                        rule->dr_drop_at = rule->dr_stat.fs_count +
                                           cfs_rand() % attr->u.drop.da_rate;
                        CDEBUG(D_NET, "Drop Rule %s->%s: next drop: %lu\n",
@@ -358,7 +359,7 @@ drop_rule_match(struct lnet_drop_rule *rule, lnet_nid_t src,
  * Check if message from \a src to \a dst can match any existed drop rule
  */
 bool
-lnet_drop_rule_match(lnet_hdr_t *hdr)
+lnet_drop_rule_match(struct lnet_hdr *hdr)
 {
        struct lnet_drop_rule   *rule;
        lnet_nid_t               src = le64_to_cpu(hdr->src_nid);
@@ -494,17 +495,19 @@ delay_rule_match(struct lnet_delay_rule *rule, lnet_nid_t src,
                        rule->dl_time_base += cfs_time_seconds(attr->u.delay.
                                                               la_interval);
 
-                       CDEBUG(D_NET, "Delay Rule %s->%s: next delay : "
-                                     CFS_TIME_T"\n",
-                                     libcfs_nid2str(attr->fa_src),
-                                     libcfs_nid2str(attr->fa_dst),
-                                     rule->dl_delay_time);
+                       CDEBUG(D_NET, "Delay Rule %s->%s: next delay : %ld\n",
+                              libcfs_nid2str(attr->fa_src),
+                              libcfs_nid2str(attr->fa_dst),
+                              rule->dl_delay_time);
                }
 
        } else { /* rate based delay */
+               __u64 count;
+
                delay = rule->dl_stat.fs_count++ == rule->dl_delay_at;
                /* generate the next random rate sequence */
-               if (rule->dl_stat.fs_count % attr->u.delay.la_rate == 0) {
+               count = rule->dl_stat.fs_count;
+               if (do_div(count, attr->u.delay.la_rate) == 0) {
                        rule->dl_delay_at = rule->dl_stat.fs_count +
                                            cfs_rand() % attr->u.delay.la_rate;
                        CDEBUG(D_NET, "Delay Rule %s->%s: next delay: %lu\n",
@@ -539,7 +542,7 @@ delay_rule_match(struct lnet_delay_rule *rule, lnet_nid_t src,
  * will be delayed if there is a match.
  */
 bool
-lnet_delay_rule_match_locked(lnet_hdr_t *hdr, struct lnet_msg *msg)
+lnet_delay_rule_match_locked(struct lnet_hdr *hdr, struct lnet_msg *msg)
 {
        struct lnet_delay_rule  *rule;
        lnet_nid_t               src = le64_to_cpu(hdr->src_nid);
@@ -612,8 +615,9 @@ delayed_msg_process(struct list_head *msg_list, bool drop)
 
                msg = list_entry(msg_list->next, struct lnet_msg, msg_list);
                LASSERT(msg->msg_rxpeer != NULL);
+               LASSERT(msg->msg_rxni != NULL);
 
-               ni = msg->msg_rxpeer->lp_ni;
+               ni = msg->msg_rxni;
                cpt = msg->msg_rx_cpt;
 
                list_del_init(&msg->msg_list);
@@ -641,8 +645,9 @@ delayed_msg_process(struct list_head *msg_list, bool drop)
                        }
                }
 
-               lnet_drop_message(ni, cpt, msg->msg_private, msg->msg_len);
-               lnet_finalize(ni, msg, rc);
+               lnet_drop_message(ni, cpt, msg->msg_private, msg->msg_len,
+                                 msg->msg_type);
+               lnet_finalize(msg, rc);
        }
 }
 
@@ -725,7 +730,7 @@ int
 lnet_delay_rule_add(struct lnet_fault_attr *attr)
 {
        struct lnet_delay_rule *rule;
-       int                     rc = 0;
+       int                     rc = 0;
        ENTRY;
 
        if (!((attr->u.delay.la_rate == 0) ^
@@ -818,10 +823,10 @@ int
 lnet_delay_rule_del(lnet_nid_t src, lnet_nid_t dst, bool shutdown)
 {
        struct lnet_delay_rule *rule;
-       struct lnet_delay_rule  *tmp;
-       struct list_head        rule_list;
+       struct lnet_delay_rule  *tmp;
+       struct list_head        rule_list;
        struct list_head        msg_list;
-       int                     n = 0;
+       int                     n = 0;
        bool                    cleanup;
        ENTRY;
 
@@ -888,9 +893,9 @@ lnet_delay_rule_list(int pos, struct lnet_fault_attr *attr,
                    struct lnet_fault_stat *stat)
 {
        struct lnet_delay_rule *rule;
-       int                     cpt;
-       int                     i = 0;
-       int                     rc = -ENOENT;
+       int                     cpt;
+       int                     i = 0;
+       int                     rc = -ENOENT;
        ENTRY;
 
        cpt = lnet_net_lock_current();
@@ -917,7 +922,7 @@ void
 lnet_delay_rule_reset(void)
 {
        struct lnet_delay_rule *rule;
-       int                     cpt;
+       int                     cpt;
        ENTRY;
 
        cpt = lnet_net_lock_current();