* [PATCH net 0/3] sctp: some cleanups for sctp @ 2016-02-15 6:28 Xin Long 2016-02-15 6:28 ` [PATCH net 1/3] sctp: move rcu_read_lock from __sctp_lookup_association to sctp_lookup_association Xin Long 2016-02-17 20:42 ` [PATCH net 0/3] sctp: some cleanups for sctp David Miller 0 siblings, 2 replies; 7+ messages in thread From: Xin Long @ 2016-02-15 6:28 UTC (permalink / raw) To: network dev, linux-sctp; +Cc: Marcelo Ricardo Leitner, Vlad Yasevich, davem There are some unused function and redundant rcu locks should be removed. Xin Long (3): sctp: move rcu_read_lock from __sctp_lookup_association to sctp_lookup_association sctp: remove rcu_read_lock in sctp_seq_dump_remote_addrs() sctp: remove the unused sctp_datamsg_free() include/net/sctp/structs.h | 1 - net/sctp/chunk.c | 13 ------------- net/sctp/input.c | 4 ++-- net/sctp/proc.c | 2 -- 4 files changed, 2 insertions(+), 18 deletions(-) -- 2.1.0 ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH net 1/3] sctp: move rcu_read_lock from __sctp_lookup_association to sctp_lookup_association 2016-02-15 6:28 [PATCH net 0/3] sctp: some cleanups for sctp Xin Long @ 2016-02-15 6:28 ` Xin Long 2016-02-15 6:28 ` [PATCH net 2/3] sctp: remove rcu_read_lock in sctp_seq_dump_remote_addrs() Xin Long 2016-02-17 16:11 ` [PATCH net 1/3] sctp: move rcu_read_lock from __sctp_lookup_association to sctp_lookup_association Neil Horman 2016-02-17 20:42 ` [PATCH net 0/3] sctp: some cleanups for sctp David Miller 1 sibling, 2 replies; 7+ messages in thread From: Xin Long @ 2016-02-15 6:28 UTC (permalink / raw) To: network dev, linux-sctp; +Cc: Marcelo Ricardo Leitner, Vlad Yasevich, davem __sctp_lookup_association() is only invoked by sctp_v4_err() and sctp_rcv(), both which run on the rx BH, and it has been protected by rcu_read_lock [see ip_local_deliver_finish() / ipv6_rcv()]. So we can move it to sctp_lookup_association, only let sctp_lookup_association use rcu_read_lock. Signed-off-by: Xin Long <lucien.xin@gmail.com> --- net/sctp/input.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/net/sctp/input.c b/net/sctp/input.c index 49d2cc7..21a2d6b 100644 --- a/net/sctp/input.c +++ b/net/sctp/input.c @@ -937,7 +937,6 @@ static struct sctp_association *__sctp_lookup_association( struct sctp_transport *t; struct sctp_association *asoc = NULL; - rcu_read_lock(); t = sctp_addrs_lookup_transport(net, local, peer); if (!t || !sctp_transport_hold(t)) goto out; @@ -949,7 +948,6 @@ static struct sctp_association *__sctp_lookup_association( sctp_transport_put(t); out: - rcu_read_unlock(); return asoc; } @@ -962,7 +960,9 @@ struct sctp_association *sctp_lookup_association(struct net *net, { struct sctp_association *asoc; + rcu_read_lock(); asoc = __sctp_lookup_association(net, laddr, paddr, transportp); + rcu_read_unlock(); return asoc; } -- 2.1.0 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH net 2/3] sctp: remove rcu_read_lock in sctp_seq_dump_remote_addrs() 2016-02-15 6:28 ` [PATCH net 1/3] sctp: move rcu_read_lock from __sctp_lookup_association to sctp_lookup_association Xin Long @ 2016-02-15 6:28 ` Xin Long 2016-02-15 6:28 ` [PATCH net 3/3] sctp: remove the unused sctp_datamsg_free() Xin Long 2016-02-17 16:11 ` [PATCH net 1/3] sctp: move rcu_read_lock from __sctp_lookup_association to sctp_lookup_association Neil Horman 1 sibling, 1 reply; 7+ messages in thread From: Xin Long @ 2016-02-15 6:28 UTC (permalink / raw) To: network dev, linux-sctp; +Cc: Marcelo Ricardo Leitner, Vlad Yasevich, davem sctp_seq_dump_remote_addrs is only called by sctp_assocs_seq_show() and it has been protected by rcu_read_lock that is from rhashtable_walk_start(). So we will remove this one. Signed-off-by: Xin Long <lucien.xin@gmail.com> --- net/sctp/proc.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/net/sctp/proc.c b/net/sctp/proc.c index ded7d93..cfc3c71 100644 --- a/net/sctp/proc.c +++ b/net/sctp/proc.c @@ -161,7 +161,6 @@ static void sctp_seq_dump_remote_addrs(struct seq_file *seq, struct sctp_associa struct sctp_af *af; primary = &assoc->peer.primary_addr; - rcu_read_lock(); list_for_each_entry_rcu(transport, &assoc->peer.transport_addr_list, transports) { addr = &transport->ipaddr; @@ -172,7 +171,6 @@ static void sctp_seq_dump_remote_addrs(struct seq_file *seq, struct sctp_associa } af->seq_dump_addr(seq, addr); } - rcu_read_unlock(); } static void *sctp_eps_seq_start(struct seq_file *seq, loff_t *pos) -- 2.1.0 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH net 3/3] sctp: remove the unused sctp_datamsg_free() 2016-02-15 6:28 ` [PATCH net 2/3] sctp: remove rcu_read_lock in sctp_seq_dump_remote_addrs() Xin Long @ 2016-02-15 6:28 ` Xin Long 0 siblings, 0 replies; 7+ messages in thread From: Xin Long @ 2016-02-15 6:28 UTC (permalink / raw) To: network dev, linux-sctp; +Cc: Marcelo Ricardo Leitner, Vlad Yasevich, davem Since commit 8b570dc9f7b6 ("sctp: only drop the reference on the datamsg after sending a msg") used sctp_datamsg_put in sctp_sendmsg, instead of sctp_datamsg_free, this function has no use in sctp. So we will remove it. Signed-off-by: Xin Long <lucien.xin@gmail.com> --- include/net/sctp/structs.h | 1 - net/sctp/chunk.c | 13 ------------- 2 files changed, 14 deletions(-) diff --git a/include/net/sctp/structs.h b/include/net/sctp/structs.h index 205630b..d05b566 100644 --- a/include/net/sctp/structs.h +++ b/include/net/sctp/structs.h @@ -535,7 +535,6 @@ struct sctp_datamsg { struct sctp_datamsg *sctp_datamsg_from_user(struct sctp_association *, struct sctp_sndrcvinfo *, struct iov_iter *); -void sctp_datamsg_free(struct sctp_datamsg *); void sctp_datamsg_put(struct sctp_datamsg *); void sctp_chunk_fail(struct sctp_chunk *, int error); int sctp_chunk_abandoned(struct sctp_chunk *); diff --git a/net/sctp/chunk.c b/net/sctp/chunk.c index a338091..3aa4307 100644 --- a/net/sctp/chunk.c +++ b/net/sctp/chunk.c @@ -70,19 +70,6 @@ static struct sctp_datamsg *sctp_datamsg_new(gfp_t gfp) return msg; } -void sctp_datamsg_free(struct sctp_datamsg *msg) -{ - struct sctp_chunk *chunk; - - /* This doesn't have to be a _safe vairant because - * sctp_chunk_free() only drops the refs. - */ - list_for_each_entry(chunk, &msg->chunks, frag_list) - sctp_chunk_free(chunk); - - sctp_datamsg_put(msg); -} - /* Final destructruction of datamsg memory. */ static void sctp_datamsg_destroy(struct sctp_datamsg *msg) { -- 2.1.0 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH net 1/3] sctp: move rcu_read_lock from __sctp_lookup_association to sctp_lookup_association 2016-02-15 6:28 ` [PATCH net 1/3] sctp: move rcu_read_lock from __sctp_lookup_association to sctp_lookup_association Xin Long 2016-02-15 6:28 ` [PATCH net 2/3] sctp: remove rcu_read_lock in sctp_seq_dump_remote_addrs() Xin Long @ 2016-02-17 16:11 ` Neil Horman 2016-02-18 13:59 ` Xin Long 1 sibling, 1 reply; 7+ messages in thread From: Neil Horman @ 2016-02-17 16:11 UTC (permalink / raw) To: Xin Long Cc: network dev, linux-sctp, Marcelo Ricardo Leitner, Vlad Yasevich, davem On Mon, Feb 15, 2016 at 02:28:03PM +0800, Xin Long wrote: > __sctp_lookup_association() is only invoked by sctp_v4_err() and > sctp_rcv(), both which run on the rx BH, and it has been protected > by rcu_read_lock [see ip_local_deliver_finish() / ipv6_rcv()]. > > So we can move it to sctp_lookup_association, only let > sctp_lookup_association use rcu_read_lock. > > Signed-off-by: Xin Long <lucien.xin@gmail.com> Not that it was right before if this is true, but if we're using rcu in a bottom half path, shouldn't rcu_read_lock_bh be used instead here? Neil > --- > net/sctp/input.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/net/sctp/input.c b/net/sctp/input.c > index 49d2cc7..21a2d6b 100644 > --- a/net/sctp/input.c > +++ b/net/sctp/input.c > @@ -937,7 +937,6 @@ static struct sctp_association *__sctp_lookup_association( > struct sctp_transport *t; > struct sctp_association *asoc = NULL; > > - rcu_read_lock(); > t = sctp_addrs_lookup_transport(net, local, peer); > if (!t || !sctp_transport_hold(t)) > goto out; > @@ -949,7 +948,6 @@ static struct sctp_association *__sctp_lookup_association( > sctp_transport_put(t); > > out: > - rcu_read_unlock(); > return asoc; > } > > @@ -962,7 +960,9 @@ struct sctp_association *sctp_lookup_association(struct net *net, > { > struct sctp_association *asoc; > > + rcu_read_lock(); > asoc = __sctp_lookup_association(net, laddr, paddr, transportp); > + rcu_read_unlock(); > > return asoc; > } > -- > 2.1.0 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-sctp" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH net 1/3] sctp: move rcu_read_lock from __sctp_lookup_association to sctp_lookup_association 2016-02-17 16:11 ` [PATCH net 1/3] sctp: move rcu_read_lock from __sctp_lookup_association to sctp_lookup_association Neil Horman @ 2016-02-18 13:59 ` Xin Long 0 siblings, 0 replies; 7+ messages in thread From: Xin Long @ 2016-02-18 13:59 UTC (permalink / raw) To: Neil Horman Cc: network dev, linux-sctp, Marcelo Ricardo Leitner, Vlad Yasevich, davem On Thu, Feb 18, 2016 at 12:11 AM, Neil Horman <nhorman@tuxdriver.com> wrote: > On Mon, Feb 15, 2016 at 02:28:03PM +0800, Xin Long wrote: >> __sctp_lookup_association() is only invoked by sctp_v4_err() and >> sctp_rcv(), both which run on the rx BH, and it has been protected >> by rcu_read_lock [see ip_local_deliver_finish() / ipv6_rcv()]. >> >> So we can move it to sctp_lookup_association, only let >> sctp_lookup_association use rcu_read_lock. >> >> Signed-off-by: Xin Long <lucien.xin@gmail.com> > > Not that it was right before if this is true, but if we're using rcu in a bottom > half path, shouldn't rcu_read_lock_bh be used instead here? > the resource is also accessed in threads, not only in BH, so we cannot use rcu_read_lock_bh here. > Neil > ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH net 0/3] sctp: some cleanups for sctp 2016-02-15 6:28 [PATCH net 0/3] sctp: some cleanups for sctp Xin Long 2016-02-15 6:28 ` [PATCH net 1/3] sctp: move rcu_read_lock from __sctp_lookup_association to sctp_lookup_association Xin Long @ 2016-02-17 20:42 ` David Miller 1 sibling, 0 replies; 7+ messages in thread From: David Miller @ 2016-02-17 20:42 UTC (permalink / raw) To: lucien.xin; +Cc: netdev, linux-sctp, marcelo.leitner, vyasevich From: Xin Long <lucien.xin@gmail.com> Date: Mon, 15 Feb 2016 14:28:02 +0800 > There are some unused function and redundant rcu locks should be > removed. Series applied to net-next, please target cleanups to the appropriate tree in the future. Also, please respond to Neil Horman's query about the use of BH RCU locking wrt. patch #1. Thanks. ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2016-02-18 13:59 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2016-02-15 6:28 [PATCH net 0/3] sctp: some cleanups for sctp Xin Long 2016-02-15 6:28 ` [PATCH net 1/3] sctp: move rcu_read_lock from __sctp_lookup_association to sctp_lookup_association Xin Long 2016-02-15 6:28 ` [PATCH net 2/3] sctp: remove rcu_read_lock in sctp_seq_dump_remote_addrs() Xin Long 2016-02-15 6:28 ` [PATCH net 3/3] sctp: remove the unused sctp_datamsg_free() Xin Long 2016-02-17 16:11 ` [PATCH net 1/3] sctp: move rcu_read_lock from __sctp_lookup_association to sctp_lookup_association Neil Horman 2016-02-18 13:59 ` Xin Long 2016-02-17 20:42 ` [PATCH net 0/3] sctp: some cleanups for sctp David Miller
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).