@@ -96,6 +96,43 @@ static void mptcp_pernet_set_defaults(struct mptcp_pernet *pernet)
9696}
9797
9898#ifdef CONFIG_SYSCTL
99+ static int mptcp_set_scheduler (const struct net * net , const char * name )
100+ {
101+ struct mptcp_pernet * pernet = mptcp_get_pernet (net );
102+ struct mptcp_sched_ops * sched ;
103+ int ret = 0 ;
104+
105+ rcu_read_lock ();
106+ sched = mptcp_sched_find (name );
107+ if (sched )
108+ strscpy (pernet -> scheduler , name , MPTCP_SCHED_NAME_MAX );
109+ else
110+ ret = - ENOENT ;
111+ rcu_read_unlock ();
112+
113+ return ret ;
114+ }
115+
116+ static int proc_scheduler (struct ctl_table * ctl , int write ,
117+ void * buffer , size_t * lenp , loff_t * ppos )
118+ {
119+ const struct net * net = current -> nsproxy -> net_ns ;
120+ char val [MPTCP_SCHED_NAME_MAX ];
121+ struct ctl_table tbl = {
122+ .data = val ,
123+ .maxlen = MPTCP_SCHED_NAME_MAX ,
124+ };
125+ int ret ;
126+
127+ strscpy (val , mptcp_get_scheduler (net ), MPTCP_SCHED_NAME_MAX );
128+
129+ ret = proc_dostring (& tbl , write , buffer , lenp , ppos );
130+ if (write && ret == 0 )
131+ ret = mptcp_set_scheduler (net , val );
132+
133+ return ret ;
134+ }
135+
99136static struct ctl_table mptcp_sysctl_table [] = {
100137 {
101138 .procname = "enabled" ,
@@ -148,7 +185,7 @@ static struct ctl_table mptcp_sysctl_table[] = {
148185 .procname = "scheduler" ,
149186 .maxlen = MPTCP_SCHED_NAME_MAX ,
150187 .mode = 0644 ,
151- .proc_handler = proc_dostring ,
188+ .proc_handler = proc_scheduler ,
152189 },
153190 {
154191 .procname = "close_timeout" ,
0 commit comments