X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=net%2Fdecnet%2Faf_decnet.c;h=056bac657275f87d7a1ae0ecc120e228d80eb589;hb=6a77f38946aaee1cd85eeec6cf4229b204c15071;hp=e0d5284a7203ebd133ce1e27deed22e2c5ad4b1b;hpb=5273a3df6485dc2ad6aa7ddd441b9a21970f003b;p=linux-2.6.git diff --git a/net/decnet/af_decnet.c b/net/decnet/af_decnet.c index e0d5284a7..056bac657 100644 --- a/net/decnet/af_decnet.c +++ b/net/decnet/af_decnet.c @@ -151,12 +151,12 @@ static void dn_keepalive(struct sock *sk); static kmem_cache_t *dn_sk_cachep; static struct proto_ops dn_proto_ops; -static rwlock_t dn_hash_lock = RW_LOCK_UNLOCKED; +static DEFINE_RWLOCK(dn_hash_lock); static struct hlist_head dn_sk_hash[DN_SK_HASH_SIZE]; static struct hlist_head dn_wild_sk; -static int __dn_setsockopt(struct socket *sock, int level, int optname, char *optval, int optlen, int flags); -static int __dn_getsockopt(struct socket *sock, int level, int optname, char *optval, int *optlen, int flags); +static int __dn_setsockopt(struct socket *sock, int level, int optname, char __user *optval, int optlen, int flags); +static int __dn_getsockopt(struct socket *sock, int level, int optname, char __user *optval, int __user *optlen, int flags); static struct hlist_head *dn_find_list(struct sock *sk) { @@ -246,7 +246,7 @@ static void dn_unhash_sock_bh(struct sock *sk) write_unlock_bh(&dn_hash_lock); } -struct hlist_head *listen_hash(struct sockaddr_dn *addr) +static struct hlist_head *listen_hash(struct sockaddr_dn *addr) { int i; unsigned hash = addr->sdn_objnum; @@ -447,7 +447,7 @@ static void dn_destruct(struct sock *sk) dst_release(xchg(&sk->sk_dst_cache, NULL)); } -struct sock *dn_alloc_sock(struct socket *sock, int gfp) +static struct sock *dn_alloc_sock(struct socket *sock, int gfp) { struct dn_scp *scp; struct sock *sk = sk_alloc(PF_DECnet, gfp, sizeof(struct dn_sock), @@ -578,7 +578,6 @@ int dn_destroy_timer(struct sock *sk) if (sk->sk_socket) return 0; - dn_stop_fast_timer(sk); /* unlikely, but possible that this is runninng */ if ((jiffies - scp->stamp) >= (HZ * decnet_time_wait)) { dn_unhash_sock(sk); sock_put(sk); @@ -631,7 +630,6 @@ disc_reject: default: printk(KERN_DEBUG "DECnet: dn_destroy_sock passed socket in invalid state\n"); case DN_O: - dn_stop_fast_timer(sk); dn_stop_slow_timer(sk); dn_unhash_sock_bh(sk); @@ -1075,7 +1073,7 @@ static int dn_accept(struct socket *sock, struct socket *newsock, int flags) skb = dn_wait_for_connect(sk, &timeo); if (IS_ERR(skb)) { release_sock(sk); - return PTR_ERR(sk); + return PTR_ERR(skb); } } @@ -1212,7 +1210,7 @@ static int dn_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg) { case SIOCGIFADDR: case SIOCSIFADDR: - return dn_dev_ioctl(cmd, (void *)arg); + return dn_dev_ioctl(cmd, (void __user *)arg); case SIOCATMARK: lock_sock(sk); @@ -1226,7 +1224,7 @@ static int dn_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg) amount = sk->sk_sndbuf - atomic_read(&sk->sk_wmem_alloc); if (amount < 0) amount = 0; - err = put_user(amount, (int *)arg); + err = put_user(amount, (int __user *)arg); break; case TIOCINQ: @@ -1244,11 +1242,11 @@ static int dn_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg) } } release_sock(sk); - err = put_user(amount, (int *)arg); + err = put_user(amount, (int __user *)arg); break; default: - err = dev_ioctl(cmd, (void *)arg); + err = dev_ioctl(cmd, (void __user *)arg); break; } @@ -1313,7 +1311,7 @@ out: return err; } -static int dn_setsockopt(struct socket *sock, int level, int optname, char *optval, int optlen) +static int dn_setsockopt(struct socket *sock, int level, int optname, char __user *optval, int optlen) { struct sock *sk = sock->sk; int err; @@ -1325,7 +1323,7 @@ static int dn_setsockopt(struct socket *sock, int level, int optname, char *optv return err; } -static int __dn_setsockopt(struct socket *sock, int level,int optname, char *optval, int optlen, int flags) +static int __dn_setsockopt(struct socket *sock, int level,int optname, char __user *optval, int optlen, int flags) { struct sock *sk = sock->sk; struct dn_scp *scp = DN_SK(sk); @@ -1490,7 +1488,7 @@ static int __dn_setsockopt(struct socket *sock, int level,int optname, char *opt return 0; } -static int dn_getsockopt(struct socket *sock, int level, int optname, char *optval, int *optlen) +static int dn_getsockopt(struct socket *sock, int level, int optname, char __user *optval, int __user *optlen) { struct sock *sk = sock->sk; int err; @@ -1502,7 +1500,7 @@ static int dn_getsockopt(struct socket *sock, int level, int optname, char *optv return err; } -static int __dn_getsockopt(struct socket *sock, int level,int optname, char *optval,int *optlen, int flags) +static int __dn_getsockopt(struct socket *sock, int level,int optname, char __user *optval,int __user *optlen, int flags) { struct sock *sk = sock->sk; struct dn_scp *scp = DN_SK(sk); @@ -1723,7 +1721,7 @@ static int dn_recvmsg(struct kiocb *iocb, struct socket *sock, goto out; if (signal_pending(current)) { - rv = -ERESTARTSYS; + rv = sock_intr_errno(timeo); goto out; } @@ -1905,7 +1903,7 @@ static int dn_sendmsg(struct kiocb *iocb, struct socket *sock, unsigned char fctype; long timeo = sock_sndtimeo(sk, flags & MSG_DONTWAIT); - if (flags & ~(MSG_TRYHARD|MSG_OOB|MSG_DONTWAIT|MSG_EOR|MSG_NOSIGNAL|MSG_MORE)) + if (flags & ~(MSG_TRYHARD|MSG_OOB|MSG_DONTWAIT|MSG_EOR|MSG_NOSIGNAL|MSG_MORE|MSG_CMSG_COMPAT)) return -EOPNOTSUPP; if (addr_len && (addr_len != sizeof(struct sockaddr_dn))) @@ -1957,7 +1955,7 @@ static int dn_sendmsg(struct kiocb *iocb, struct socket *sock, goto out; if (signal_pending(current)) { - err = -ERESTARTSYS; + err = sock_intr_errno(timeo); goto out; } @@ -1992,7 +1990,7 @@ static int dn_sendmsg(struct kiocb *iocb, struct socket *sock, /* * Get a suitably sized skb. */ - skb = dn_alloc_send_skb(sk, &len, flags & MSG_DONTWAIT, &err); + skb = dn_alloc_send_skb(sk, &len, flags & MSG_DONTWAIT, timeo, &err); if (err) break;