[netfilter-cvslog] r6846 - in
trunk/patch-o-matic-ng/patchlets/ROUTE/linux-2.6/net:
ipv4/netfilter ipv6/netfilter
kaber at trash.net
kaber at trash.net
Thu May 24 20:46:56 CEST 2007
Author: kaber at trash.net
Date: 2007-05-24 20:46:54 +0200 (Thu, 24 May 2007)
New Revision: 6846
Modified:
trunk/patch-o-matic-ng/patchlets/ROUTE/linux-2.6/net/ipv4/netfilter/ipt_ROUTE.c
trunk/patch-o-matic-ng/patchlets/ROUTE/linux-2.6/net/ipv6/netfilter/ip6t_ROUTE.c
Log:
[PATCH]: ROUTE: convert hh_lock to seqlock
hh_cache's lock has been converted to a seqlock in recent kernels.
Signed-off-by: Robert S. Edmonds <edmonds at debian.org>
Modified: trunk/patch-o-matic-ng/patchlets/ROUTE/linux-2.6/net/ipv4/netfilter/ipt_ROUTE.c
===================================================================
--- trunk/patch-o-matic-ng/patchlets/ROUTE/linux-2.6/net/ipv4/netfilter/ipt_ROUTE.c 2007-05-24 11:32:53 UTC (rev 6845)
+++ trunk/patch-o-matic-ng/patchlets/ROUTE/linux-2.6/net/ipv4/netfilter/ipt_ROUTE.c 2007-05-24 18:46:54 UTC (rev 6846)
@@ -118,6 +118,7 @@
struct hh_cache *hh = dst->hh;
struct net_device *dev = dst->dev;
int hh_len = LL_RESERVED_SPACE(dev);
+ unsigned seq;
/* Be paranoid, rather than too clever. */
if (unlikely(skb_headroom(skb) < hh_len && dev->hard_header)) {
@@ -135,12 +136,13 @@
}
if (hh) {
- int hh_alen;
+ do {
+ int hh_alen;
- read_lock_bh(&hh->hh_lock);
- hh_alen = HH_DATA_ALIGN(hh->hh_len);
- memcpy(skb->data - hh_alen, hh->hh_data, hh_alen);
- read_unlock_bh(&hh->hh_lock);
+ seq = read_seqbegin(&hh->hh_lock);
+ hh_alen = HH_DATA_ALIGN(hh->hh_len);
+ memcpy(skb->data - hh_alen, hh->hh_data, hh_alen);
+ } while (read_seqretry(&hh->hh_lock, seq));
skb_push(skb, hh->hh_len);
hh->hh_output(skb);
} else if (dst->neighbour)
Modified: trunk/patch-o-matic-ng/patchlets/ROUTE/linux-2.6/net/ipv6/netfilter/ip6t_ROUTE.c
===================================================================
--- trunk/patch-o-matic-ng/patchlets/ROUTE/linux-2.6/net/ipv6/netfilter/ip6t_ROUTE.c 2007-05-24 11:32:53 UTC (rev 6845)
+++ trunk/patch-o-matic-ng/patchlets/ROUTE/linux-2.6/net/ipv6/netfilter/ip6t_ROUTE.c 2007-05-24 18:46:54 UTC (rev 6846)
@@ -120,11 +120,13 @@
{
struct dst_entry *dst = skb->dst;
struct hh_cache *hh = dst->hh;
+ unsigned seq;
if (hh) {
- read_lock_bh(&hh->hh_lock);
- memcpy(skb->data - 16, hh->hh_data, 16);
- read_unlock_bh(&hh->hh_lock);
+ do {
+ seq = read_seqbegin(&hh->hh_lock);
+ memcpy(skb->data - 16, hh->hh_data, 16);
+ } while (read_seqretry(&hh->hh_lock, seq));
skb_push(skb, hh->hh_len);
hh->hh_output(skb);
} else if (dst->neighbour)
More information about the netfilter-cvslog
mailing list