[TCP]: Congestion control API update.
Do some simple changes to make congestion control API faster/cleaner. * use ktime_t rather than timeval * merge rtt sampling into existing ack callback this means one indirect call versus two per ack. * use flags bits to store options/settings Signed-off-by: Stephen Hemminger <shemminger@linux-foundation.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
65d1b4a7e7
commit
164891aadf
@@ -126,7 +126,7 @@ int tcp_set_default_congestion_control(const char *name)
|
||||
#endif
|
||||
|
||||
if (ca) {
|
||||
ca->non_restricted = 1; /* default is always allowed */
|
||||
ca->flags |= TCP_CONG_NON_RESTRICTED; /* default is always allowed */
|
||||
list_move(&ca->list, &tcp_cong_list);
|
||||
ret = 0;
|
||||
}
|
||||
@@ -181,7 +181,7 @@ void tcp_get_allowed_congestion_control(char *buf, size_t maxlen)
|
||||
*buf = '\0';
|
||||
rcu_read_lock();
|
||||
list_for_each_entry_rcu(ca, &tcp_cong_list, list) {
|
||||
if (!ca->non_restricted)
|
||||
if (!(ca->flags & TCP_CONG_NON_RESTRICTED))
|
||||
continue;
|
||||
offs += snprintf(buf + offs, maxlen - offs,
|
||||
"%s%s",
|
||||
@@ -212,16 +212,16 @@ int tcp_set_allowed_congestion_control(char *val)
|
||||
}
|
||||
}
|
||||
|
||||
/* pass 2 clear */
|
||||
/* pass 2 clear old values */
|
||||
list_for_each_entry_rcu(ca, &tcp_cong_list, list)
|
||||
ca->non_restricted = 0;
|
||||
ca->flags &= ~TCP_CONG_NON_RESTRICTED;
|
||||
|
||||
/* pass 3 mark as allowed */
|
||||
while ((name = strsep(&val, " ")) && *name) {
|
||||
ca = tcp_ca_find(name);
|
||||
WARN_ON(!ca);
|
||||
if (ca)
|
||||
ca->non_restricted = 1;
|
||||
ca->flags |= TCP_CONG_NON_RESTRICTED;
|
||||
}
|
||||
out:
|
||||
spin_unlock(&tcp_cong_list_lock);
|
||||
@@ -256,7 +256,7 @@ int tcp_set_congestion_control(struct sock *sk, const char *name)
|
||||
if (!ca)
|
||||
err = -ENOENT;
|
||||
|
||||
else if (!(ca->non_restricted || capable(CAP_NET_ADMIN)))
|
||||
else if (!((ca->flags & TCP_CONG_NON_RESTRICTED) || capable(CAP_NET_ADMIN)))
|
||||
err = -EPERM;
|
||||
|
||||
else if (!try_module_get(ca->owner))
|
||||
@@ -371,8 +371,8 @@ u32 tcp_reno_min_cwnd(const struct sock *sk)
|
||||
EXPORT_SYMBOL_GPL(tcp_reno_min_cwnd);
|
||||
|
||||
struct tcp_congestion_ops tcp_reno = {
|
||||
.flags = TCP_CONG_NON_RESTRICTED,
|
||||
.name = "reno",
|
||||
.non_restricted = 1,
|
||||
.owner = THIS_MODULE,
|
||||
.ssthresh = tcp_reno_ssthresh,
|
||||
.cong_avoid = tcp_reno_cong_avoid,
|
||||
|
Reference in New Issue
Block a user