Commit db3d99c090e0cdb34b1274767e062bfddbb384bc
Committed by
David S. Miller
1 parent
662ad4f8ef
Exists in
master
and in
7 other branches
[NET_SCHED]: ematch: module autoloading
Signed-off-by: Patrick McHardy <kaber@trash.net> Signed-off-by: David S. Miller <davem@davemloft.net>
Showing 8 changed files with 31 additions and 10 deletions Side-by-side Diff
include/linux/pkt_cls.h
... | ... | @@ -403,16 +403,13 @@ |
403 | 403 | * 1..32767 Reserved for ematches inside kernel tree |
404 | 404 | * 32768..65535 Free to use, not reliable |
405 | 405 | */ |
406 | -enum | |
407 | -{ | |
408 | - TCF_EM_CONTAINER, | |
409 | - TCF_EM_CMP, | |
410 | - TCF_EM_NBYTE, | |
411 | - TCF_EM_U32, | |
412 | - TCF_EM_META, | |
413 | - TCF_EM_TEXT, | |
414 | - __TCF_EM_MAX | |
415 | -}; | |
406 | +#define TCF_EM_CONTAINER 0 | |
407 | +#define TCF_EM_CMP 1 | |
408 | +#define TCF_EM_NBYTE 2 | |
409 | +#define TCF_EM_U32 3 | |
410 | +#define TCF_EM_META 4 | |
411 | +#define TCF_EM_TEXT 5 | |
412 | +#define TCF_EM_MAX 5 | |
416 | 413 | |
417 | 414 | enum |
418 | 415 | { |
include/net/pkt_cls.h
net/sched/em_cmp.c
net/sched/em_meta.c
net/sched/em_nbyte.c
net/sched/em_text.c
net/sched/em_u32.c
net/sched/ematch.c
... | ... | @@ -222,6 +222,19 @@ |
222 | 222 | |
223 | 223 | if (em->ops == NULL) { |
224 | 224 | err = -ENOENT; |
225 | +#ifdef CONFIG_KMOD | |
226 | + __rtnl_unlock(); | |
227 | + request_module("ematch-kind-%u", em_hdr->kind); | |
228 | + rtnl_lock(); | |
229 | + em->ops = tcf_em_lookup(em_hdr->kind); | |
230 | + if (em->ops) { | |
231 | + /* We dropped the RTNL mutex in order to | |
232 | + * perform the module load. Tell the caller | |
233 | + * to replay the request. */ | |
234 | + module_put(em->ops->owner); | |
235 | + err = -EAGAIN; | |
236 | + } | |
237 | +#endif | |
225 | 238 | goto errout; |
226 | 239 | } |
227 | 240 |