aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/atm
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/atm')
-rw-r--r--drivers/atm/solos-pci.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/drivers/atm/solos-pci.c b/drivers/atm/solos-pci.c
index 6174965d9a4d..f916ddf63938 100644
--- a/drivers/atm/solos-pci.c
+++ b/drivers/atm/solos-pci.c
@@ -781,7 +781,8 @@ static struct atm_vcc *find_vcc(struct atm_dev *dev, short vpi, int vci)
781 sk_for_each(s, node, head) { 781 sk_for_each(s, node, head) {
782 vcc = atm_sk(s); 782 vcc = atm_sk(s);
783 if (vcc->dev == dev && vcc->vci == vci && 783 if (vcc->dev == dev && vcc->vci == vci &&
784 vcc->vpi == vpi && vcc->qos.rxtp.traffic_class != ATM_NONE) 784 vcc->vpi == vpi && vcc->qos.rxtp.traffic_class != ATM_NONE &&
785 test_bit(ATM_VF_READY, &vcc->flags))
785 goto out; 786 goto out;
786 } 787 }
787 vcc = NULL; 788 vcc = NULL;
@@ -907,6 +908,10 @@ static void pclose(struct atm_vcc *vcc)
907 clear_bit(ATM_VF_ADDR, &vcc->flags); 908 clear_bit(ATM_VF_ADDR, &vcc->flags);
908 clear_bit(ATM_VF_READY, &vcc->flags); 909 clear_bit(ATM_VF_READY, &vcc->flags);
909 910
911 /* Hold up vcc_destroy_socket() (our caller) until solos_bh() in the
912 tasklet has finished processing any incoming packets (and, more to
913 the point, using the vcc pointer). */
914 tasklet_unlock_wait(&card->tlet);
910 return; 915 return;
911} 916}
912 917