Merge branch 'upstream-linus' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik...
[powerpc.git] / net / netfilter / nf_conntrack_helper.c
index 03b3ed8..0743be4 100644 (file)
@@ -63,11 +63,13 @@ nf_ct_helper_find_get( const struct nf_conntrack_tuple *tuple)
 
        return helper;
 }
+EXPORT_SYMBOL_GPL(nf_ct_helper_find_get);
 
 void nf_ct_helper_put(struct nf_conntrack_helper *helper)
 {
        module_put(helper->me);
 }
+EXPORT_SYMBOL_GPL(nf_ct_helper_put);
 
 struct nf_conntrack_helper *
 __nf_conntrack_helper_find_byname(const char *name)
@@ -81,6 +83,7 @@ __nf_conntrack_helper_find_byname(const char *name)
 
        return NULL;
 }
+EXPORT_SYMBOL_GPL(__nf_conntrack_helper_find_byname);
 
 static inline int unhelp(struct nf_conntrack_tuple_hash *i,
                         const struct nf_conntrack_helper *me)
@@ -97,13 +100,14 @@ static inline int unhelp(struct nf_conntrack_tuple_hash *i,
 
 int nf_conntrack_helper_register(struct nf_conntrack_helper *me)
 {
-       int ret;
+       int size, ret;
+
        BUG_ON(me->timeout == 0);
 
+       size = ALIGN(sizeof(struct nf_conn), __alignof__(struct nf_conn_help)) +
+              sizeof(struct nf_conn_help);
        ret = nf_conntrack_register_cache(NF_CT_F_HELP, "nf_conntrack:help",
-                                         sizeof(struct nf_conn)
-                                         + sizeof(struct nf_conn_help)
-                                         + __alignof__(struct nf_conn_help));
+                                         size);
        if (ret < 0) {
                printk(KERN_ERR "nf_conntrack_helper_register: Unable to create slab cache for conntracks\n");
                return ret;
@@ -114,6 +118,7 @@ int nf_conntrack_helper_register(struct nf_conntrack_helper *me)
 
        return 0;
 }
+EXPORT_SYMBOL_GPL(nf_conntrack_helper_register);
 
 void nf_conntrack_helper_unregister(struct nf_conntrack_helper *me)
 {
@@ -128,7 +133,8 @@ void nf_conntrack_helper_unregister(struct nf_conntrack_helper *me)
        /* Get rid of expectations */
        list_for_each_entry_safe(exp, tmp, &nf_conntrack_expect_list, list) {
                struct nf_conn_help *help = nfct_help(exp->master);
-               if (help->helper == me && del_timer(&exp->timeout)) {
+               if ((help->helper == me || exp->helper == me) &&
+                   del_timer(&exp->timeout)) {
                        nf_ct_unlink_expect(exp);
                        nf_conntrack_expect_put(exp);
                }
@@ -146,3 +152,4 @@ void nf_conntrack_helper_unregister(struct nf_conntrack_helper *me)
        /* Someone could be still looking at the helper in a bh. */
        synchronize_net();
 }
+EXPORT_SYMBOL_GPL(nf_conntrack_helper_unregister);