diff options
| -rw-r--r-- | include/linux/gen_stats.h | 5 | ||||
| -rw-r--r-- | include/net/act_api.h | 2 | ||||
| -rw-r--r-- | include/net/gen_stats.h | 10 | ||||
| -rw-r--r-- | include/net/netfilter/xt_rateest.h | 2 | ||||
| -rw-r--r-- | include/net/sch_generic.h | 2 | ||||
| -rw-r--r-- | net/core/gen_estimator.c | 12 | ||||
| -rw-r--r-- | net/core/gen_stats.c | 11 | ||||
| -rw-r--r-- | net/netfilter/xt_RATEEST.c | 2 | ||||
| -rw-r--r-- | net/sched/sch_atm.c | 2 | ||||
| -rw-r--r-- | net/sched/sch_cbq.c | 2 | ||||
| -rw-r--r-- | net/sched/sch_drr.c | 2 | ||||
| -rw-r--r-- | net/sched/sch_hfsc.c | 2 | ||||
| -rw-r--r-- | net/sched/sch_htb.c | 2 |
13 files changed, 33 insertions, 23 deletions
diff --git a/include/linux/gen_stats.h b/include/linux/gen_stats.h index 0ffa41df0ee8..710e901085d0 100644 --- a/include/linux/gen_stats.h +++ b/include/linux/gen_stats.h | |||
| @@ -22,6 +22,11 @@ struct gnet_stats_basic | |||
| 22 | { | 22 | { |
| 23 | __u64 bytes; | 23 | __u64 bytes; |
| 24 | __u32 packets; | 24 | __u32 packets; |
| 25 | }; | ||
| 26 | struct gnet_stats_basic_packed | ||
| 27 | { | ||
| 28 | __u64 bytes; | ||
| 29 | __u32 packets; | ||
| 25 | } __attribute__ ((packed)); | 30 | } __attribute__ ((packed)); |
| 26 | 31 | ||
| 27 | /** | 32 | /** |
diff --git a/include/net/act_api.h b/include/net/act_api.h index 565eed8fe496..c05fd717c588 100644 --- a/include/net/act_api.h +++ b/include/net/act_api.h | |||
| @@ -16,7 +16,7 @@ struct tcf_common { | |||
| 16 | u32 tcfc_capab; | 16 | u32 tcfc_capab; |
| 17 | int tcfc_action; | 17 | int tcfc_action; |
| 18 | struct tcf_t tcfc_tm; | 18 | struct tcf_t tcfc_tm; |
| 19 | struct gnet_stats_basic tcfc_bstats; | 19 | struct gnet_stats_basic_packed tcfc_bstats; |
| 20 | struct gnet_stats_queue tcfc_qstats; | 20 | struct gnet_stats_queue tcfc_qstats; |
| 21 | struct gnet_stats_rate_est tcfc_rate_est; | 21 | struct gnet_stats_rate_est tcfc_rate_est; |
| 22 | spinlock_t tcfc_lock; | 22 | spinlock_t tcfc_lock; |
diff --git a/include/net/gen_stats.h b/include/net/gen_stats.h index d136b5240ef2..c1488553e349 100644 --- a/include/net/gen_stats.h +++ b/include/net/gen_stats.h | |||
| @@ -28,7 +28,7 @@ extern int gnet_stats_start_copy_compat(struct sk_buff *skb, int type, | |||
| 28 | spinlock_t *lock, struct gnet_dump *d); | 28 | spinlock_t *lock, struct gnet_dump *d); |
| 29 | 29 | ||
| 30 | extern int gnet_stats_copy_basic(struct gnet_dump *d, | 30 | extern int gnet_stats_copy_basic(struct gnet_dump *d, |
| 31 | struct gnet_stats_basic *b); | 31 | struct gnet_stats_basic_packed *b); |
| 32 | extern int gnet_stats_copy_rate_est(struct gnet_dump *d, | 32 | extern int gnet_stats_copy_rate_est(struct gnet_dump *d, |
| 33 | struct gnet_stats_rate_est *r); | 33 | struct gnet_stats_rate_est *r); |
| 34 | extern int gnet_stats_copy_queue(struct gnet_dump *d, | 34 | extern int gnet_stats_copy_queue(struct gnet_dump *d, |
| @@ -37,14 +37,14 @@ extern int gnet_stats_copy_app(struct gnet_dump *d, void *st, int len); | |||
| 37 | 37 | ||
| 38 | extern int gnet_stats_finish_copy(struct gnet_dump *d); | 38 | extern int gnet_stats_finish_copy(struct gnet_dump *d); |
| 39 | 39 | ||
| 40 | extern int gen_new_estimator(struct gnet_stats_basic *bstats, | 40 | extern int gen_new_estimator(struct gnet_stats_basic_packed *bstats, |
| 41 | struct gnet_stats_rate_est *rate_est, | 41 | struct gnet_stats_rate_est *rate_est, |
| 42 | spinlock_t *stats_lock, struct nlattr *opt); | 42 | spinlock_t *stats_lock, struct nlattr *opt); |
| 43 | extern void gen_kill_estimator(struct gnet_stats_basic *bstats, | 43 | extern void gen_kill_estimator(struct gnet_stats_basic_packed *bstats, |
| 44 | struct gnet_stats_rate_est *rate_est); | 44 | struct gnet_stats_rate_est *rate_est); |
| 45 | extern int gen_replace_estimator(struct gnet_stats_basic *bstats, | 45 | extern int gen_replace_estimator(struct gnet_stats_basic_packed *bstats, |
| 46 | struct gnet_stats_rate_est *rate_est, | 46 | struct gnet_stats_rate_est *rate_est, |
| 47 | spinlock_t *stats_lock, struct nlattr *opt); | 47 | spinlock_t *stats_lock, struct nlattr *opt); |
| 48 | extern bool gen_estimator_active(const struct gnet_stats_basic *bstats, | 48 | extern bool gen_estimator_active(const struct gnet_stats_basic_packed *bstats, |
| 49 | const struct gnet_stats_rate_est *rate_est); | 49 | const struct gnet_stats_rate_est *rate_est); |
| 50 | #endif | 50 | #endif |
diff --git a/include/net/netfilter/xt_rateest.h b/include/net/netfilter/xt_rateest.h index 65d594dffbff..ddbf37e19616 100644 --- a/include/net/netfilter/xt_rateest.h +++ b/include/net/netfilter/xt_rateest.h | |||
| @@ -8,7 +8,7 @@ struct xt_rateest { | |||
| 8 | spinlock_t lock; | 8 | spinlock_t lock; |
| 9 | struct gnet_estimator params; | 9 | struct gnet_estimator params; |
| 10 | struct gnet_stats_rate_est rstats; | 10 | struct gnet_stats_rate_est rstats; |
| 11 | struct gnet_stats_basic bstats; | 11 | struct gnet_stats_basic_packed bstats; |
| 12 | }; | 12 | }; |
| 13 | 13 | ||
| 14 | extern struct xt_rateest *xt_rateest_lookup(const char *name); | 14 | extern struct xt_rateest *xt_rateest_lookup(const char *name); |
diff --git a/include/net/sch_generic.h b/include/net/sch_generic.h index 964ffa0d8815..5482e9582f55 100644 --- a/include/net/sch_generic.h +++ b/include/net/sch_generic.h | |||
| @@ -72,7 +72,7 @@ struct Qdisc | |||
| 72 | */ | 72 | */ |
| 73 | unsigned long state; | 73 | unsigned long state; |
| 74 | struct sk_buff_head q; | 74 | struct sk_buff_head q; |
| 75 | struct gnet_stats_basic bstats; | 75 | struct gnet_stats_basic_packed bstats; |
| 76 | struct gnet_stats_queue qstats; | 76 | struct gnet_stats_queue qstats; |
| 77 | }; | 77 | }; |
| 78 | 78 | ||
diff --git a/net/core/gen_estimator.c b/net/core/gen_estimator.c index 78e5bfc454ae..493775f4f2f1 100644 --- a/net/core/gen_estimator.c +++ b/net/core/gen_estimator.c | |||
| @@ -81,7 +81,7 @@ | |||
| 81 | struct gen_estimator | 81 | struct gen_estimator |
| 82 | { | 82 | { |
| 83 | struct list_head list; | 83 | struct list_head list; |
| 84 | struct gnet_stats_basic *bstats; | 84 | struct gnet_stats_basic_packed *bstats; |
| 85 | struct gnet_stats_rate_est *rate_est; | 85 | struct gnet_stats_rate_est *rate_est; |
| 86 | spinlock_t *stats_lock; | 86 | spinlock_t *stats_lock; |
| 87 | int ewma_log; | 87 | int ewma_log; |
| @@ -165,7 +165,7 @@ static void gen_add_node(struct gen_estimator *est) | |||
| 165 | } | 165 | } |
| 166 | 166 | ||
| 167 | static | 167 | static |
| 168 | struct gen_estimator *gen_find_node(const struct gnet_stats_basic *bstats, | 168 | struct gen_estimator *gen_find_node(const struct gnet_stats_basic_packed *bstats, |
| 169 | const struct gnet_stats_rate_est *rate_est) | 169 | const struct gnet_stats_rate_est *rate_est) |
| 170 | { | 170 | { |
| 171 | struct rb_node *p = est_root.rb_node; | 171 | struct rb_node *p = est_root.rb_node; |
| @@ -202,7 +202,7 @@ struct gen_estimator *gen_find_node(const struct gnet_stats_basic *bstats, | |||
| 202 | * | 202 | * |
| 203 | * NOTE: Called under rtnl_mutex | 203 | * NOTE: Called under rtnl_mutex |
| 204 | */ | 204 | */ |
| 205 | int gen_new_estimator(struct gnet_stats_basic *bstats, | 205 | int gen_new_estimator(struct gnet_stats_basic_packed *bstats, |
| 206 | struct gnet_stats_rate_est *rate_est, | 206 | struct gnet_stats_rate_est *rate_est, |
| 207 | spinlock_t *stats_lock, | 207 | spinlock_t *stats_lock, |
| 208 | struct nlattr *opt) | 208 | struct nlattr *opt) |
| @@ -262,7 +262,7 @@ static void __gen_kill_estimator(struct rcu_head *head) | |||
| 262 | * | 262 | * |
| 263 | * NOTE: Called under rtnl_mutex | 263 | * NOTE: Called under rtnl_mutex |
| 264 | */ | 264 | */ |
| 265 | void gen_kill_estimator(struct gnet_stats_basic *bstats, | 265 | void gen_kill_estimator(struct gnet_stats_basic_packed *bstats, |
| 266 | struct gnet_stats_rate_est *rate_est) | 266 | struct gnet_stats_rate_est *rate_est) |
| 267 | { | 267 | { |
| 268 | struct gen_estimator *e; | 268 | struct gen_estimator *e; |
| @@ -292,7 +292,7 @@ EXPORT_SYMBOL(gen_kill_estimator); | |||
| 292 | * | 292 | * |
| 293 | * Returns 0 on success or a negative error code. | 293 | * Returns 0 on success or a negative error code. |
| 294 | */ | 294 | */ |
| 295 | int gen_replace_estimator(struct gnet_stats_basic *bstats, | 295 | int gen_replace_estimator(struct gnet_stats_basic_packed *bstats, |
| 296 | struct gnet_stats_rate_est *rate_est, | 296 | struct gnet_stats_rate_est *rate_est, |
| 297 | spinlock_t *stats_lock, struct nlattr *opt) | 297 | spinlock_t *stats_lock, struct nlattr *opt) |
| 298 | { | 298 | { |
| @@ -308,7 +308,7 @@ EXPORT_SYMBOL(gen_replace_estimator); | |||
| 308 | * | 308 | * |
| 309 | * Returns true if estimator is active, and false if not. | 309 | * Returns true if estimator is active, and false if not. |
| 310 | */ | 310 | */ |
| 311 | bool gen_estimator_active(const struct gnet_stats_basic *bstats, | 311 | bool gen_estimator_active(const struct gnet_stats_basic_packed *bstats, |
| 312 | const struct gnet_stats_rate_est *rate_est) | 312 | const struct gnet_stats_rate_est *rate_est) |
| 313 | { | 313 | { |
| 314 | ASSERT_RTNL(); | 314 | ASSERT_RTNL(); |
diff --git a/net/core/gen_stats.c b/net/core/gen_stats.c index c3d0ffeac243..8569310268ab 100644 --- a/net/core/gen_stats.c +++ b/net/core/gen_stats.c | |||
| @@ -106,16 +106,21 @@ gnet_stats_start_copy(struct sk_buff *skb, int type, spinlock_t *lock, | |||
| 106 | * if the room in the socket buffer was not sufficient. | 106 | * if the room in the socket buffer was not sufficient. |
| 107 | */ | 107 | */ |
| 108 | int | 108 | int |
| 109 | gnet_stats_copy_basic(struct gnet_dump *d, struct gnet_stats_basic *b) | 109 | gnet_stats_copy_basic(struct gnet_dump *d, struct gnet_stats_basic_packed *b) |
| 110 | { | 110 | { |
| 111 | if (d->compat_tc_stats) { | 111 | if (d->compat_tc_stats) { |
| 112 | d->tc_stats.bytes = b->bytes; | 112 | d->tc_stats.bytes = b->bytes; |
| 113 | d->tc_stats.packets = b->packets; | 113 | d->tc_stats.packets = b->packets; |
| 114 | } | 114 | } |
| 115 | 115 | ||
| 116 | if (d->tail) | 116 | if (d->tail) { |
| 117 | return gnet_stats_copy(d, TCA_STATS_BASIC, b, sizeof(*b)); | 117 | struct gnet_stats_basic sb; |
| 118 | 118 | ||
| 119 | memset(&sb, 0, sizeof(sb)); | ||
| 120 | sb.bytes = b->bytes; | ||
| 121 | sb.packets = b->packets; | ||
| 122 | return gnet_stats_copy(d, TCA_STATS_BASIC, &sb, sizeof(sb)); | ||
| 123 | } | ||
| 119 | return 0; | 124 | return 0; |
| 120 | } | 125 | } |
| 121 | 126 | ||
diff --git a/net/netfilter/xt_RATEEST.c b/net/netfilter/xt_RATEEST.c index 43f5676b1af4..d80b8192e0d4 100644 --- a/net/netfilter/xt_RATEEST.c +++ b/net/netfilter/xt_RATEEST.c | |||
| @@ -74,7 +74,7 @@ static unsigned int | |||
| 74 | xt_rateest_tg(struct sk_buff *skb, const struct xt_target_param *par) | 74 | xt_rateest_tg(struct sk_buff *skb, const struct xt_target_param *par) |
| 75 | { | 75 | { |
| 76 | const struct xt_rateest_target_info *info = par->targinfo; | 76 | const struct xt_rateest_target_info *info = par->targinfo; |
| 77 | struct gnet_stats_basic *stats = &info->est->bstats; | 77 | struct gnet_stats_basic_packed *stats = &info->est->bstats; |
| 78 | 78 | ||
| 79 | spin_lock_bh(&info->est->lock); | 79 | spin_lock_bh(&info->est->lock); |
| 80 | stats->bytes += skb->len; | 80 | stats->bytes += skb->len; |
diff --git a/net/sched/sch_atm.c b/net/sched/sch_atm.c index 2a8b83af7c47..ab82f145f689 100644 --- a/net/sched/sch_atm.c +++ b/net/sched/sch_atm.c | |||
| @@ -49,7 +49,7 @@ struct atm_flow_data { | |||
| 49 | struct socket *sock; /* for closing */ | 49 | struct socket *sock; /* for closing */ |
| 50 | u32 classid; /* x:y type ID */ | 50 | u32 classid; /* x:y type ID */ |
| 51 | int ref; /* reference count */ | 51 | int ref; /* reference count */ |
| 52 | struct gnet_stats_basic bstats; | 52 | struct gnet_stats_basic_packed bstats; |
| 53 | struct gnet_stats_queue qstats; | 53 | struct gnet_stats_queue qstats; |
| 54 | struct atm_flow_data *next; | 54 | struct atm_flow_data *next; |
| 55 | struct atm_flow_data *excess; /* flow for excess traffic; | 55 | struct atm_flow_data *excess; /* flow for excess traffic; |
diff --git a/net/sched/sch_cbq.c b/net/sched/sch_cbq.c index 23a167670fd5..d5798e17a832 100644 --- a/net/sched/sch_cbq.c +++ b/net/sched/sch_cbq.c | |||
| @@ -128,7 +128,7 @@ struct cbq_class | |||
| 128 | long avgidle; | 128 | long avgidle; |
| 129 | long deficit; /* Saved deficit for WRR */ | 129 | long deficit; /* Saved deficit for WRR */ |
| 130 | psched_time_t penalized; | 130 | psched_time_t penalized; |
| 131 | struct gnet_stats_basic bstats; | 131 | struct gnet_stats_basic_packed bstats; |
| 132 | struct gnet_stats_queue qstats; | 132 | struct gnet_stats_queue qstats; |
| 133 | struct gnet_stats_rate_est rate_est; | 133 | struct gnet_stats_rate_est rate_est; |
| 134 | struct tc_cbq_xstats xstats; | 134 | struct tc_cbq_xstats xstats; |
diff --git a/net/sched/sch_drr.c b/net/sched/sch_drr.c index 7597fe146866..12b2fb04b29b 100644 --- a/net/sched/sch_drr.c +++ b/net/sched/sch_drr.c | |||
| @@ -22,7 +22,7 @@ struct drr_class { | |||
| 22 | unsigned int refcnt; | 22 | unsigned int refcnt; |
| 23 | unsigned int filter_cnt; | 23 | unsigned int filter_cnt; |
| 24 | 24 | ||
| 25 | struct gnet_stats_basic bstats; | 25 | struct gnet_stats_basic_packed bstats; |
| 26 | struct gnet_stats_queue qstats; | 26 | struct gnet_stats_queue qstats; |
| 27 | struct gnet_stats_rate_est rate_est; | 27 | struct gnet_stats_rate_est rate_est; |
| 28 | struct list_head alist; | 28 | struct list_head alist; |
diff --git a/net/sched/sch_hfsc.c b/net/sched/sch_hfsc.c index 362c2811b2df..dad0144423da 100644 --- a/net/sched/sch_hfsc.c +++ b/net/sched/sch_hfsc.c | |||
| @@ -116,7 +116,7 @@ struct hfsc_class | |||
| 116 | struct Qdisc_class_common cl_common; | 116 | struct Qdisc_class_common cl_common; |
| 117 | unsigned int refcnt; /* usage count */ | 117 | unsigned int refcnt; /* usage count */ |
| 118 | 118 | ||
| 119 | struct gnet_stats_basic bstats; | 119 | struct gnet_stats_basic_packed bstats; |
| 120 | struct gnet_stats_queue qstats; | 120 | struct gnet_stats_queue qstats; |
| 121 | struct gnet_stats_rate_est rate_est; | 121 | struct gnet_stats_rate_est rate_est; |
| 122 | unsigned int level; /* class level in hierarchy */ | 122 | unsigned int level; /* class level in hierarchy */ |
diff --git a/net/sched/sch_htb.c b/net/sched/sch_htb.c index 88cd02626621..ec4d46399d59 100644 --- a/net/sched/sch_htb.c +++ b/net/sched/sch_htb.c | |||
| @@ -74,7 +74,7 @@ enum htb_cmode { | |||
| 74 | struct htb_class { | 74 | struct htb_class { |
| 75 | struct Qdisc_class_common common; | 75 | struct Qdisc_class_common common; |
| 76 | /* general class parameters */ | 76 | /* general class parameters */ |
| 77 | struct gnet_stats_basic bstats; | 77 | struct gnet_stats_basic_packed bstats; |
| 78 | struct gnet_stats_queue qstats; | 78 | struct gnet_stats_queue qstats; |
| 79 | struct gnet_stats_rate_est rate_est; | 79 | struct gnet_stats_rate_est rate_est; |
| 80 | struct tc_htb_xstats xstats; /* our special stats */ | 80 | struct tc_htb_xstats xstats; /* our special stats */ |
