diff options
author | Xin Long <lucien.xin@gmail.com> | 2019-07-08 19:59:40 +0300 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2019-07-09 06:18:11 +0300 |
commit | 3cab2afb149ceedd324d14c6562224fb925252a6 (patch) | |
tree | f770202e3dc779b2d2ca2866358e39d2bf91b30a /net/sctp | |
parent | 6c6fbad6576fb19f93770feabcf2d0a30b4ae0e2 (diff) | |
download | linux-3cab2afb149ceedd324d14c6562224fb925252a6.tar.xz |
sctp: remove rcu_read_lock from sctp_bind_addr_state
sctp_bind_addr_state() is called either in packet rcv path or
by sctp_copy_local_addr_list(), which are under rcu_read_lock.
So there's no need to call it again in sctp_bind_addr_state().
Signed-off-by: Xin Long <lucien.xin@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/sctp')
-rw-r--r-- | net/sctp/bind_addr.c | 13 |
1 files changed, 4 insertions, 9 deletions
diff --git a/net/sctp/bind_addr.c b/net/sctp/bind_addr.c index f54333cbbe0f..53bc61537f44 100644 --- a/net/sctp/bind_addr.c +++ b/net/sctp/bind_addr.c @@ -393,24 +393,19 @@ int sctp_bind_addr_state(const struct sctp_bind_addr *bp, { struct sctp_sockaddr_entry *laddr; struct sctp_af *af; - int state = -1; af = sctp_get_af_specific(addr->sa.sa_family); if (unlikely(!af)) - return state; + return -1; - rcu_read_lock(); list_for_each_entry_rcu(laddr, &bp->address_list, list) { if (!laddr->valid) continue; - if (af->cmp_addr(&laddr->a, addr)) { - state = laddr->state; - break; - } + if (af->cmp_addr(&laddr->a, addr)) + return laddr->state; } - rcu_read_unlock(); - return state; + return -1; } /* Find the first address in the bind address list that is not present in |