Commit 1ba896f6 authored by Xin Long's avatar Xin Long Committed by David S. Miller

sctp: remove extern from stream sched

Now each stream sched ops is defined in different .c file and
added into the global ops in another .c file, it uses extern
to make this work.

However extern is not good coding style to get them in and
even make C=2 reports errors for this.

This patch adds sctp_sched_ops_xxx_init for each stream sched
ops in their .c file, then get them into the global ops by
calling them when initializing sctp module.

Fixes: 637784ad ("sctp: introduce priority based stream scheduler")
Fixes: ac1ed8b8 ("sctp: introduce round robin stream scheduler")
Signed-off-by: default avatarXin Long <lucien.xin@gmail.com>
Acked-by: default avatarMarcelo Ricardo Leitner <marcelo.leitner@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent af2697a0
...@@ -194,6 +194,11 @@ void sctp_remaddr_proc_exit(struct net *net); ...@@ -194,6 +194,11 @@ void sctp_remaddr_proc_exit(struct net *net);
*/ */
int sctp_offload_init(void); int sctp_offload_init(void);
/*
* sctp/stream_sched.c
*/
void sctp_sched_ops_init(void);
/* /*
* sctp/stream.c * sctp/stream.c
*/ */
......
...@@ -69,4 +69,9 @@ void sctp_sched_dequeue_common(struct sctp_outq *q, struct sctp_chunk *ch); ...@@ -69,4 +69,9 @@ void sctp_sched_dequeue_common(struct sctp_outq *q, struct sctp_chunk *ch);
int sctp_sched_init_sid(struct sctp_stream *stream, __u16 sid, gfp_t gfp); int sctp_sched_init_sid(struct sctp_stream *stream, __u16 sid, gfp_t gfp);
struct sctp_sched_ops *sctp_sched_ops_from_stream(struct sctp_stream *stream); struct sctp_sched_ops *sctp_sched_ops_from_stream(struct sctp_stream *stream);
void sctp_sched_ops_register(enum sctp_sched_type sched,
struct sctp_sched_ops *sched_ops);
void sctp_sched_ops_prio_init(void);
void sctp_sched_ops_rr_init(void);
#endif /* __sctp_stream_sched_h__ */ #endif /* __sctp_stream_sched_h__ */
...@@ -1499,6 +1499,7 @@ static __init int sctp_init(void) ...@@ -1499,6 +1499,7 @@ static __init int sctp_init(void)
INIT_LIST_HEAD(&sctp_address_families); INIT_LIST_HEAD(&sctp_address_families);
sctp_v4_pf_init(); sctp_v4_pf_init();
sctp_v6_pf_init(); sctp_v6_pf_init();
sctp_sched_ops_init();
status = register_pernet_subsys(&sctp_defaults_ops); status = register_pernet_subsys(&sctp_defaults_ops);
if (status) if (status)
......
...@@ -119,16 +119,27 @@ static struct sctp_sched_ops sctp_sched_fcfs = { ...@@ -119,16 +119,27 @@ static struct sctp_sched_ops sctp_sched_fcfs = {
.unsched_all = sctp_sched_fcfs_unsched_all, .unsched_all = sctp_sched_fcfs_unsched_all,
}; };
static void sctp_sched_ops_fcfs_init(void)
{
sctp_sched_ops_register(SCTP_SS_FCFS, &sctp_sched_fcfs);
}
/* API to other parts of the stack */ /* API to other parts of the stack */
extern struct sctp_sched_ops sctp_sched_prio; static struct sctp_sched_ops *sctp_sched_ops[SCTP_SS_MAX + 1];
extern struct sctp_sched_ops sctp_sched_rr;
static struct sctp_sched_ops *sctp_sched_ops[] = { void sctp_sched_ops_register(enum sctp_sched_type sched,
&sctp_sched_fcfs, struct sctp_sched_ops *sched_ops)
&sctp_sched_prio, {
&sctp_sched_rr, sctp_sched_ops[sched] = sched_ops;
}; }
void sctp_sched_ops_init(void)
{
sctp_sched_ops_fcfs_init();
sctp_sched_ops_prio_init();
sctp_sched_ops_rr_init();
}
int sctp_sched_set_sched(struct sctp_association *asoc, int sctp_sched_set_sched(struct sctp_association *asoc,
enum sctp_sched_type sched) enum sctp_sched_type sched)
......
...@@ -333,7 +333,7 @@ static void sctp_sched_prio_unsched_all(struct sctp_stream *stream) ...@@ -333,7 +333,7 @@ static void sctp_sched_prio_unsched_all(struct sctp_stream *stream)
sctp_sched_prio_unsched(soute); sctp_sched_prio_unsched(soute);
} }
struct sctp_sched_ops sctp_sched_prio = { static struct sctp_sched_ops sctp_sched_prio = {
.set = sctp_sched_prio_set, .set = sctp_sched_prio_set,
.get = sctp_sched_prio_get, .get = sctp_sched_prio_get,
.init = sctp_sched_prio_init, .init = sctp_sched_prio_init,
...@@ -345,3 +345,8 @@ struct sctp_sched_ops sctp_sched_prio = { ...@@ -345,3 +345,8 @@ struct sctp_sched_ops sctp_sched_prio = {
.sched_all = sctp_sched_prio_sched_all, .sched_all = sctp_sched_prio_sched_all,
.unsched_all = sctp_sched_prio_unsched_all, .unsched_all = sctp_sched_prio_unsched_all,
}; };
void sctp_sched_ops_prio_init(void)
{
sctp_sched_ops_register(SCTP_SS_PRIO, &sctp_sched_prio);
}
...@@ -187,7 +187,7 @@ static void sctp_sched_rr_unsched_all(struct sctp_stream *stream) ...@@ -187,7 +187,7 @@ static void sctp_sched_rr_unsched_all(struct sctp_stream *stream)
sctp_sched_rr_unsched(stream, soute); sctp_sched_rr_unsched(stream, soute);
} }
struct sctp_sched_ops sctp_sched_rr = { static struct sctp_sched_ops sctp_sched_rr = {
.set = sctp_sched_rr_set, .set = sctp_sched_rr_set,
.get = sctp_sched_rr_get, .get = sctp_sched_rr_get,
.init = sctp_sched_rr_init, .init = sctp_sched_rr_init,
...@@ -199,3 +199,8 @@ struct sctp_sched_ops sctp_sched_rr = { ...@@ -199,3 +199,8 @@ struct sctp_sched_ops sctp_sched_rr = {
.sched_all = sctp_sched_rr_sched_all, .sched_all = sctp_sched_rr_sched_all,
.unsched_all = sctp_sched_rr_unsched_all, .unsched_all = sctp_sched_rr_unsched_all,
}; };
void sctp_sched_ops_rr_init(void)
{
sctp_sched_ops_register(SCTP_SS_RR, &sctp_sched_rr);
}
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