From 0803bda1748e01e3ddeda7da42e789558a85f616 Mon Sep 17 00:00:00 2001 From: Michal Miroslaw Date: Fri, 28 Sep 2007 14:44:21 -0700 Subject: [PATCH] --- yaml --- r: 66823 b: refs/heads/master c: e35670614d10588fb9c6ed32ecd55b8242e98872 h: refs/heads/master i: 66821: 39c7e0cc72f5085caf5e77c80772b6f978d0a683 66819: f3104615941f7f6b5b88f2775d92e429af7b754e 66815: df0a3b014cd09c31a05638722b9a887475e2ec96 v: v3 --- [refs] | 2 +- trunk/net/netfilter/nfnetlink_log.c | 30 ++++++++++++++--------------- 2 files changed, 15 insertions(+), 17 deletions(-) diff --git a/[refs] b/[refs] index 32a45a60fab3..fefba698c99c 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 5faa1f4cb5a1f124f76172d775467f4a9db5b452 +refs/heads/master: e35670614d10588fb9c6ed32ecd55b8242e98872 diff --git a/trunk/net/netfilter/nfnetlink_log.c b/trunk/net/netfilter/nfnetlink_log.c index a90a26bd618b..512741afca9f 100644 --- a/trunk/net/netfilter/nfnetlink_log.c +++ b/trunk/net/netfilter/nfnetlink_log.c @@ -188,7 +188,7 @@ instance_create(u_int16_t group_num, int pid) return NULL; } -static int __nfulnl_send(struct nfulnl_instance *inst); +static void __nfulnl_flush(struct nfulnl_instance *inst); static void __instance_destroy(struct nfulnl_instance *inst) @@ -202,17 +202,8 @@ __instance_destroy(struct nfulnl_instance *inst) /* then flush all pending packets from skb */ spin_lock_bh(&inst->lock); - if (inst->skb) { - /* timer "holds" one reference (we have one more) */ - if (del_timer(&inst->timer)) - instance_put(inst); - if (inst->qlen) - __nfulnl_send(inst); - if (inst->skb) { - kfree_skb(inst->skb); - inst->skb = NULL; - } - } + if (inst->skb) + __nfulnl_flush(inst); spin_unlock_bh(&inst->lock); /* and finally put the refcount */ @@ -364,6 +355,16 @@ __nfulnl_send(struct nfulnl_instance *inst) return status; } +static void +__nfulnl_flush(struct nfulnl_instance *inst) +{ + /* timer holds a reference */ + if (del_timer(&inst->timer)) + instance_put(inst); + if (inst->skb) + __nfulnl_send(inst); +} + static void nfulnl_timer(unsigned long data) { struct nfulnl_instance *inst = (struct nfulnl_instance *)data; @@ -650,10 +651,7 @@ nfulnl_log_packet(unsigned int pf, * enough room in the skb left. flush to userspace. */ UDEBUG("flushing old skb\n"); - /* timer "holds" one reference (we have another one) */ - if (del_timer(&inst->timer)) - instance_put(inst); - __nfulnl_send(inst); + __nfulnl_flush(inst); } if (!inst->skb) {