: ematch: module autoloading
Subsystems (3)
[NET_SCHED]: ematch: module autoloading
Signed-off-by Patrick McHardy <[email protected]>
---
commit daa5d0f76104559af6718688e0e37ff9fda9ea6a
tree 78efa14a3dda378a4b9dbc88ff5e1108671a4028
parent 5ff8523dfdac610944d1f85f54e30cd96dc6104b
author Patrick McHardy <[email protected]> Wed, 11 Jul 2007 19:59:26 +0200 committer Patrick McHardy <[email protected]> Wed, 11 Jul 2007 19:59:26 +0200
include/linux/pkt_cls.h | 17 +++++++---------- include/net/pkt_cls.h | 2 ++ net/sched/em_cmp.c | 1 + net/sched/em_meta.c | 2 ++ net/sched/em_nbyte.c | 2 ++ net/sched/em_text.c | 2 ++ net/sched/em_u32.c | 2 ++ net/sched/ematch.c | 13 +++++++++++++ 8 files changed, 31 insertions(+), 10 deletions(-)
include/linux/pkt_cls.h +7 -10
@@ -403,16 +403,13 @@ enum* 1..32767 Reserved for ematches inside kernel tree * 32768..65535 Free to use, not reliable */ -enum -{ -TCF_EM_CONTAINER , -TCF_EM_CMP , -TCF_EM_NBYTE , -TCF_EM_U32 , -TCF_EM_META , -TCF_EM_TEXT , - __TCF_EM_MAX -}; +#define TCF_EM_CONTAINER 0 +#define TCF_EM_CMP 1 +#define TCF_EM_NBYTE 2 +#define TCF_EM_U32 3 +#define TCF_EM_META 4 +#define TCF_EM_TEXT 5 +#define TCF_EM_MAX 5enum {
include/net/pkt_cls.h +2 -0
@@ -306,6 +306,8 @@ static inline int tcf_em_tree_match(struct sk_buff *skb, return 1; } +#define MODULE_ALIAS_TCF_EMATCH (kind) MODULE_ALIAS("ematch-kind-" __stringify(kind)) +#else /* CONFIG_NET_EMATCH */ struct tcf_ematch_tree
net/sched/em_cmp.c +1 -0
@@ -98,3 +98,4 @@ MODULE_LICENSE("GPL");module_init (init_em_cmp);module_exit (exit_em_cmp); +MODULE_ALIAS_TCF_EMATCH (TCF_EM_CMP );
net/sched/em_meta.c +2 -0
@@ -848,3 +848,5 @@ MODULE_LICENSE("GPL");module_init (init_em_meta);module_exit (exit_em_meta); + +MODULE_ALIAS_TCF_EMATCH (TCF_EM_META );
net/sched/em_nbyte.c +2 -0
@@ -76,3 +76,5 @@ MODULE_LICENSE("GPL");module_init (init_em_nbyte);module_exit (exit_em_nbyte); + +MODULE_ALIAS_TCF_EMATCH (TCF_EM_NBYTE );
net/sched/em_text.c +2 -0
@@ -150,3 +150,5 @@ MODULE_LICENSE("GPL");module_init (init_em_text);module_exit (exit_em_text); + +MODULE_ALIAS_TCF_EMATCH (TCF_EM_TEXT );
net/sched/em_u32.c +2 -0
@@ -60,3 +60,5 @@ MODULE_LICENSE("GPL");module_init (init_em_u32);module_exit (exit_em_u32); + +MODULE_ALIAS_TCF_EMATCH (TCF_EM_U32 );
net/sched/ematch.c +13 -0
@@ -222,6 +222,19 @@ static int tcf_em_validate(struct tcf_proto *tp,if (em->ops ==NULL ) { err = -ENOENT ; +#ifdef CONFIG_KMOD +__rtnl_unlock (); +request_module ("ematch-kind-%u" , em_hdr->kind); +rtnl_lock (); + em->ops =tcf_em_lookup (em_hdr->kind); +if (em->ops) { +/* We dropped the RTNL mutex in order to +* perform the module load. Tell the caller +* to replay the request. */ +module_put (em->ops->owner); + err = -EAGAIN ; + } +#endif goto errout; }
From: Patrick McHardy <[email protected]>
Date: Wed, 11 Jul 2007 20:01:32 +0200
Quoted 3 lines
[
NET_SCHED]: ematch: module autoloadingSigned-off-by Patrick McHardy <[email protected]>
Applied, thanks Patrick.