Commit e48b9b2f authored by Patrick McHardy's avatar Patrick McHardy Committed by David S. Miller

[NETFILTER]: nfnetlink_queue: avoid unnecessary atomic operation

The sequence counter doesn't need to be an atomic_t, just move the increment
inside the locked section.
Signed-off-by: default avatarPatrick McHardy <kaber@trash.net>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent f9c63990
...@@ -56,7 +56,7 @@ struct nfqnl_instance { ...@@ -56,7 +56,7 @@ struct nfqnl_instance {
unsigned int queue_dropped; unsigned int queue_dropped;
unsigned int queue_user_dropped; unsigned int queue_user_dropped;
atomic_t id_sequence; /* 'sequence' of pkt ids */ unsigned int id_sequence; /* 'sequence' of pkt ids */
u_int16_t queue_num; /* number of this queue */ u_int16_t queue_num; /* number of this queue */
u_int8_t copy_mode; u_int8_t copy_mode;
...@@ -139,7 +139,6 @@ instance_create(u_int16_t queue_num, int pid) ...@@ -139,7 +139,6 @@ instance_create(u_int16_t queue_num, int pid)
inst->queue_maxlen = NFQNL_QMAX_DEFAULT; inst->queue_maxlen = NFQNL_QMAX_DEFAULT;
inst->copy_range = 0xfffff; inst->copy_range = 0xfffff;
inst->copy_mode = NFQNL_COPY_NONE; inst->copy_mode = NFQNL_COPY_NONE;
atomic_set(&inst->id_sequence, 0);
/* needs to be two, since we _put() after creation */ /* needs to be two, since we _put() after creation */
atomic_set(&inst->use, 2); atomic_set(&inst->use, 2);
spin_lock_init(&inst->lock); spin_lock_init(&inst->lock);
...@@ -340,6 +339,8 @@ nfqnl_build_packet_message(struct nfqnl_instance *queue, ...@@ -340,6 +339,8 @@ nfqnl_build_packet_message(struct nfqnl_instance *queue,
return NULL; return NULL;
} }
entry->id = queue->id_sequence++;
spin_unlock_bh(&queue->lock); spin_unlock_bh(&queue->lock);
skb = alloc_skb(size, GFP_ATOMIC); skb = alloc_skb(size, GFP_ATOMIC);
...@@ -496,8 +497,6 @@ nfqnl_enqueue_packet(struct nf_queue_entry *entry, unsigned int queuenum) ...@@ -496,8 +497,6 @@ nfqnl_enqueue_packet(struct nf_queue_entry *entry, unsigned int queuenum)
goto err_out_put; goto err_out_put;
} }
entry->id = atomic_inc_return(&queue->id_sequence);
nskb = nfqnl_build_packet_message(queue, entry, &status); nskb = nfqnl_build_packet_message(queue, entry, &status);
if (nskb == NULL) if (nskb == NULL)
goto err_out_put; goto err_out_put;
...@@ -948,7 +947,7 @@ static int seq_show(struct seq_file *s, void *v) ...@@ -948,7 +947,7 @@ static int seq_show(struct seq_file *s, void *v)
inst->peer_pid, inst->queue_total, inst->peer_pid, inst->queue_total,
inst->copy_mode, inst->copy_range, inst->copy_mode, inst->copy_range,
inst->queue_dropped, inst->queue_user_dropped, inst->queue_dropped, inst->queue_user_dropped,
atomic_read(&inst->id_sequence), inst->id_sequence,
atomic_read(&inst->use)); atomic_read(&inst->use));
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment