OSDN Git Service

netfilter: ecache: remove one indent level
authorFlorian Westphal <fw@strlen.de>
Mon, 16 Aug 2021 15:16:22 +0000 (17:16 +0200)
committerPablo Neira Ayuso <pablo@netfilter.org>
Wed, 25 Aug 2021 10:50:38 +0000 (12:50 +0200)
nf_conntrack_eventmask_report and nf_ct_deliver_cached_events shared
most of their code.  This unifies the layout by changing

 if (nf_ct_is_confirmed(ct)) {
   foo
 }

 to
 if (!nf_ct_is_confirmed(ct)))
   return
 foo

This removes one level of indentation.

Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
include/net/netfilter/nf_conntrack_ecache.h
net/netfilter/nf_conntrack_ecache.c
net/netfilter/nf_conntrack_netlink.c

index d00ba60..3734bac 100644 (file)
@@ -73,7 +73,7 @@ struct nf_ct_event {
 };
 
 struct nf_ct_event_notifier {
-       int (*fcn)(unsigned int events, struct nf_ct_event *item);
+       int (*fcn)(unsigned int events, const struct nf_ct_event *item);
 };
 
 int nf_conntrack_register_notifier(struct net *net,
index 296e4a1..3f1e0ad 100644 (file)
@@ -133,10 +133,15 @@ static void ecache_work(struct work_struct *work)
 int nf_conntrack_eventmask_report(unsigned int eventmask, struct nf_conn *ct,
                                  u32 portid, int report)
 {
-       int ret = 0;
        struct net *net = nf_ct_net(ct);
        struct nf_ct_event_notifier *notify;
        struct nf_conntrack_ecache *e;
+       struct nf_ct_event item;
+       unsigned long missed;
+       int ret = 0;
+
+       if (!nf_ct_is_confirmed(ct))
+               return ret;
 
        rcu_read_lock();
        notify = rcu_dereference(net->ct.nf_conntrack_event_cb);
@@ -147,38 +152,37 @@ int nf_conntrack_eventmask_report(unsigned int eventmask, struct nf_conn *ct,
        if (!e)
                goto out_unlock;
 
-       if (nf_ct_is_confirmed(ct)) {
-               struct nf_ct_event item = {
-                       .ct     = ct,
-                       .portid = e->portid ? e->portid : portid,
-                       .report = report
-               };
-               /* This is a resent of a destroy event? If so, skip missed */
-               unsigned long missed = e->portid ? 0 : e->missed;
-
-               if (!((eventmask | missed) & e->ctmask))
-                       goto out_unlock;
-
-               ret = notify->fcn(eventmask | missed, &item);
-               if (unlikely(ret < 0 || missed)) {
-                       spin_lock_bh(&ct->lock);
-                       if (ret < 0) {
-                               /* This is a destroy event that has been
-                                * triggered by a process, we store the PORTID
-                                * to include it in the retransmission.
-                                */
-                               if (eventmask & (1 << IPCT_DESTROY)) {
-                                       if (e->portid == 0 && portid != 0)
-                                               e->portid = portid;
-                                       e->state = NFCT_ECACHE_DESTROY_FAIL;
-                               } else {
-                                       e->missed |= eventmask;
-                               }
+       memset(&item, 0, sizeof(item));
+
+       item.ct = ct;
+       item.portid = e->portid ? e->portid : portid;
+       item.report = report;
+
+       /* This is a resent of a destroy event? If so, skip missed */
+       missed = e->portid ? 0 : e->missed;
+
+       if (!((eventmask | missed) & e->ctmask))
+               goto out_unlock;
+
+       ret = notify->fcn(eventmask | missed, &item);
+       if (unlikely(ret < 0 || missed)) {
+               spin_lock_bh(&ct->lock);
+               if (ret < 0) {
+                       /* This is a destroy event that has been
+                        * triggered by a process, we store the PORTID
+                        * to include it in the retransmission.
+                        */
+                       if (eventmask & (1 << IPCT_DESTROY)) {
+                               if (e->portid == 0 && portid != 0)
+                                       e->portid = portid;
+                               e->state = NFCT_ECACHE_DESTROY_FAIL;
                        } else {
-                               e->missed &= ~missed;
+                               e->missed |= eventmask;
                        }
-                       spin_unlock_bh(&ct->lock);
+               } else {
+                       e->missed &= ~missed;
                }
+               spin_unlock_bh(&ct->lock);
        }
 out_unlock:
        rcu_read_unlock();
index eb35c61..43b891a 100644 (file)
@@ -706,7 +706,7 @@ static size_t ctnetlink_nlmsg_size(const struct nf_conn *ct)
 }
 
 static int
-ctnetlink_conntrack_event(unsigned int events, struct nf_ct_event *item)
+ctnetlink_conntrack_event(unsigned int events, const struct nf_ct_event *item)
 {
        const struct nf_conntrack_zone *zone;
        struct net *net;