42
42
#include <linux/uio.h>
43
43
#include <linux/slab.h>
44
44
#include <linux/skbuff.h>
45
- #include <linux/smp_lock.h>
46
45
#include <linux/socket.h>
47
46
#include <linux/sockios.h>
48
47
#include <linux/string.h>
@@ -1299,7 +1298,7 @@ static int ipx_setsockopt(struct socket *sock, int level, int optname,
1299
1298
int opt ;
1300
1299
int rc = - EINVAL ;
1301
1300
1302
- lock_kernel ( );
1301
+ lock_sock ( sk );
1303
1302
if (optlen != sizeof (int ))
1304
1303
goto out ;
1305
1304
@@ -1314,7 +1313,7 @@ static int ipx_setsockopt(struct socket *sock, int level, int optname,
1314
1313
ipx_sk (sk )-> type = opt ;
1315
1314
rc = 0 ;
1316
1315
out :
1317
- unlock_kernel ( );
1316
+ release_sock ( sk );
1318
1317
return rc ;
1319
1318
}
1320
1319
@@ -1326,7 +1325,7 @@ static int ipx_getsockopt(struct socket *sock, int level, int optname,
1326
1325
int len ;
1327
1326
int rc = - ENOPROTOOPT ;
1328
1327
1329
- lock_kernel ( );
1328
+ lock_sock ( sk );
1330
1329
if (!(level == SOL_IPX && optname == IPX_TYPE ))
1331
1330
goto out ;
1332
1331
@@ -1347,7 +1346,7 @@ static int ipx_getsockopt(struct socket *sock, int level, int optname,
1347
1346
1348
1347
rc = 0 ;
1349
1348
out :
1350
- unlock_kernel ( );
1349
+ release_sock ( sk );
1351
1350
return rc ;
1352
1351
}
1353
1352
@@ -1396,15 +1395,15 @@ static int ipx_release(struct socket *sock)
1396
1395
if (!sk )
1397
1396
goto out ;
1398
1397
1399
- lock_kernel ( );
1398
+ lock_sock ( sk );
1400
1399
if (!sock_flag (sk , SOCK_DEAD ))
1401
1400
sk -> sk_state_change (sk );
1402
1401
1403
1402
sock_set_flag (sk , SOCK_DEAD );
1404
1403
sock -> sk = NULL ;
1405
1404
sk_refcnt_debug_release (sk );
1406
1405
ipx_destroy_socket (sk );
1407
- unlock_kernel ( );
1406
+ release_sock ( sk );
1408
1407
out :
1409
1408
return 0 ;
1410
1409
}
@@ -1530,11 +1529,12 @@ static int __ipx_bind(struct socket *sock,
1530
1529
1531
1530
static int ipx_bind (struct socket * sock , struct sockaddr * uaddr , int addr_len )
1532
1531
{
1532
+ struct sock * sk = sock -> sk ;
1533
1533
int rc ;
1534
1534
1535
- lock_kernel ( );
1535
+ lock_sock ( sk );
1536
1536
rc = __ipx_bind (sock , uaddr , addr_len );
1537
- unlock_kernel ( );
1537
+ release_sock ( sk );
1538
1538
1539
1539
return rc ;
1540
1540
}
@@ -1551,7 +1551,7 @@ static int ipx_connect(struct socket *sock, struct sockaddr *uaddr,
1551
1551
sk -> sk_state = TCP_CLOSE ;
1552
1552
sock -> state = SS_UNCONNECTED ;
1553
1553
1554
- lock_kernel ( );
1554
+ lock_sock ( sk );
1555
1555
if (addr_len != sizeof (* addr ))
1556
1556
goto out ;
1557
1557
addr = (struct sockaddr_ipx * )uaddr ;
@@ -1598,7 +1598,7 @@ static int ipx_connect(struct socket *sock, struct sockaddr *uaddr,
1598
1598
ipxrtr_put (rt );
1599
1599
rc = 0 ;
1600
1600
out :
1601
- unlock_kernel ( );
1601
+ release_sock ( sk );
1602
1602
return rc ;
1603
1603
}
1604
1604
@@ -1614,7 +1614,7 @@ static int ipx_getname(struct socket *sock, struct sockaddr *uaddr,
1614
1614
1615
1615
* uaddr_len = sizeof (struct sockaddr_ipx );
1616
1616
1617
- lock_kernel ( );
1617
+ lock_sock ( sk );
1618
1618
if (peer ) {
1619
1619
rc = - ENOTCONN ;
1620
1620
if (sk -> sk_state != TCP_ESTABLISHED )
@@ -1649,19 +1649,7 @@ static int ipx_getname(struct socket *sock, struct sockaddr *uaddr,
1649
1649
1650
1650
rc = 0 ;
1651
1651
out :
1652
- unlock_kernel ();
1653
- return rc ;
1654
- }
1655
-
1656
- static unsigned int ipx_datagram_poll (struct file * file , struct socket * sock ,
1657
- poll_table * wait )
1658
- {
1659
- int rc ;
1660
-
1661
- lock_kernel ();
1662
- rc = datagram_poll (file , sock , wait );
1663
- unlock_kernel ();
1664
-
1652
+ release_sock (sk );
1665
1653
return rc ;
1666
1654
}
1667
1655
@@ -1736,7 +1724,7 @@ static int ipx_sendmsg(struct kiocb *iocb, struct socket *sock,
1736
1724
int rc = - EINVAL ;
1737
1725
int flags = msg -> msg_flags ;
1738
1726
1739
- lock_kernel ( );
1727
+ lock_sock ( sk );
1740
1728
/* Socket gets bound below anyway */
1741
1729
/* if (sk->sk_zapped)
1742
1730
return -EIO; */ /* Socket not bound */
@@ -1788,7 +1776,7 @@ static int ipx_sendmsg(struct kiocb *iocb, struct socket *sock,
1788
1776
if (rc >= 0 )
1789
1777
rc = len ;
1790
1778
out :
1791
- unlock_kernel ( );
1779
+ release_sock ( sk );
1792
1780
return rc ;
1793
1781
}
1794
1782
@@ -1803,7 +1791,7 @@ static int ipx_recvmsg(struct kiocb *iocb, struct socket *sock,
1803
1791
struct sk_buff * skb ;
1804
1792
int copied , rc ;
1805
1793
1806
- lock_kernel ( );
1794
+ lock_sock ( sk );
1807
1795
/* put the autobinding in */
1808
1796
if (!ipxs -> port ) {
1809
1797
struct sockaddr_ipx uaddr ;
@@ -1862,7 +1850,7 @@ static int ipx_recvmsg(struct kiocb *iocb, struct socket *sock,
1862
1850
out_free :
1863
1851
skb_free_datagram (sk , skb );
1864
1852
out :
1865
- unlock_kernel ( );
1853
+ release_sock ( sk );
1866
1854
return rc ;
1867
1855
}
1868
1856
@@ -1874,7 +1862,7 @@ static int ipx_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
1874
1862
struct sock * sk = sock -> sk ;
1875
1863
void __user * argp = (void __user * )arg ;
1876
1864
1877
- lock_kernel ( );
1865
+ lock_sock ( sk );
1878
1866
switch (cmd ) {
1879
1867
case TIOCOUTQ :
1880
1868
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)
1937
1925
rc = - ENOIOCTLCMD ;
1938
1926
break ;
1939
1927
}
1940
- unlock_kernel ( );
1928
+ release_sock ( sk );
1941
1929
1942
1930
return rc ;
1943
1931
}
@@ -1984,7 +1972,7 @@ static const struct proto_ops ipx_dgram_ops = {
1984
1972
.socketpair = sock_no_socketpair ,
1985
1973
.accept = sock_no_accept ,
1986
1974
.getname = ipx_getname ,
1987
- .poll = ipx_datagram_poll ,
1975
+ .poll = datagram_poll ,
1988
1976
.ioctl = ipx_ioctl ,
1989
1977
#ifdef CONFIG_COMPAT
1990
1978
.compat_ioctl = ipx_compat_ioctl ,
0 commit comments