X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=net%2Fatm%2Fsignaling.c;fp=net%2Fatm%2Fsignaling.c;h=f7c449ac1800cffe9cb355806886f7d1d19e8950;hb=f7f1b0f1e2fbadeab12d24236000e778aa9b1ead;hp=0ecb4a4f66d0e384e1ef9d5c218c01280dc73434;hpb=e3f6fb6212a7102bdb56ba38fa1e98fe72950475;p=linux-2.6.git diff --git a/net/atm/signaling.c b/net/atm/signaling.c index 0ecb4a4f6..f7c449ac1 100644 --- a/net/atm/signaling.c +++ b/net/atm/signaling.c @@ -62,8 +62,8 @@ static void sigd_put_skb(struct sk_buff *skb) } #endif atm_force_charge(sigd,skb->truesize); - skb_queue_tail(&sigd->sk->sk_receive_queue,skb); - sigd->sk->sk_data_ready(sigd->sk, skb->len); + skb_queue_tail(&sk_atm(sigd)->sk_receive_queue,skb); + sk_atm(sigd)->sk_data_ready(sk_atm(sigd), skb->len); } @@ -97,15 +97,18 @@ static int sigd_send(struct atm_vcc *vcc,struct sk_buff *skb) { struct atmsvc_msg *msg; struct atm_vcc *session_vcc; + struct sock *sk; msg = (struct atmsvc_msg *) skb->data; - atomic_sub(skb->truesize, &vcc->sk->sk_wmem_alloc); + atomic_sub(skb->truesize, &sk_atm(vcc)->sk_wmem_alloc); DPRINTK("sigd_send %d (0x%lx)\n",(int) msg->type, (unsigned long) msg->vcc); vcc = *(struct atm_vcc **) &msg->vcc; + sk = sk_atm(vcc); + switch (msg->type) { case as_okay: - vcc->sk->sk_err = -msg->reply; + sk->sk_err = -msg->reply; clear_bit(ATM_VF_WAITING, &vcc->flags); if (!*vcc->local.sas_addr.prv && !*vcc->local.sas_addr.pub) { @@ -126,25 +129,25 @@ static int sigd_send(struct atm_vcc *vcc,struct sk_buff *skb) case as_error: clear_bit(ATM_VF_REGIS,&vcc->flags); clear_bit(ATM_VF_READY,&vcc->flags); - vcc->sk->sk_err = -msg->reply; + sk->sk_err = -msg->reply; clear_bit(ATM_VF_WAITING, &vcc->flags); break; case as_indicate: vcc = *(struct atm_vcc **) &msg->listen_vcc; + sk = sk_atm(vcc); DPRINTK("as_indicate!!!\n"); - lock_sock(vcc->sk); - if (vcc->sk->sk_ack_backlog == - vcc->sk->sk_max_ack_backlog) { + lock_sock(sk); + if (sk_acceptq_is_full(sk)) { sigd_enq(NULL,as_reject,vcc,NULL,NULL); dev_kfree_skb(skb); goto as_indicate_complete; } - vcc->sk->sk_ack_backlog++; - skb_queue_tail(&vcc->sk->sk_receive_queue, skb); - DPRINTK("waking vcc->sk->sk_sleep 0x%p\n", vcc->sk->sk_sleep); - vcc->sk->sk_state_change(vcc->sk); + sk->sk_ack_backlog++; + skb_queue_tail(&sk->sk_receive_queue, skb); + DPRINTK("waking sk->sk_sleep 0x%p\n", sk->sk_sleep); + sk->sk_state_change(sk); as_indicate_complete: - release_sock(vcc->sk); + release_sock(sk); return 0; case as_close: set_bit(ATM_VF_RELEASED,&vcc->flags); @@ -155,7 +158,7 @@ as_indicate_complete: break; case as_addparty: case as_dropparty: - vcc->sk->sk_err_soft = msg->reply; /* < 0 failure, otherwise ep_ref */ + sk->sk_err_soft = msg->reply; /* < 0 failure, otherwise ep_ref */ clear_bit(ATM_VF_WAITING, &vcc->flags); break; default: @@ -163,7 +166,7 @@ as_indicate_complete: (int) msg->type); return -EINVAL; } - vcc->sk->sk_state_change(vcc->sk); + sk->sk_state_change(sk); out: dev_kfree_skb(skb); return 0; @@ -213,7 +216,7 @@ void sigd_enq(struct atm_vcc *vcc,enum atmsvc_msg_type type, static void purge_vcc(struct atm_vcc *vcc) { - if (vcc->sk->sk_family == PF_ATMSVC && + if (sk_atm(vcc)->sk_family == PF_ATMSVC && !test_bit(ATM_VF_META,&vcc->flags)) { set_bit(ATM_VF_RELEASED,&vcc->flags); vcc_release_async(vcc, -EUNATCH); @@ -229,9 +232,9 @@ static void sigd_close(struct atm_vcc *vcc) DPRINTK("sigd_close\n"); sigd = NULL; - if (skb_peek(&vcc->sk->sk_receive_queue)) + if (skb_peek(&sk_atm(vcc)->sk_receive_queue)) printk(KERN_ERR "sigd_close: closing with requests pending\n"); - skb_queue_purge(&vcc->sk->sk_receive_queue); + skb_queue_purge(&sk_atm(vcc)->sk_receive_queue); read_lock(&vcc_sklist_lock); for(i = 0; i < VCC_HTABLE_SIZE; ++i) { @@ -268,7 +271,7 @@ int sigd_attach(struct atm_vcc *vcc) DPRINTK("sigd_attach\n"); sigd = vcc; vcc->dev = &sigd_dev; - vcc_insert_socket(vcc->sk); + vcc_insert_socket(sk_atm(vcc)); set_bit(ATM_VF_META,&vcc->flags); set_bit(ATM_VF_READY,&vcc->flags); #ifdef WAIT_FOR_DEMON