patch-2.4.23 linux-2.4.23/net/atm/atm_misc.c
Next file: linux-2.4.23/net/atm/br2684.c
Previous file: linux-2.4.23/net/atm/addr.c
Back to the patch index
Back to the overall index
- Lines: 60
- Date:
2003-11-28 10:26:21.000000000 -0800
- Orig file:
linux-2.4.22/net/atm/atm_misc.c
- Orig date:
2003-08-25 04:44:44.000000000 -0700
diff -urN linux-2.4.22/net/atm/atm_misc.c linux-2.4.23/net/atm/atm_misc.c
@@ -45,15 +45,20 @@
static int check_ci(struct atm_vcc *vcc,short vpi,int vci)
{
+ struct sock *s;
struct atm_vcc *walk;
- for (walk = vcc->dev->vccs; walk; walk = walk->next)
+ for (s = vcc_sklist; s; s = s->next) {
+ walk = s->protinfo.af_atm;
+ if (walk->dev != vcc->dev)
+ continue;
if (test_bit(ATM_VF_ADDR,&walk->flags) && walk->vpi == vpi &&
walk->vci == vci && ((walk->qos.txtp.traffic_class !=
ATM_NONE && vcc->qos.txtp.traffic_class != ATM_NONE) ||
(walk->qos.rxtp.traffic_class != ATM_NONE &&
vcc->qos.rxtp.traffic_class != ATM_NONE)))
return -EADDRINUSE;
+ }
/* allow VCCs with same VPI/VCI iff they don't collide on
TX/RX (but we may refuse such sharing for other reasons,
e.g. if protocol requires to have both channels) */
@@ -63,17 +68,16 @@
int atm_find_ci(struct atm_vcc *vcc,short *vpi,int *vci)
{
- unsigned long flags;
static short p = 0; /* poor man's per-device cache */
static int c = 0;
short old_p;
int old_c;
int err;
- spin_lock_irqsave(&vcc->dev->lock, flags);
+ read_lock(&vcc_sklist_lock);
if (*vpi != ATM_VPI_ANY && *vci != ATM_VCI_ANY) {
err = check_ci(vcc,*vpi,*vci);
- spin_unlock_irqrestore(&vcc->dev->lock, flags);
+ read_unlock(&vcc_sklist_lock);
return err;
}
/* last scan may have left values out of bounds for current device */
@@ -88,7 +92,7 @@
if (!check_ci(vcc,p,c)) {
*vpi = p;
*vci = c;
- spin_unlock_irqrestore(&vcc->dev->lock, flags);
+ read_unlock(&vcc_sklist_lock);
return 0;
}
if (*vci == ATM_VCI_ANY) {
@@ -103,7 +107,7 @@
}
}
while (old_p != p || old_c != c);
- spin_unlock_irqrestore(&vcc->dev->lock, flags);
+ read_unlock(&vcc_sklist_lock);
return -EADDRINUSE;
}
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)