Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 202942
b: refs/heads/master
c: c463ac9
h: refs/heads/master
v: v3
  • Loading branch information
Eric Dumazet authored and Patrick McHardy committed Jun 9, 2010
1 parent f03c805 commit 24c6779
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 20 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 144ad2a6c56b6109ff0f64074863ae5cf1c1698a
refs/heads/master: c463ac972315a0c86bb20b8d35225baa75caf899
33 changes: 14 additions & 19 deletions trunk/net/netfilter/nfnetlink_queue.c
Original file line number Diff line number Diff line change
Expand Up @@ -46,17 +46,19 @@ struct nfqnl_instance {
int peer_pid;
unsigned int queue_maxlen;
unsigned int copy_range;
unsigned int queue_total;
unsigned int queue_dropped;
unsigned int queue_user_dropped;

unsigned int id_sequence; /* 'sequence' of pkt ids */

u_int16_t queue_num; /* number of this queue */
u_int8_t copy_mode;

spinlock_t lock;

/*
* Following fields are dirtied for each queued packet,
* keep them in same cache line if possible.
*/
spinlock_t lock;
unsigned int queue_total;
atomic_t id_sequence; /* 'sequence' of pkt ids */
struct list_head queue_list; /* packets in queue */
};

Expand Down Expand Up @@ -238,32 +240,24 @@ nfqnl_build_packet_message(struct nfqnl_instance *queue,

outdev = entry->outdev;

spin_lock_bh(&queue->lock);

switch ((enum nfqnl_config_mode)queue->copy_mode) {
switch ((enum nfqnl_config_mode)ACCESS_ONCE(queue->copy_mode)) {
case NFQNL_COPY_META:
case NFQNL_COPY_NONE:
break;

case NFQNL_COPY_PACKET:
if (entskb->ip_summed == CHECKSUM_PARTIAL &&
skb_checksum_help(entskb)) {
spin_unlock_bh(&queue->lock);
skb_checksum_help(entskb))
return NULL;
}
if (queue->copy_range == 0
|| queue->copy_range > entskb->len)

data_len = ACCESS_ONCE(queue->copy_range);
if (data_len == 0 || data_len > entskb->len)
data_len = entskb->len;
else
data_len = queue->copy_range;

size += nla_total_size(data_len);
break;
}

entry->id = queue->id_sequence++;

spin_unlock_bh(&queue->lock);

skb = alloc_skb(size, GFP_ATOMIC);
if (!skb)
Expand All @@ -278,6 +272,7 @@ nfqnl_build_packet_message(struct nfqnl_instance *queue,
nfmsg->version = NFNETLINK_V0;
nfmsg->res_id = htons(queue->queue_num);

entry->id = atomic_inc_return(&queue->id_sequence);
pmsg.packet_id = htonl(entry->id);
pmsg.hw_protocol = entskb->protocol;
pmsg.hook = entry->hook;
Expand Down Expand Up @@ -866,7 +861,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,
inst->id_sequence, 1);
atomic_read(&inst->id_sequence), 1);
}

static const struct seq_operations nfqnl_seq_ops = {
Expand Down

0 comments on commit 24c6779

Please sign in to comment.