Commit 5050bef8 authored by Neal Cardwell's avatar Neal Cardwell Committed by Alexei Starovoitov

tcp: Simplify tcp_set_congestion_control() load=false case

Simplify tcp_set_congestion_control() by removing the initialization
code path for the !load case.

There are only two call sites for tcp_set_congestion_control(). The
EBPF call site is the only one that passes load=false; it also passes
cap_net_admin=true. Because of that, the exact same behavior can be
achieved by removing the special if (!load) branch of the logic. Both
before and after this commit, the EBPF case will call
bpf_try_module_get(), and if that succeeds then call
tcp_reinit_congestion_control() or if that fails then return EBUSY.

Note that this returns the logic to a structure very similar to the
structure before:
  commit 91b5b21c ("bpf: Add support for changing congestion control")
except that the CAP_NET_ADMIN status is passed in as a function
argument.

This clean-up was suggested by Martin KaFai Lau.
Suggested-by: default avatarMartin KaFai Lau <kafai@fb.com>
Signed-off-by: default avatarNeal Cardwell <ncardwell@google.com>
Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
Cc: Lawrence Brakmo <brakmo@fb.com>
Cc: Eric Dumazet <edumazet@google.com>
Cc: Yuchung Cheng <ycheng@google.com>
Cc: Kevin Yang <yyd@google.com>
parent 5cdc744c
...@@ -362,21 +362,14 @@ int tcp_set_congestion_control(struct sock *sk, const char *name, bool load, ...@@ -362,21 +362,14 @@ int tcp_set_congestion_control(struct sock *sk, const char *name, bool load,
goto out; goto out;
} }
if (!ca) { if (!ca)
err = -ENOENT; err = -ENOENT;
} else if (!load) { else if (!((ca->flags & TCP_CONG_NON_RESTRICTED) || cap_net_admin))
if (bpf_try_module_get(ca, ca->owner)) {
tcp_reinit_congestion_control(sk, ca);
} else {
err = -EBUSY;
}
} else if (!((ca->flags & TCP_CONG_NON_RESTRICTED) || cap_net_admin)) {
err = -EPERM; err = -EPERM;
} else if (!bpf_try_module_get(ca, ca->owner)) { else if (!bpf_try_module_get(ca, ca->owner))
err = -EBUSY; err = -EBUSY;
} else { else
tcp_reinit_congestion_control(sk, ca); tcp_reinit_congestion_control(sk, ca);
}
out: out:
rcu_read_unlock(); rcu_read_unlock();
return err; return err;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment