aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPatrick McHardy <kaber@trash.net>2008-01-15 02:47:25 -0500
committerDavid S. Miller <davem@davemloft.net>2008-01-28 18:02:37 -0500
commit4a64830af0fd4dbec908cfbab117def5086acd4a (patch)
treefe14178c897058761d20fa47850452aaef9bb8c5
parentefe9f68afeaf2ce12636990a8c811fb1cc23b12b (diff)
[NETFILTER]: nf_conntrack_sctp: don't take sctp_lock once per chunk
Don't take and release the lock once per SCTP chunk, simply hold it the entire time while iterating through the chunks. Signed-off-by: Patrick McHardy <kaber@trash.net> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--net/netfilter/nf_conntrack_proto_sctp.c5
1 files changed, 2 insertions, 3 deletions
diff --git a/net/netfilter/nf_conntrack_proto_sctp.c b/net/netfilter/nf_conntrack_proto_sctp.c
index 7baabc045342..177e8f60aa1c 100644
--- a/net/netfilter/nf_conntrack_proto_sctp.c
+++ b/net/netfilter/nf_conntrack_proto_sctp.c
@@ -325,9 +325,8 @@ static int sctp_packet(struct nf_conn *ct,
325 } 325 }
326 326
327 old_state = new_state = SCTP_CONNTRACK_MAX; 327 old_state = new_state = SCTP_CONNTRACK_MAX;
328 write_lock_bh(&sctp_lock);
328 for_each_sctp_chunk (skb, sch, _sch, offset, dataoff, count) { 329 for_each_sctp_chunk (skb, sch, _sch, offset, dataoff, count) {
329 write_lock_bh(&sctp_lock);
330
331 /* Special cases of Verification tag check (Sec 8.5.1) */ 330 /* Special cases of Verification tag check (Sec 8.5.1) */
332 if (sch->type == SCTP_CID_INIT) { 331 if (sch->type == SCTP_CID_INIT) {
333 /* Sec 8.5.1 (A) */ 332 /* Sec 8.5.1 (A) */
@@ -378,8 +377,8 @@ static int sctp_packet(struct nf_conn *ct,
378 ct->proto.sctp.state = new_state; 377 ct->proto.sctp.state = new_state;
379 if (old_state != new_state) 378 if (old_state != new_state)
380 nf_conntrack_event_cache(IPCT_PROTOINFO, skb); 379 nf_conntrack_event_cache(IPCT_PROTOINFO, skb);
381 write_unlock_bh(&sctp_lock);
382 } 380 }
381 write_unlock_bh(&sctp_lock);
383 382
384 nf_ct_refresh_acct(ct, ctinfo, skb, *sctp_timeouts[new_state]); 383 nf_ct_refresh_acct(ct, ctinfo, skb, *sctp_timeouts[new_state]);
385 384