From: Patrick McHardy Date: Wed, 5 Dec 2007 09:28:10 +0000 (-0800) Subject: [NETFILTER]: nfnetlink_queue: avoid unnecessary atomic operation X-Git-Tag: v2.6.25-rc1~1162^2~1232 X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e48b9b2fb383879a5d758d526b5eb8de4509f467;p=linux-2.6 [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: Patrick McHardy Signed-off-by: David S. Miller --- diff --git a/net/netfilter/nfnetlink_queue.c b/net/netfilter/nfnetlink_queue.c index d9ce3942af..bd18de72e3 100644 --- a/net/netfilter/nfnetlink_queue.c +++ b/net/netfilter/nfnetlink_queue.c @@ -56,7 +56,7 @@ struct nfqnl_instance { unsigned int queue_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_int8_t copy_mode; @@ -139,7 +139,6 @@ instance_create(u_int16_t queue_num, int pid) inst->queue_maxlen = NFQNL_QMAX_DEFAULT; inst->copy_range = 0xfffff; inst->copy_mode = NFQNL_COPY_NONE; - atomic_set(&inst->id_sequence, 0); /* needs to be two, since we _put() after creation */ atomic_set(&inst->use, 2); spin_lock_init(&inst->lock); @@ -340,6 +339,8 @@ nfqnl_build_packet_message(struct nfqnl_instance *queue, return NULL; } + entry->id = queue->id_sequence++; + spin_unlock_bh(&queue->lock); skb = alloc_skb(size, GFP_ATOMIC); @@ -496,8 +497,6 @@ nfqnl_enqueue_packet(struct nf_queue_entry *entry, unsigned int queuenum) goto err_out_put; } - entry->id = atomic_inc_return(&queue->id_sequence); - nskb = nfqnl_build_packet_message(queue, entry, &status); if (nskb == NULL) goto err_out_put; @@ -948,7 +947,7 @@ static int seq_show(struct seq_file *s, void *v) inst->peer_pid, inst->queue_total, inst->copy_mode, inst->copy_range, inst->queue_dropped, inst->queue_user_dropped, - atomic_read(&inst->id_sequence), + inst->id_sequence, atomic_read(&inst->use)); }