diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-12-08 10:55:01 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-12-08 10:55:01 -0500 |
commit | d7fc02c7bae7b1cf69269992cf880a43a350cdaa (patch) | |
tree | a43d56fa72913a1cc98a0bbebe054d08581b3a7c /net/appletalk | |
parent | ee1262dbc65ce0b6234a915d8432171e8d77f518 (diff) | |
parent | 28b4d5cc17c20786848cdc07b7ea237a309776bb (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6: (1815 commits)
mac80211: fix reorder buffer release
iwmc3200wifi: Enable wimax core through module parameter
iwmc3200wifi: Add wifi-wimax coexistence mode as a module parameter
iwmc3200wifi: Coex table command does not expect a response
iwmc3200wifi: Update wiwi priority table
iwlwifi: driver version track kernel version
iwlwifi: indicate uCode type when fail dump error/event log
iwl3945: remove duplicated event logging code
b43: fix two warnings
ipw2100: fix rebooting hang with driver loaded
cfg80211: indent regulatory messages with spaces
iwmc3200wifi: fix NULL pointer dereference in pmkid update
mac80211: Fix TX status reporting for injected data frames
ath9k: enable 2GHz band only if the device supports it
airo: Fix integer overflow warning
rt2x00: Fix padding bug on L2PAD devices.
WE: Fix set events not propagated
b43legacy: avoid PPC fault during resume
b43: avoid PPC fault during resume
tcp: fix a timewait refcnt race
...
Fix up conflicts due to sysctl cleanups (dead sysctl_check code and
CTL_UNNUMBERED removed) in
kernel/sysctl_check.c
net/ipv4/sysctl_net_ipv4.c
net/ipv6/addrconf.c
net/sctp/sysctl.c
Diffstat (limited to 'net/appletalk')
-rw-r--r-- | net/appletalk/ddp.c | 134 |
1 files changed, 91 insertions, 43 deletions
diff --git a/net/appletalk/ddp.c b/net/appletalk/ddp.c index b1a4290996b5..9fc4da56fb1d 100644 --- a/net/appletalk/ddp.c +++ b/net/appletalk/ddp.c | |||
@@ -56,6 +56,7 @@ | |||
56 | #include <linux/if_arp.h> | 56 | #include <linux/if_arp.h> |
57 | #include <linux/smp_lock.h> | 57 | #include <linux/smp_lock.h> |
58 | #include <linux/termios.h> /* For TIOCOUTQ/INQ */ | 58 | #include <linux/termios.h> /* For TIOCOUTQ/INQ */ |
59 | #include <linux/compat.h> | ||
59 | #include <net/datalink.h> | 60 | #include <net/datalink.h> |
60 | #include <net/psnap.h> | 61 | #include <net/psnap.h> |
61 | #include <net/sock.h> | 62 | #include <net/sock.h> |
@@ -922,13 +923,8 @@ static unsigned long atalk_sum_partial(const unsigned char *data, | |||
922 | { | 923 | { |
923 | /* This ought to be unwrapped neatly. I'll trust gcc for now */ | 924 | /* This ought to be unwrapped neatly. I'll trust gcc for now */ |
924 | while (len--) { | 925 | while (len--) { |
925 | sum += *data; | 926 | sum += *data++; |
926 | sum <<= 1; | 927 | sum = rol16(sum, 1); |
927 | if (sum & 0x10000) { | ||
928 | sum++; | ||
929 | sum &= 0xffff; | ||
930 | } | ||
931 | data++; | ||
932 | } | 928 | } |
933 | return sum; | 929 | return sum; |
934 | } | 930 | } |
@@ -1021,12 +1017,13 @@ static struct proto ddp_proto = { | |||
1021 | * Create a socket. Initialise the socket, blank the addresses | 1017 | * Create a socket. Initialise the socket, blank the addresses |
1022 | * set the state. | 1018 | * set the state. |
1023 | */ | 1019 | */ |
1024 | static int atalk_create(struct net *net, struct socket *sock, int protocol) | 1020 | static int atalk_create(struct net *net, struct socket *sock, int protocol, |
1021 | int kern) | ||
1025 | { | 1022 | { |
1026 | struct sock *sk; | 1023 | struct sock *sk; |
1027 | int rc = -ESOCKTNOSUPPORT; | 1024 | int rc = -ESOCKTNOSUPPORT; |
1028 | 1025 | ||
1029 | if (net != &init_net) | 1026 | if (!net_eq(net, &init_net)) |
1030 | return -EAFNOSUPPORT; | 1027 | return -EAFNOSUPPORT; |
1031 | 1028 | ||
1032 | /* | 1029 | /* |
@@ -1054,11 +1051,13 @@ static int atalk_release(struct socket *sock) | |||
1054 | { | 1051 | { |
1055 | struct sock *sk = sock->sk; | 1052 | struct sock *sk = sock->sk; |
1056 | 1053 | ||
1054 | lock_kernel(); | ||
1057 | if (sk) { | 1055 | if (sk) { |
1058 | sock_orphan(sk); | 1056 | sock_orphan(sk); |
1059 | sock->sk = NULL; | 1057 | sock->sk = NULL; |
1060 | atalk_destroy_socket(sk); | 1058 | atalk_destroy_socket(sk); |
1061 | } | 1059 | } |
1060 | unlock_kernel(); | ||
1062 | return 0; | 1061 | return 0; |
1063 | } | 1062 | } |
1064 | 1063 | ||
@@ -1134,6 +1133,7 @@ static int atalk_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len) | |||
1134 | struct sockaddr_at *addr = (struct sockaddr_at *)uaddr; | 1133 | struct sockaddr_at *addr = (struct sockaddr_at *)uaddr; |
1135 | struct sock *sk = sock->sk; | 1134 | struct sock *sk = sock->sk; |
1136 | struct atalk_sock *at = at_sk(sk); | 1135 | struct atalk_sock *at = at_sk(sk); |
1136 | int err; | ||
1137 | 1137 | ||
1138 | if (!sock_flag(sk, SOCK_ZAPPED) || | 1138 | if (!sock_flag(sk, SOCK_ZAPPED) || |
1139 | addr_len != sizeof(struct sockaddr_at)) | 1139 | addr_len != sizeof(struct sockaddr_at)) |
@@ -1142,37 +1142,44 @@ static int atalk_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len) | |||
1142 | if (addr->sat_family != AF_APPLETALK) | 1142 | if (addr->sat_family != AF_APPLETALK) |
1143 | return -EAFNOSUPPORT; | 1143 | return -EAFNOSUPPORT; |
1144 | 1144 | ||
1145 | lock_kernel(); | ||
1145 | if (addr->sat_addr.s_net == htons(ATADDR_ANYNET)) { | 1146 | if (addr->sat_addr.s_net == htons(ATADDR_ANYNET)) { |
1146 | struct atalk_addr *ap = atalk_find_primary(); | 1147 | struct atalk_addr *ap = atalk_find_primary(); |
1147 | 1148 | ||
1149 | err = -EADDRNOTAVAIL; | ||
1148 | if (!ap) | 1150 | if (!ap) |
1149 | return -EADDRNOTAVAIL; | 1151 | goto out; |
1150 | 1152 | ||
1151 | at->src_net = addr->sat_addr.s_net = ap->s_net; | 1153 | at->src_net = addr->sat_addr.s_net = ap->s_net; |
1152 | at->src_node = addr->sat_addr.s_node= ap->s_node; | 1154 | at->src_node = addr->sat_addr.s_node= ap->s_node; |
1153 | } else { | 1155 | } else { |
1156 | err = -EADDRNOTAVAIL; | ||
1154 | if (!atalk_find_interface(addr->sat_addr.s_net, | 1157 | if (!atalk_find_interface(addr->sat_addr.s_net, |
1155 | addr->sat_addr.s_node)) | 1158 | addr->sat_addr.s_node)) |
1156 | return -EADDRNOTAVAIL; | 1159 | goto out; |
1157 | 1160 | ||
1158 | at->src_net = addr->sat_addr.s_net; | 1161 | at->src_net = addr->sat_addr.s_net; |
1159 | at->src_node = addr->sat_addr.s_node; | 1162 | at->src_node = addr->sat_addr.s_node; |
1160 | } | 1163 | } |
1161 | 1164 | ||
1162 | if (addr->sat_port == ATADDR_ANYPORT) { | 1165 | if (addr->sat_port == ATADDR_ANYPORT) { |
1163 | int n = atalk_pick_and_bind_port(sk, addr); | 1166 | err = atalk_pick_and_bind_port(sk, addr); |
1164 | 1167 | ||
1165 | if (n < 0) | 1168 | if (err < 0) |
1166 | return n; | 1169 | goto out; |
1167 | } else { | 1170 | } else { |
1168 | at->src_port = addr->sat_port; | 1171 | at->src_port = addr->sat_port; |
1169 | 1172 | ||
1173 | err = -EADDRINUSE; | ||
1170 | if (atalk_find_or_insert_socket(sk, addr)) | 1174 | if (atalk_find_or_insert_socket(sk, addr)) |
1171 | return -EADDRINUSE; | 1175 | goto out; |
1172 | } | 1176 | } |
1173 | 1177 | ||
1174 | sock_reset_flag(sk, SOCK_ZAPPED); | 1178 | sock_reset_flag(sk, SOCK_ZAPPED); |
1175 | return 0; | 1179 | err = 0; |
1180 | out: | ||
1181 | unlock_kernel(); | ||
1182 | return err; | ||
1176 | } | 1183 | } |
1177 | 1184 | ||
1178 | /* Set the address we talk to */ | 1185 | /* Set the address we talk to */ |
@@ -1182,6 +1189,7 @@ static int atalk_connect(struct socket *sock, struct sockaddr *uaddr, | |||
1182 | struct sock *sk = sock->sk; | 1189 | struct sock *sk = sock->sk; |
1183 | struct atalk_sock *at = at_sk(sk); | 1190 | struct atalk_sock *at = at_sk(sk); |
1184 | struct sockaddr_at *addr; | 1191 | struct sockaddr_at *addr; |
1192 | int err; | ||
1185 | 1193 | ||
1186 | sk->sk_state = TCP_CLOSE; | 1194 | sk->sk_state = TCP_CLOSE; |
1187 | sock->state = SS_UNCONNECTED; | 1195 | sock->state = SS_UNCONNECTED; |
@@ -1206,12 +1214,15 @@ static int atalk_connect(struct socket *sock, struct sockaddr *uaddr, | |||
1206 | #endif | 1214 | #endif |
1207 | } | 1215 | } |
1208 | 1216 | ||
1217 | lock_kernel(); | ||
1218 | err = -EBUSY; | ||
1209 | if (sock_flag(sk, SOCK_ZAPPED)) | 1219 | if (sock_flag(sk, SOCK_ZAPPED)) |
1210 | if (atalk_autobind(sk) < 0) | 1220 | if (atalk_autobind(sk) < 0) |
1211 | return -EBUSY; | 1221 | goto out; |
1212 | 1222 | ||
1223 | err = -ENETUNREACH; | ||
1213 | if (!atrtr_get_dev(&addr->sat_addr)) | 1224 | if (!atrtr_get_dev(&addr->sat_addr)) |
1214 | return -ENETUNREACH; | 1225 | goto out; |
1215 | 1226 | ||
1216 | at->dest_port = addr->sat_port; | 1227 | at->dest_port = addr->sat_port; |
1217 | at->dest_net = addr->sat_addr.s_net; | 1228 | at->dest_net = addr->sat_addr.s_net; |
@@ -1219,7 +1230,10 @@ static int atalk_connect(struct socket *sock, struct sockaddr *uaddr, | |||
1219 | 1230 | ||
1220 | sock->state = SS_CONNECTED; | 1231 | sock->state = SS_CONNECTED; |
1221 | sk->sk_state = TCP_ESTABLISHED; | 1232 | sk->sk_state = TCP_ESTABLISHED; |
1222 | return 0; | 1233 | err = 0; |
1234 | out: | ||
1235 | unlock_kernel(); | ||
1236 | return err; | ||
1223 | } | 1237 | } |
1224 | 1238 | ||
1225 | /* | 1239 | /* |
@@ -1232,17 +1246,21 @@ static int atalk_getname(struct socket *sock, struct sockaddr *uaddr, | |||
1232 | struct sockaddr_at sat; | 1246 | struct sockaddr_at sat; |
1233 | struct sock *sk = sock->sk; | 1247 | struct sock *sk = sock->sk; |
1234 | struct atalk_sock *at = at_sk(sk); | 1248 | struct atalk_sock *at = at_sk(sk); |
1249 | int err; | ||
1235 | 1250 | ||
1251 | lock_kernel(); | ||
1252 | err = -ENOBUFS; | ||
1236 | if (sock_flag(sk, SOCK_ZAPPED)) | 1253 | if (sock_flag(sk, SOCK_ZAPPED)) |
1237 | if (atalk_autobind(sk) < 0) | 1254 | if (atalk_autobind(sk) < 0) |
1238 | return -ENOBUFS; | 1255 | goto out; |
1239 | 1256 | ||
1240 | *uaddr_len = sizeof(struct sockaddr_at); | 1257 | *uaddr_len = sizeof(struct sockaddr_at); |
1241 | memset(&sat.sat_zero, 0, sizeof(sat.sat_zero)); | 1258 | memset(&sat.sat_zero, 0, sizeof(sat.sat_zero)); |
1242 | 1259 | ||
1243 | if (peer) { | 1260 | if (peer) { |
1261 | err = -ENOTCONN; | ||
1244 | if (sk->sk_state != TCP_ESTABLISHED) | 1262 | if (sk->sk_state != TCP_ESTABLISHED) |
1245 | return -ENOTCONN; | 1263 | goto out; |
1246 | 1264 | ||
1247 | sat.sat_addr.s_net = at->dest_net; | 1265 | sat.sat_addr.s_net = at->dest_net; |
1248 | sat.sat_addr.s_node = at->dest_node; | 1266 | sat.sat_addr.s_node = at->dest_node; |
@@ -1253,9 +1271,23 @@ static int atalk_getname(struct socket *sock, struct sockaddr *uaddr, | |||
1253 | sat.sat_port = at->src_port; | 1271 | sat.sat_port = at->src_port; |
1254 | } | 1272 | } |
1255 | 1273 | ||
1274 | err = 0; | ||
1256 | sat.sat_family = AF_APPLETALK; | 1275 | sat.sat_family = AF_APPLETALK; |
1257 | memcpy(uaddr, &sat, sizeof(sat)); | 1276 | memcpy(uaddr, &sat, sizeof(sat)); |
1258 | return 0; | 1277 | |
1278 | out: | ||
1279 | unlock_kernel(); | ||
1280 | return err; | ||
1281 | } | ||
1282 | |||
1283 | static unsigned int atalk_poll(struct file *file, struct socket *sock, | ||
1284 | poll_table *wait) | ||
1285 | { | ||
1286 | int err; | ||
1287 | lock_kernel(); | ||
1288 | err = datagram_poll(file, sock, wait); | ||
1289 | unlock_kernel(); | ||
1290 | return err; | ||
1259 | } | 1291 | } |
1260 | 1292 | ||
1261 | #if defined(CONFIG_IPDDP) || defined(CONFIG_IPDDP_MODULE) | 1293 | #if defined(CONFIG_IPDDP) || defined(CONFIG_IPDDP_MODULE) |
@@ -1563,23 +1595,28 @@ static int atalk_sendmsg(struct kiocb *iocb, struct socket *sock, struct msghdr | |||
1563 | if (len > DDP_MAXSZ) | 1595 | if (len > DDP_MAXSZ) |
1564 | return -EMSGSIZE; | 1596 | return -EMSGSIZE; |
1565 | 1597 | ||
1598 | lock_kernel(); | ||
1566 | if (usat) { | 1599 | if (usat) { |
1600 | err = -EBUSY; | ||
1567 | if (sock_flag(sk, SOCK_ZAPPED)) | 1601 | if (sock_flag(sk, SOCK_ZAPPED)) |
1568 | if (atalk_autobind(sk) < 0) | 1602 | if (atalk_autobind(sk) < 0) |
1569 | return -EBUSY; | 1603 | goto out; |
1570 | 1604 | ||
1605 | err = -EINVAL; | ||
1571 | if (msg->msg_namelen < sizeof(*usat) || | 1606 | if (msg->msg_namelen < sizeof(*usat) || |
1572 | usat->sat_family != AF_APPLETALK) | 1607 | usat->sat_family != AF_APPLETALK) |
1573 | return -EINVAL; | 1608 | goto out; |
1574 | 1609 | ||
1610 | err = -EPERM; | ||
1575 | /* netatalk didn't implement this check */ | 1611 | /* netatalk didn't implement this check */ |
1576 | if (usat->sat_addr.s_node == ATADDR_BCAST && | 1612 | if (usat->sat_addr.s_node == ATADDR_BCAST && |
1577 | !sock_flag(sk, SOCK_BROADCAST)) { | 1613 | !sock_flag(sk, SOCK_BROADCAST)) { |
1578 | return -EPERM; | 1614 | goto out; |
1579 | } | 1615 | } |
1580 | } else { | 1616 | } else { |
1617 | err = -ENOTCONN; | ||
1581 | if (sk->sk_state != TCP_ESTABLISHED) | 1618 | if (sk->sk_state != TCP_ESTABLISHED) |
1582 | return -ENOTCONN; | 1619 | goto out; |
1583 | usat = &local_satalk; | 1620 | usat = &local_satalk; |
1584 | usat->sat_family = AF_APPLETALK; | 1621 | usat->sat_family = AF_APPLETALK; |
1585 | usat->sat_port = at->dest_port; | 1622 | usat->sat_port = at->dest_port; |
@@ -1603,8 +1640,9 @@ static int atalk_sendmsg(struct kiocb *iocb, struct socket *sock, struct msghdr | |||
1603 | 1640 | ||
1604 | rt = atrtr_find(&at_hint); | 1641 | rt = atrtr_find(&at_hint); |
1605 | } | 1642 | } |
1643 | err = ENETUNREACH; | ||
1606 | if (!rt) | 1644 | if (!rt) |
1607 | return -ENETUNREACH; | 1645 | goto out; |
1608 | 1646 | ||
1609 | dev = rt->dev; | 1647 | dev = rt->dev; |
1610 | 1648 | ||
@@ -1614,7 +1652,7 @@ static int atalk_sendmsg(struct kiocb *iocb, struct socket *sock, struct msghdr | |||
1614 | size += dev->hard_header_len; | 1652 | size += dev->hard_header_len; |
1615 | skb = sock_alloc_send_skb(sk, size, (flags & MSG_DONTWAIT), &err); | 1653 | skb = sock_alloc_send_skb(sk, size, (flags & MSG_DONTWAIT), &err); |
1616 | if (!skb) | 1654 | if (!skb) |
1617 | return err; | 1655 | goto out; |
1618 | 1656 | ||
1619 | skb->sk = sk; | 1657 | skb->sk = sk; |
1620 | skb_reserve(skb, ddp_dl->header_length); | 1658 | skb_reserve(skb, ddp_dl->header_length); |
@@ -1637,7 +1675,8 @@ static int atalk_sendmsg(struct kiocb *iocb, struct socket *sock, struct msghdr | |||
1637 | err = memcpy_fromiovec(skb_put(skb, len), msg->msg_iov, len); | 1675 | err = memcpy_fromiovec(skb_put(skb, len), msg->msg_iov, len); |
1638 | if (err) { | 1676 | if (err) { |
1639 | kfree_skb(skb); | 1677 | kfree_skb(skb); |
1640 | return -EFAULT; | 1678 | err = -EFAULT; |
1679 | goto out; | ||
1641 | } | 1680 | } |
1642 | 1681 | ||
1643 | if (sk->sk_no_check == 1) | 1682 | if (sk->sk_no_check == 1) |
@@ -1676,7 +1715,8 @@ static int atalk_sendmsg(struct kiocb *iocb, struct socket *sock, struct msghdr | |||
1676 | rt = atrtr_find(&at_lo); | 1715 | rt = atrtr_find(&at_lo); |
1677 | if (!rt) { | 1716 | if (!rt) { |
1678 | kfree_skb(skb); | 1717 | kfree_skb(skb); |
1679 | return -ENETUNREACH; | 1718 | err = -ENETUNREACH; |
1719 | goto out; | ||
1680 | } | 1720 | } |
1681 | dev = rt->dev; | 1721 | dev = rt->dev; |
1682 | skb->dev = dev; | 1722 | skb->dev = dev; |
@@ -1696,7 +1736,9 @@ static int atalk_sendmsg(struct kiocb *iocb, struct socket *sock, struct msghdr | |||
1696 | } | 1736 | } |
1697 | SOCK_DEBUG(sk, "SK %p: Done write (%Zd).\n", sk, len); | 1737 | SOCK_DEBUG(sk, "SK %p: Done write (%Zd).\n", sk, len); |
1698 | 1738 | ||
1699 | return len; | 1739 | out: |
1740 | unlock_kernel(); | ||
1741 | return err ? : len; | ||
1700 | } | 1742 | } |
1701 | 1743 | ||
1702 | static int atalk_recvmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg, | 1744 | static int atalk_recvmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg, |
@@ -1708,10 +1750,13 @@ static int atalk_recvmsg(struct kiocb *iocb, struct socket *sock, struct msghdr | |||
1708 | int copied = 0; | 1750 | int copied = 0; |
1709 | int offset = 0; | 1751 | int offset = 0; |
1710 | int err = 0; | 1752 | int err = 0; |
1711 | struct sk_buff *skb = skb_recv_datagram(sk, flags & ~MSG_DONTWAIT, | 1753 | struct sk_buff *skb; |
1754 | |||
1755 | lock_kernel(); | ||
1756 | skb = skb_recv_datagram(sk, flags & ~MSG_DONTWAIT, | ||
1712 | flags & MSG_DONTWAIT, &err); | 1757 | flags & MSG_DONTWAIT, &err); |
1713 | if (!skb) | 1758 | if (!skb) |
1714 | return err; | 1759 | goto out; |
1715 | 1760 | ||
1716 | /* FIXME: use skb->cb to be able to use shared skbs */ | 1761 | /* FIXME: use skb->cb to be able to use shared skbs */ |
1717 | ddp = ddp_hdr(skb); | 1762 | ddp = ddp_hdr(skb); |
@@ -1739,6 +1784,9 @@ static int atalk_recvmsg(struct kiocb *iocb, struct socket *sock, struct msghdr | |||
1739 | } | 1784 | } |
1740 | 1785 | ||
1741 | skb_free_datagram(sk, skb); /* Free the datagram. */ | 1786 | skb_free_datagram(sk, skb); /* Free the datagram. */ |
1787 | |||
1788 | out: | ||
1789 | unlock_kernel(); | ||
1742 | return err ? : copied; | 1790 | return err ? : copied; |
1743 | } | 1791 | } |
1744 | 1792 | ||
@@ -1810,24 +1858,26 @@ static int atalk_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg) | |||
1810 | static int atalk_compat_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg) | 1858 | static int atalk_compat_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg) |
1811 | { | 1859 | { |
1812 | /* | 1860 | /* |
1813 | * All Appletalk ioctls except SIOCATALKDIFADDR are standard. And | 1861 | * SIOCATALKDIFADDR is a SIOCPROTOPRIVATE ioctl number, so we |
1814 | * SIOCATALKDIFADDR is handled by upper layer as well, so there is | 1862 | * cannot handle it in common code. The data we access if ifreq |
1815 | * nothing to do. Eventually SIOCATALKDIFADDR should be moved | 1863 | * here is compatible, so we can simply call the native |
1816 | * here so there is no generic SIOCPROTOPRIVATE translation in the | 1864 | * handler. |
1817 | * system. | ||
1818 | */ | 1865 | */ |
1866 | if (cmd == SIOCATALKDIFADDR) | ||
1867 | return atalk_ioctl(sock, cmd, (unsigned long)compat_ptr(arg)); | ||
1868 | |||
1819 | return -ENOIOCTLCMD; | 1869 | return -ENOIOCTLCMD; |
1820 | } | 1870 | } |
1821 | #endif | 1871 | #endif |
1822 | 1872 | ||
1823 | 1873 | ||
1824 | static struct net_proto_family atalk_family_ops = { | 1874 | static const struct net_proto_family atalk_family_ops = { |
1825 | .family = PF_APPLETALK, | 1875 | .family = PF_APPLETALK, |
1826 | .create = atalk_create, | 1876 | .create = atalk_create, |
1827 | .owner = THIS_MODULE, | 1877 | .owner = THIS_MODULE, |
1828 | }; | 1878 | }; |
1829 | 1879 | ||
1830 | static const struct proto_ops SOCKOPS_WRAPPED(atalk_dgram_ops) = { | 1880 | static const struct proto_ops atalk_dgram_ops = { |
1831 | .family = PF_APPLETALK, | 1881 | .family = PF_APPLETALK, |
1832 | .owner = THIS_MODULE, | 1882 | .owner = THIS_MODULE, |
1833 | .release = atalk_release, | 1883 | .release = atalk_release, |
@@ -1836,7 +1886,7 @@ static const struct proto_ops SOCKOPS_WRAPPED(atalk_dgram_ops) = { | |||
1836 | .socketpair = sock_no_socketpair, | 1886 | .socketpair = sock_no_socketpair, |
1837 | .accept = sock_no_accept, | 1887 | .accept = sock_no_accept, |
1838 | .getname = atalk_getname, | 1888 | .getname = atalk_getname, |
1839 | .poll = datagram_poll, | 1889 | .poll = atalk_poll, |
1840 | .ioctl = atalk_ioctl, | 1890 | .ioctl = atalk_ioctl, |
1841 | #ifdef CONFIG_COMPAT | 1891 | #ifdef CONFIG_COMPAT |
1842 | .compat_ioctl = atalk_compat_ioctl, | 1892 | .compat_ioctl = atalk_compat_ioctl, |
@@ -1851,8 +1901,6 @@ static const struct proto_ops SOCKOPS_WRAPPED(atalk_dgram_ops) = { | |||
1851 | .sendpage = sock_no_sendpage, | 1901 | .sendpage = sock_no_sendpage, |
1852 | }; | 1902 | }; |
1853 | 1903 | ||
1854 | SOCKOPS_WRAP(atalk_dgram, PF_APPLETALK); | ||
1855 | |||
1856 | static struct notifier_block ddp_notifier = { | 1904 | static struct notifier_block ddp_notifier = { |
1857 | .notifier_call = ddp_device_event, | 1905 | .notifier_call = ddp_device_event, |
1858 | }; | 1906 | }; |