atm: sk_wmem_alloc initial value is one
authorEric Dumazet <eric.dumazet@gmail.com>
Thu, 18 Jun 2009 02:06:12 +0000 (19:06 -0700)
committerDavid S. Miller <davem@davemloft.net>
Thu, 18 Jun 2009 07:29:12 +0000 (00:29 -0700)
commit 2b85a34e911bf483c27cfdd124aeb1605145dc80
(net: No more expensive sock_hold()/sock_put() on each tx)
changed initial sk_wmem_alloc value.

This broke net/atm since this protocol assumed a null
initial value. This patch makes necessary changes.

Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/atm/common.c
net/atm/ioctl.c
net/atm/proc.c
net/atm/raw.c

index d34edbe754c8059907e27259a7462ee71a64a13f..c1c97936192c730d8f68431a782f8695c43504a3 100644 (file)
@@ -62,15 +62,15 @@ static struct sk_buff *alloc_tx(struct atm_vcc *vcc,unsigned int size)
        struct sk_buff *skb;
        struct sock *sk = sk_atm(vcc);
 
-       if (atomic_read(&sk->sk_wmem_alloc) && !atm_may_send(vcc, size)) {
+       if (sk_wmem_alloc_get(sk) && !atm_may_send(vcc, size)) {
                pr_debug("Sorry: wmem_alloc = %d, size = %d, sndbuf = %d\n",
-                       atomic_read(&sk->sk_wmem_alloc), size,
+                       sk_wmem_alloc_get(sk), size,
                        sk->sk_sndbuf);
                return NULL;
        }
-       while (!(skb = alloc_skb(size,GFP_KERNEL))) schedule();
-       pr_debug("AlTx %d += %d\n", atomic_read(&sk->sk_wmem_alloc),
-               skb->truesize);
+       while (!(skb = alloc_skb(size, GFP_KERNEL)))
+               schedule();
+       pr_debug("AlTx %d += %d\n", sk_wmem_alloc_get(sk), skb->truesize);
        atomic_add(skb->truesize, &sk->sk_wmem_alloc);
        return skb;
 }
@@ -145,7 +145,7 @@ int vcc_create(struct net *net, struct socket *sock, int protocol, int family)
        memset(&vcc->local,0,sizeof(struct sockaddr_atmsvc));
        memset(&vcc->remote,0,sizeof(struct sockaddr_atmsvc));
        vcc->qos.txtp.max_sdu = 1 << 16; /* for meta VCs */
-       atomic_set(&sk->sk_wmem_alloc, 0);
+       atomic_set(&sk->sk_wmem_alloc, 1);
        atomic_set(&sk->sk_rmem_alloc, 0);
        vcc->push = NULL;
        vcc->pop = NULL;
index 76ed3c8d26e603935754e71460213ef701165af5..4da8892ced5f2884a02fdef7004c93d1254aac08 100644 (file)
@@ -63,8 +63,7 @@ static int do_vcc_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg
                                error =  -EINVAL;
                                goto done;
                        }
-                       error = put_user(sk->sk_sndbuf -
-                                        atomic_read(&sk->sk_wmem_alloc),
+                       error = put_user(sk->sk_sndbuf - sk_wmem_alloc_get(sk),
                                         (int __user *) argp) ? -EFAULT : 0;
                        goto done;
                case SIOCINQ:
index e7b3b273907d197b1a64ac8d1cd9c1ce0c3edc16..38de5ff61ecde7b94b79605038b0c300450f75cd 100644 (file)
@@ -204,8 +204,8 @@ static void vcc_info(struct seq_file *seq, struct atm_vcc *vcc)
                        seq_printf(seq, "%3d", sk->sk_family);
        }
        seq_printf(seq, " %04lx  %5d %7d/%7d %7d/%7d [%d]\n", vcc->flags, sk->sk_err,
-                 atomic_read(&sk->sk_wmem_alloc), sk->sk_sndbuf,
-                 atomic_read(&sk->sk_rmem_alloc), sk->sk_rcvbuf,
+                 sk_wmem_alloc_get(sk), sk->sk_sndbuf,
+                 sk_rmem_alloc_get(sk), sk->sk_rcvbuf,
                  atomic_read(&sk->sk_refcnt));
 }
 
index b0a2d8cb67447d70bed4b87b89b657c1c55d8f2c..cbfcc71a17b149e9a1729232f99022c22be87d12 100644 (file)
@@ -33,7 +33,7 @@ static void atm_pop_raw(struct atm_vcc *vcc,struct sk_buff *skb)
        struct sock *sk = sk_atm(vcc);
 
        pr_debug("APopR (%d) %d -= %d\n", vcc->vci,
-               atomic_read(&sk->sk_wmem_alloc), skb->truesize);
+               sk_wmem_alloc_get(sk), skb->truesize);
        atomic_sub(skb->truesize, &sk->sk_wmem_alloc);
        dev_kfree_skb_any(skb);
        sk->sk_write_space(sk);