]> git.ipfire.org Git - thirdparty/xtables-addons.git/commitdiff
xt_condition: remove unnecessary RCU protection
authorJan Engelhardt <jengelh@medozas.de>
Fri, 9 Apr 2010 10:25:30 +0000 (12:25 +0200)
committerJan Engelhardt <jengelh@medozas.de>
Fri, 9 Apr 2010 10:28:12 +0000 (12:28 +0200)
The module does not use the RCU mechanism, so calling
list_add_rcu/list_del_rcu does not make much sense either.

doc/changelog.txt
extensions/xt_condition.c

index 3e7f103cac61f155be5341eea125f88dfe5de06f..a2b074196965aff2cf81b2a9444d4a061dccc65e 100644 (file)
@@ -9,6 +9,7 @@ HEAD
 - TEE: do not retain iif and mark on cloned packet
 - TEE: new loop detection logic
 - TEE: use less expensive pskb_copy
+- condition: remove unnecessary RCU protection
 
 
 Xtables-addons 1.24 (March 17 2010)
index f5fb98d67e6b8bc55c78ea84e08835ed5b29295c..ce2a365a3c175f796ee4ea95483d44f40b80227b 100644 (file)
@@ -100,13 +100,8 @@ condition_mt(const struct sk_buff *skb, const struct xt_match_param *par)
 {
        const struct xt_condition_mtinfo *info = par->matchinfo;
        const struct condition_variable *var   = info->condvar;
-       bool x;
 
-       rcu_read_lock();
-       x = rcu_dereference(var->enabled);
-       rcu_read_unlock();
-
-       return x ^ info->invert;
+       return var->enabled ^ info->invert;
 }
 
 static int condition_mt_check(const struct xt_mtchk_param *par)
@@ -164,7 +159,7 @@ static int condition_mt_check(const struct xt_mtchk_param *par)
        wmb();
        var->status_proc->read_proc  = condition_proc_read;
        var->status_proc->write_proc = condition_proc_write;
-       list_add_rcu(&var->list, &conditions_list);
+       list_add(&var->list, &conditions_list);
        var->status_proc->uid = condition_uid_perms;
        var->status_proc->gid = condition_gid_perms;
        mutex_unlock(&proc_lock);
@@ -179,16 +174,9 @@ static void condition_mt_destroy(const struct xt_mtdtor_param *par)
 
        mutex_lock(&proc_lock);
        if (--var->refcount == 0) {
-               list_del_rcu(&var->list);
+               list_del(&var->list);
                remove_proc_entry(var->status_proc->name, proc_net_condition);
                mutex_unlock(&proc_lock);
-               /*
-                * synchronize_rcu() would be good enough, but
-                * synchronize_net() guarantees that no packet
-                * will go out with the old rule after
-                * succesful removal.
-                */
-               synchronize_net();
                kfree(var);
                return;
        }