diff options
Diffstat (limited to 'net/openvswitch/conntrack.c')
-rw-r--r-- | net/openvswitch/conntrack.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/net/openvswitch/conntrack.c b/net/openvswitch/conntrack.c index 86a75105af1a..35ae64cbef33 100644 --- a/net/openvswitch/conntrack.c +++ b/net/openvswitch/conntrack.c | |||
@@ -1312,6 +1312,10 @@ static int ovs_ct_add_helper(struct ovs_conntrack_info *info, const char *name, | |||
1312 | 1312 | ||
1313 | rcu_assign_pointer(help->helper, helper); | 1313 | rcu_assign_pointer(help->helper, helper); |
1314 | info->helper = helper; | 1314 | info->helper = helper; |
1315 | |||
1316 | if (info->nat) | ||
1317 | request_module("ip_nat_%s", name); | ||
1318 | |||
1315 | return 0; | 1319 | return 0; |
1316 | } | 1320 | } |
1317 | 1321 | ||
@@ -1624,10 +1628,6 @@ int ovs_ct_copy_action(struct net *net, const struct nlattr *attr, | |||
1624 | OVS_NLERR(log, "Failed to allocate conntrack template"); | 1628 | OVS_NLERR(log, "Failed to allocate conntrack template"); |
1625 | return -ENOMEM; | 1629 | return -ENOMEM; |
1626 | } | 1630 | } |
1627 | |||
1628 | __set_bit(IPS_CONFIRMED_BIT, &ct_info.ct->status); | ||
1629 | nf_conntrack_get(&ct_info.ct->ct_general); | ||
1630 | |||
1631 | if (helper) { | 1631 | if (helper) { |
1632 | err = ovs_ct_add_helper(&ct_info, helper, key, log); | 1632 | err = ovs_ct_add_helper(&ct_info, helper, key, log); |
1633 | if (err) | 1633 | if (err) |
@@ -1639,6 +1639,8 @@ int ovs_ct_copy_action(struct net *net, const struct nlattr *attr, | |||
1639 | if (err) | 1639 | if (err) |
1640 | goto err_free_ct; | 1640 | goto err_free_ct; |
1641 | 1641 | ||
1642 | __set_bit(IPS_CONFIRMED_BIT, &ct_info.ct->status); | ||
1643 | nf_conntrack_get(&ct_info.ct->ct_general); | ||
1642 | return 0; | 1644 | return 0; |
1643 | err_free_ct: | 1645 | err_free_ct: |
1644 | __ovs_ct_free_action(&ct_info); | 1646 | __ovs_ct_free_action(&ct_info); |