]> granicus.if.org Git - ipset/commitdiff
Remove to support resizing from kernel context.
authorJozsef Kadlecsik <kadlec@blackhole.kfki.hu>
Fri, 29 Oct 2010 20:50:12 +0000 (22:50 +0200)
committerJozsef Kadlecsik <kadlec@blackhole.kfki.hu>
Fri, 29 Oct 2010 20:50:12 +0000 (22:50 +0200)
Resizing in kernel context is simply too expensive. Drop the feature:
if a set is used as a dynamic container by a SET target, then the set
must be created with a proper size from now on.

kernel/ip_set.c

index 5e91d50686f4d95e6c73c3347be54ec7f4399165..ad1505d0ef12b2e2b607d58b4ccf22ebfda6cac5 100644 (file)
@@ -243,7 +243,7 @@ ip_set_add(ip_set_id_t index, const struct sk_buff *skb,
           u8 family, u8 dim, u8 flags)
 {
        struct ip_set *set = ip_set_list[index];
-       int ret = 0, retried = 0;
+       int ret;
 
        BUG_ON(set == NULL || atomic_read(&set->ref) == 0);
        pr_debug("set %s, index %u", set->name, index);
@@ -252,17 +252,10 @@ ip_set_add(ip_set_id_t index, const struct sk_buff *skb,
            || !(family == set->family || set->family == AF_UNSPEC))
                return 0;
 
-retry:
        write_lock_bh(&set->lock);
        ret = set->variant->kadt(set, skb, IPSET_ADD, family, dim, flags);
        write_unlock_bh(&set->lock);
 
-       /* Resize function must be called without holding any lock */
-       if (ret == -EAGAIN
-           && set->variant->resize
-           && (ret = set->variant->resize(set, GFP_ATOMIC, retried++)) == 0)
-               goto retry;
-       
        return ret;
 }
 EXPORT_SYMBOL(ip_set_add);