}
} 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",
}
} 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",