sctp: convert to genradix
This also makes sctp_stream_alloc_(out|in) saner, in that they no longer allocate new flex_arrays/genradixes, they just preallocate more elements. This code does however have a suspicious lack of locking. Link: http://lkml.kernel.org/r/20181217131929.11727-7-kent.overstreet@gmail.com Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com> Cc: Vlad Yasevich <vyasevich@gmail.com> Cc: Neil Horman <nhorman@tuxdriver.com> Cc: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com> Cc: Alexey Dobriyan <adobriyan@gmail.com> Cc: Al Viro <viro@zeniv.linux.org.uk> Cc: Dave Hansen <dave.hansen@intel.com> Cc: Eric Paris <eparis@parisplace.org> Cc: Matthew Wilcox <willy@infradead.org> Cc: Paul Moore <paul@paul-moore.com> Cc: Pravin B Shelar <pshelar@ovn.org> Cc: Shaohua Li <shli@kernel.org> Cc: Stephen Smalley <sds@tycho.nsa.gov> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:

committed by
Linus Torvalds

parent
94f8f3b02e
commit
2075e50caf
@@ -48,6 +48,7 @@
|
||||
#define __sctp_structs_h__
|
||||
|
||||
#include <linux/ktime.h>
|
||||
#include <linux/generic-radix-tree.h>
|
||||
#include <linux/rhashtable-types.h>
|
||||
#include <linux/socket.h> /* linux/in.h needs this!! */
|
||||
#include <linux/in.h> /* We get struct sockaddr_in. */
|
||||
@@ -57,7 +58,6 @@
|
||||
#include <linux/atomic.h> /* This gets us atomic counters. */
|
||||
#include <linux/skbuff.h> /* We need sk_buff_head. */
|
||||
#include <linux/workqueue.h> /* We need tq_struct. */
|
||||
#include <linux/flex_array.h> /* We need flex_array. */
|
||||
#include <linux/sctp.h> /* We need sctp* header structs. */
|
||||
#include <net/sctp/auth.h> /* We need auth specific structs */
|
||||
#include <net/ip.h> /* For inet_skb_parm */
|
||||
@@ -1449,8 +1449,9 @@ struct sctp_stream_in {
|
||||
};
|
||||
|
||||
struct sctp_stream {
|
||||
struct flex_array *out;
|
||||
struct flex_array *in;
|
||||
GENRADIX(struct sctp_stream_out) out;
|
||||
GENRADIX(struct sctp_stream_in) in;
|
||||
|
||||
__u16 outcnt;
|
||||
__u16 incnt;
|
||||
/* Current stream being sent, if any */
|
||||
@@ -1473,17 +1474,17 @@ struct sctp_stream {
|
||||
};
|
||||
|
||||
static inline struct sctp_stream_out *sctp_stream_out(
|
||||
const struct sctp_stream *stream,
|
||||
struct sctp_stream *stream,
|
||||
__u16 sid)
|
||||
{
|
||||
return flex_array_get(stream->out, sid);
|
||||
return genradix_ptr(&stream->out, sid);
|
||||
}
|
||||
|
||||
static inline struct sctp_stream_in *sctp_stream_in(
|
||||
const struct sctp_stream *stream,
|
||||
struct sctp_stream *stream,
|
||||
__u16 sid)
|
||||
{
|
||||
return flex_array_get(stream->in, sid);
|
||||
return genradix_ptr(&stream->in, sid);
|
||||
}
|
||||
|
||||
#define SCTP_SO(s, i) sctp_stream_out((s), (i))
|
||||
|
Reference in New Issue
Block a user