aboutsummaryrefslogtreecommitdiffstats
path: root/net/ieee802154/dgram.c
diff options
context:
space:
mode:
authorJonathan Herman <hermanjl@cs.unc.edu>2013-01-17 16:15:55 -0500
committerJonathan Herman <hermanjl@cs.unc.edu>2013-01-17 16:15:55 -0500
commit8dea78da5cee153b8af9c07a2745f6c55057fe12 (patch)
treea8f4d49d63b1ecc92f2fddceba0655b2472c5bd9 /net/ieee802154/dgram.c
parent406089d01562f1e2bf9f089fd7637009ebaad589 (diff)
Patched in Tegra support.
Diffstat (limited to 'net/ieee802154/dgram.c')
-rw-r--r--net/ieee802154/dgram.c25
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
51static inline struct dgram_sock *dgram_sk(const struct sock *sk) 51static 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);