diff options
author | Jonathan Herman <hermanjl@cs.unc.edu> | 2013-01-17 16:15:55 -0500 |
---|---|---|
committer | Jonathan Herman <hermanjl@cs.unc.edu> | 2013-01-17 16:15:55 -0500 |
commit | 8dea78da5cee153b8af9c07a2745f6c55057fe12 (patch) | |
tree | a8f4d49d63b1ecc92f2fddceba0655b2472c5bd9 /net/ieee802154/dgram.c | |
parent | 406089d01562f1e2bf9f089fd7637009ebaad589 (diff) |
Patched in Tegra support.
Diffstat (limited to 'net/ieee802154/dgram.c')
-rw-r--r-- | net/ieee802154/dgram.c | 25 |
1 files changed, 11 insertions, 14 deletions
diff --git a/net/ieee802154/dgram.c b/net/ieee802154/dgram.c index 16705611589..faecf648123 100644 --- a/net/ieee802154/dgram.c +++ b/net/ieee802154/dgram.c | |||
@@ -44,8 +44,8 @@ struct dgram_sock { | |||
44 | struct ieee802154_addr src_addr; | 44 | struct ieee802154_addr src_addr; |
45 | struct ieee802154_addr dst_addr; | 45 | struct ieee802154_addr dst_addr; |
46 | 46 | ||
47 | unsigned int bound:1; | 47 | unsigned bound:1; |
48 | unsigned int want_ack:1; | 48 | unsigned want_ack:1; |
49 | }; | 49 | }; |
50 | 50 | ||
51 | static inline struct dgram_sock *dgram_sk(const struct sock *sk) | 51 | static inline struct dgram_sock *dgram_sk(const struct sock *sk) |
@@ -206,10 +206,9 @@ static int dgram_sendmsg(struct kiocb *iocb, struct sock *sk, | |||
206 | struct msghdr *msg, size_t size) | 206 | struct msghdr *msg, size_t size) |
207 | { | 207 | { |
208 | struct net_device *dev; | 208 | struct net_device *dev; |
209 | unsigned int mtu; | 209 | unsigned mtu; |
210 | struct sk_buff *skb; | 210 | struct sk_buff *skb; |
211 | struct dgram_sock *ro = dgram_sk(sk); | 211 | struct dgram_sock *ro = dgram_sk(sk); |
212 | int hlen, tlen; | ||
213 | int err; | 212 | int err; |
214 | 213 | ||
215 | if (msg->msg_flags & MSG_OOB) { | 214 | if (msg->msg_flags & MSG_OOB) { |
@@ -230,21 +229,13 @@ static int dgram_sendmsg(struct kiocb *iocb, struct sock *sk, | |||
230 | mtu = dev->mtu; | 229 | mtu = dev->mtu; |
231 | pr_debug("name = %s, mtu = %u\n", dev->name, mtu); | 230 | pr_debug("name = %s, mtu = %u\n", dev->name, mtu); |
232 | 231 | ||
233 | if (size > mtu) { | 232 | skb = sock_alloc_send_skb(sk, LL_ALLOCATED_SPACE(dev) + size, |
234 | pr_debug("size = %Zu, mtu = %u\n", size, mtu); | ||
235 | err = -EINVAL; | ||
236 | goto out_dev; | ||
237 | } | ||
238 | |||
239 | hlen = LL_RESERVED_SPACE(dev); | ||
240 | tlen = dev->needed_tailroom; | ||
241 | skb = sock_alloc_send_skb(sk, hlen + tlen + size, | ||
242 | msg->msg_flags & MSG_DONTWAIT, | 233 | msg->msg_flags & MSG_DONTWAIT, |
243 | &err); | 234 | &err); |
244 | if (!skb) | 235 | if (!skb) |
245 | goto out_dev; | 236 | goto out_dev; |
246 | 237 | ||
247 | skb_reserve(skb, hlen); | 238 | skb_reserve(skb, LL_RESERVED_SPACE(dev)); |
248 | 239 | ||
249 | skb_reset_network_header(skb); | 240 | skb_reset_network_header(skb); |
250 | 241 | ||
@@ -264,6 +255,12 @@ static int dgram_sendmsg(struct kiocb *iocb, struct sock *sk, | |||
264 | if (err < 0) | 255 | if (err < 0) |
265 | goto out_skb; | 256 | goto out_skb; |
266 | 257 | ||
258 | if (size > mtu) { | ||
259 | pr_debug("size = %Zu, mtu = %u\n", size, mtu); | ||
260 | err = -EINVAL; | ||
261 | goto out_skb; | ||
262 | } | ||
263 | |||
267 | skb->dev = dev; | 264 | skb->dev = dev; |
268 | skb->sk = sk; | 265 | skb->sk = sk; |
269 | skb->protocol = htons(ETH_P_IEEE802154); | 266 | skb->protocol = htons(ETH_P_IEEE802154); |