]> granicus.if.org Git - ipset/commitdiff
Call synchronize_rcu() in set type (un)register functions only when needed
authorJozsef Kadlecsik <kadlec@blackhole.kfki.hu>
Wed, 10 Dec 2014 06:31:43 +0000 (07:31 +0100)
committerJozsef Kadlecsik <kadlec@blackhole.kfki.hu>
Wed, 10 Dec 2014 06:31:43 +0000 (07:31 +0100)
kernel/net/netfilter/ipset/ip_set_core.c

index 6043a10517a0e3a49346e0b16e8d976ae3d65481..436bfd1bb5e0d0966e231248f826e2d481014e35 100644 (file)
@@ -214,14 +214,13 @@ ip_set_type_register(struct ip_set_type *type)
                pr_warn("ip_set type %s, family %s with revision min %u already registered!\n",
                        type->name, family_name(type->family),
                        type->revision_min);
-               ret = -EINVAL;
-               goto unlock;
+               ip_set_type_unlock();
+               return -EINVAL;
        }
        list_add_rcu(&type->list, &ip_set_type_list);
        pr_debug("type %s, family %s, revision %u:%u registered.\n",
                 type->name, family_name(type->family),
                 type->revision_min, type->revision_max);
-unlock:
        ip_set_type_unlock();
        synchronize_rcu();
        return ret;
@@ -237,12 +236,12 @@ ip_set_type_unregister(struct ip_set_type *type)
                pr_warn("ip_set type %s, family %s with revision min %u not registered\n",
                        type->name, family_name(type->family),
                        type->revision_min);
-               goto unlock;
+               ip_set_type_unlock();
+               return;
        }
        list_del_rcu(&type->list);
        pr_debug("type %s, family %s with revision min %u unregistered.\n",
                 type->name, family_name(type->family), type->revision_min);
-unlock:
        ip_set_type_unlock();
 
        synchronize_rcu();