@ -42,7 +42,6 @@
# include <linux/uio.h>
# include <linux/slab.h>
# include <linux/skbuff.h>
# include <linux/smp_lock.h>
# include <linux/socket.h>
# include <linux/sockios.h>
# include <linux/string.h>
@ -1299,7 +1298,7 @@ static int ipx_setsockopt(struct socket *sock, int level, int optname,
int opt ;
int rc = - EINVAL ;
lock_kernel ( ) ;
lock_sock ( sk ) ;
if ( optlen ! = sizeof ( int ) )
goto out ;
@ -1314,7 +1313,7 @@ static int ipx_setsockopt(struct socket *sock, int level, int optname,
ipx_sk ( sk ) - > type = opt ;
rc = 0 ;
out :
unlock_kernel ( ) ;
release_sock ( sk ) ;
return rc ;
}
@ -1326,7 +1325,7 @@ static int ipx_getsockopt(struct socket *sock, int level, int optname,
int len ;
int rc = - ENOPROTOOPT ;
lock_kernel ( ) ;
lock_sock ( sk ) ;
if ( ! ( level = = SOL_IPX & & optname = = IPX_TYPE ) )
goto out ;
@ -1347,7 +1346,7 @@ static int ipx_getsockopt(struct socket *sock, int level, int optname,
rc = 0 ;
out :
unlock_kernel ( ) ;
release_sock ( sk ) ;
return rc ;
}
@ -1396,7 +1395,7 @@ static int ipx_release(struct socket *sock)
if ( ! sk )
goto out ;
lock_kernel ( ) ;
lock_sock ( sk ) ;
if ( ! sock_flag ( sk , SOCK_DEAD ) )
sk - > sk_state_change ( sk ) ;
@ -1404,7 +1403,7 @@ static int ipx_release(struct socket *sock)
sock - > sk = NULL ;
sk_refcnt_debug_release ( sk ) ;
ipx_destroy_socket ( sk ) ;
unlock_kernel ( ) ;
release_sock ( sk ) ;
out :
return 0 ;
}
@ -1530,11 +1529,12 @@ out:
static int ipx_bind ( struct socket * sock , struct sockaddr * uaddr , int addr_len )
{
struct sock * sk = sock - > sk ;
int rc ;
lock_kernel ( ) ;
lock_sock ( sk ) ;
rc = __ipx_bind ( sock , uaddr , addr_len ) ;
unlock_kernel ( ) ;
release_sock ( sk ) ;
return rc ;
}
@ -1551,7 +1551,7 @@ static int ipx_connect(struct socket *sock, struct sockaddr *uaddr,
sk - > sk_state = TCP_CLOSE ;
sock - > state = SS_UNCONNECTED ;
lock_kernel ( ) ;
lock_sock ( sk ) ;
if ( addr_len ! = sizeof ( * addr ) )
goto out ;
addr = ( struct sockaddr_ipx * ) uaddr ;
@ -1598,7 +1598,7 @@ static int ipx_connect(struct socket *sock, struct sockaddr *uaddr,
ipxrtr_put ( rt ) ;
rc = 0 ;
out :
unlock_kernel ( ) ;
release_sock ( sk ) ;
return rc ;
}
@ -1614,7 +1614,7 @@ static int ipx_getname(struct socket *sock, struct sockaddr *uaddr,
* uaddr_len = sizeof ( struct sockaddr_ipx ) ;
lock_kernel ( ) ;
lock_sock ( sk ) ;
if ( peer ) {
rc = - ENOTCONN ;
if ( sk - > sk_state ! = TCP_ESTABLISHED )
@ -1649,19 +1649,7 @@ static int ipx_getname(struct socket *sock, struct sockaddr *uaddr,
rc = 0 ;
out :
unlock_kernel ( ) ;
return rc ;
}
static unsigned int ipx_datagram_poll ( struct file * file , struct socket * sock ,
poll_table * wait )
{
int rc ;
lock_kernel ( ) ;
rc = datagram_poll ( file , sock , wait ) ;
unlock_kernel ( ) ;
release_sock ( sk ) ;
return rc ;
}
@ -1736,7 +1724,7 @@ static int ipx_sendmsg(struct kiocb *iocb, struct socket *sock,
int rc = - EINVAL ;
int flags = msg - > msg_flags ;
lock_kernel ( ) ;
lock_sock ( sk ) ;
/* Socket gets bound below anyway */
/* if (sk->sk_zapped)
return - EIO ; */ /* Socket not bound */
@ -1788,7 +1776,7 @@ static int ipx_sendmsg(struct kiocb *iocb, struct socket *sock,
if ( rc > = 0 )
rc = len ;
out :
unlock_kernel ( ) ;
release_sock ( sk ) ;
return rc ;
}
@ -1803,7 +1791,7 @@ static int ipx_recvmsg(struct kiocb *iocb, struct socket *sock,
struct sk_buff * skb ;
int copied , rc ;
lock_kernel ( ) ;
lock_sock ( sk ) ;
/* put the autobinding in */
if ( ! ipxs - > port ) {
struct sockaddr_ipx uaddr ;
@ -1862,7 +1850,7 @@ static int ipx_recvmsg(struct kiocb *iocb, struct socket *sock,
out_free :
skb_free_datagram ( sk , skb ) ;
out :
unlock_kernel ( ) ;
release_sock ( sk ) ;
return rc ;
}
@ -1874,7 +1862,7 @@ static int ipx_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
struct sock * sk = sock - > sk ;
void __user * argp = ( void __user * ) arg ;
lock_kernel ( ) ;
lock_sock ( sk ) ;
switch ( cmd ) {
case TIOCOUTQ :
amount = sk - > sk_sndbuf - sk_wmem_alloc_get ( sk ) ;
@ -1937,7 +1925,7 @@ static int ipx_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
rc = - ENOIOCTLCMD ;
break ;
}
unlock_kernel ( ) ;
release_sock ( sk ) ;
return rc ;
}
@ -1984,7 +1972,7 @@ static const struct proto_ops ipx_dgram_ops = {
. socketpair = sock_no_socketpair ,
. accept = sock_no_accept ,
. getname = ipx_getname ,
. poll = ipx_ datagram_poll,
. poll = datagram_poll ,
. ioctl = ipx_ioctl ,
# ifdef CONFIG_COMPAT
. compat_ioctl = ipx_compat_ioctl ,