patch-2.4.21 linux-2.4.21/net/802/tr.c
Next file: linux-2.4.21/net/8021q/vlan.c
Previous file: linux-2.4.21/net/802/fc.c
Back to the patch index
Back to the overall index
- Lines: 87
- Date:
2003-06-13 07:51:39.000000000 -0700
- Orig file:
linux-2.4.20/net/802/tr.c
- Orig date:
2002-08-02 17:39:46.000000000 -0700
diff -urN linux-2.4.20/net/802/tr.c linux-2.4.21/net/802/tr.c
@@ -66,8 +66,7 @@
* up a lot.
*/
-rif_cache rif_table[RIF_TABLE_SIZE];
-
+static rif_cache rif_table[RIF_TABLE_SIZE];
static spinlock_t rif_lock = SPIN_LOCK_UNLOCKED;
#define RIF_TIMEOUT 60*10*HZ
@@ -93,10 +92,10 @@
int hdr_len;
/*
- * Add the 802.2 SNAP header if IP as the IPv4 code calls
+ * Add the 802.2 SNAP header if IP as the IPv4/IPv6 code calls
* dev->hard_header directly.
*/
- if (type == ETH_P_IP || type == ETH_P_ARP)
+ if (type == ETH_P_IP || type == ETH_P_IPV6 || type == ETH_P_ARP)
{
struct trllc *trllc=(struct trllc *)(trh+1);
@@ -218,6 +217,7 @@
if (trllc->dsap == EXTENDED_SAP &&
(trllc->ethertype == ntohs(ETH_P_IP) ||
+ trllc->ethertype == ntohs(ETH_P_IPV6) ||
trllc->ethertype == ntohs(ETH_P_ARP)))
{
skb_pull(skb, sizeof(struct trllc));
@@ -327,9 +327,9 @@
int i;
unsigned int hash, rii_p = 0;
rif_cache entry;
+ unsigned long flags;
-
- spin_lock_bh(&rif_lock);
+ spin_lock_irqsave(&rif_lock, flags);
/*
* Firstly see if the entry exists
@@ -368,7 +368,7 @@
if(!entry)
{
printk(KERN_DEBUG "tr.c: Couldn't malloc rif cache entry !\n");
- spin_unlock_bh(&rif_lock);
+ spin_unlock_irqrestore(&rif_lock,flags);
return;
}
@@ -410,7 +410,7 @@
}
entry->last_used=jiffies;
}
- spin_unlock_bh(&rif_lock);
+ spin_unlock_irqrestore(&rif_lock,flags);
}
/*
@@ -468,6 +468,7 @@
off_t pos=0;
int size,i,j,rcf_len,segment,brdgnmb;
unsigned long now=jiffies;
+ unsigned long flags;
rif_cache entry;
@@ -476,7 +477,7 @@
pos+=size;
len+=size;
- spin_lock_bh(&rif_lock);
+ spin_lock_irqsave(&rif_lock, flags);
for(i=0;i < RIF_TABLE_SIZE;i++)
{
for(entry=rif_table[i];entry;entry=entry->next) {
@@ -525,7 +526,7 @@
if(pos>offset+length)
break;
}
- spin_unlock_bh(&rif_lock);
+ spin_unlock_irqrestore(&rif_lock,flags);
*start=buffer+(offset-begin); /* Start of wanted data */
len-=(offset-begin); /* Start slop */
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)