Skip to content

Commit

Permalink
[NETFILTER]: nfnetlink_log: flush queue early
Browse files Browse the repository at this point in the history
If queue is filled to its threshold, then flush it right away instead
of waiting for timer or next packet.

Signed-off-by: Michal Miroslaw <mirq-linux@rere.qmqm.pl>
Signed-off-by: Patrick McHardy <kaber@trash.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Michal Miroslaw authored and David S. Miller committed Oct 10, 2007
1 parent e356706 commit d63b043
Showing 1 changed file with 5 additions and 4 deletions.
9 changes: 5 additions & 4 deletions net/netfilter/nfnetlink_log.c
Original file line number Diff line number Diff line change
Expand Up @@ -644,9 +644,8 @@ nfulnl_log_packet(unsigned int pf,
goto unlock_and_release;
}

if (inst->qlen >= qthreshold ||
(inst->skb && size >
skb_tailroom(inst->skb) - sizeof(struct nfgenmsg))) {
if (inst->skb &&
size > skb_tailroom(inst->skb) - sizeof(struct nfgenmsg)) {
/* either the queue len is too high or we don't have
* enough room in the skb left. flush to userspace. */
UDEBUG("flushing old skb\n");
Expand All @@ -666,9 +665,11 @@ nfulnl_log_packet(unsigned int pf,
__build_packet_message(inst, skb, data_len, pf,
hooknum, in, out, li, prefix, plen);

if (inst->qlen >= qthreshold)
__nfulnl_flush(inst);
/* timer_pending always called within inst->lock, so there
* is no chance of a race here */
if (!timer_pending(&inst->timer)) {
else if (!timer_pending(&inst->timer)) {
instance_get(inst);
inst->timer.expires = jiffies + (inst->flushtimeout*HZ/100);
add_timer(&inst->timer);
Expand Down

0 comments on commit d63b043

Please sign in to comment.