summaryrefslogtreecommitdiffstats
path: root/net/sctp/socket.c
diff options
context:
space:
mode:
authorTom Herbert <tom@quantonium.net>2017-12-04 13:31:41 -0500
committerDavid S. Miller <davem@davemloft.net>2017-12-11 09:58:38 -0500
commit97a6ec4ac021f7fbec05c15a3aa0c4aaf0461af5 (patch)
tree06f6f0559c003ac7f718d1453120bf21044d7a35 /net/sctp/socket.c
parenta0b586fa75a69578ecf10b40582eed9b35de2432 (diff)
rhashtable: Change rhashtable_walk_start to return void
Most callers of rhashtable_walk_start don't care about a resize event which is indicated by a return value of -EAGAIN. So calls to rhashtable_walk_start are wrapped wih code to ignore -EAGAIN. Something like this is common: ret = rhashtable_walk_start(rhiter); if (ret && ret != -EAGAIN) goto out; Since zero and -EAGAIN are the only possible return values from the function this check is pointless. The condition never evaluates to true. This patch changes rhashtable_walk_start to return void. This simplifies code for the callers that ignore -EAGAIN. For the few cases where the caller cares about the resize event, particularly where the table can be walked in mulitple parts for netlink or seq file dump, the function rhashtable_walk_start_check has been added that returns -EAGAIN on a resize event. Signed-off-by: Tom Herbert <tom@quantonium.net> Acked-by: Herbert Xu <herbert@gondor.apana.org.au> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/sctp/socket.c')
-rw-r--r--net/sctp/socket.c19
1 files changed, 4 insertions, 15 deletions
diff --git a/net/sctp/socket.c b/net/sctp/socket.c
index eb17a911aa29..3e55daa37e66 100644
--- a/net/sctp/socket.c
+++ b/net/sctp/socket.c
@@ -4676,20 +4676,11 @@ int sctp_get_sctp_info(struct sock *sk, struct sctp_association *asoc,
4676EXPORT_SYMBOL_GPL(sctp_get_sctp_info); 4676EXPORT_SYMBOL_GPL(sctp_get_sctp_info);
4677 4677
4678/* use callback to avoid exporting the core structure */ 4678/* use callback to avoid exporting the core structure */
4679int sctp_transport_walk_start(struct rhashtable_iter *iter) 4679void sctp_transport_walk_start(struct rhashtable_iter *iter)
4680{ 4680{
4681 int err;
4682
4683 rhltable_walk_enter(&sctp_transport_hashtable, iter); 4681 rhltable_walk_enter(&sctp_transport_hashtable, iter);
4684 4682
4685 err = rhashtable_walk_start(iter); 4683 rhashtable_walk_start(iter);
4686 if (err && err != -EAGAIN) {
4687 rhashtable_walk_stop(iter);
4688 rhashtable_walk_exit(iter);
4689 return err;
4690 }
4691
4692 return 0;
4693} 4684}
4694 4685
4695void sctp_transport_walk_stop(struct rhashtable_iter *iter) 4686void sctp_transport_walk_stop(struct rhashtable_iter *iter)
@@ -4780,12 +4771,10 @@ int sctp_for_each_transport(int (*cb)(struct sctp_transport *, void *),
4780 struct net *net, int *pos, void *p) { 4771 struct net *net, int *pos, void *p) {
4781 struct rhashtable_iter hti; 4772 struct rhashtable_iter hti;
4782 struct sctp_transport *tsp; 4773 struct sctp_transport *tsp;
4783 int ret; 4774 int ret = 0;
4784 4775
4785again: 4776again:
4786 ret = sctp_transport_walk_start(&hti); 4777 sctp_transport_walk_start(&hti);
4787 if (ret)
4788 return ret;
4789 4778
4790 tsp = sctp_transport_get_idx(net, &hti, *pos + 1); 4779 tsp = sctp_transport_get_idx(net, &hti, *pos + 1);
4791 for (; !IS_ERR_OR_NULL(tsp); tsp = sctp_transport_get_next(net, &hti)) { 4780 for (; !IS_ERR_OR_NULL(tsp); tsp = sctp_transport_get_next(net, &hti)) {