aboutsummaryrefslogtreecommitdiffstats
path: root/net/econet/af_econet.c
diff options
context:
space:
mode:
authorStephen Hemminger <shemminger@linux-foundation.org>2007-10-09 04:36:32 -0400
committerDavid S. Miller <davem@sunset.davemloft.net>2007-10-10 19:52:50 -0400
commit0c4e85813d0a94eeb8bf813397a4907bdd7bb610 (patch)
tree53ee948abc930bb1c5cd270c490f87fda5eb45b3 /net/econet/af_econet.c
parent4c94f8c0c9a82fad84bc5df453aff755cfed70b7 (diff)
[NET]: Wrap netdevice hardware header creation.
Add inline for common usage of hardware header creation, and fix bug in IPV6 mcast where the assumption about negative return is an errno. Negative return from hard_header means not enough space was available,(ie -N bytes). Signed-off-by: Stephen Hemminger <shemminger@linux-foundation.org> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/econet/af_econet.c')
-rw-r--r--net/econet/af_econet.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/net/econet/af_econet.c b/net/econet/af_econet.c
index 9938e76a8ff6..9cae16b4e0b7 100644
--- a/net/econet/af_econet.c
+++ b/net/econet/af_econet.c
@@ -336,6 +336,7 @@ static int econet_sendmsg(struct kiocb *iocb, struct socket *sock,
336 /* Real hardware Econet. We're not worthy etc. */ 336 /* Real hardware Econet. We're not worthy etc. */
337#ifdef CONFIG_ECONET_NATIVE 337#ifdef CONFIG_ECONET_NATIVE
338 unsigned short proto = 0; 338 unsigned short proto = 0;
339 int res;
339 340
340 dev_hold(dev); 341 dev_hold(dev);
341 342
@@ -354,12 +355,12 @@ static int econet_sendmsg(struct kiocb *iocb, struct socket *sock,
354 eb->sec = *saddr; 355 eb->sec = *saddr;
355 eb->sent = ec_tx_done; 356 eb->sent = ec_tx_done;
356 357
357 if (dev->hard_header) { 358 err = -EINVAL;
358 int res; 359 res = dev_hard_header(skb, dev, ntohs(proto), &addr, NULL, len);
360 if (res < 0)
361 goto out_free;
362 if (res > 0) {
359 struct ec_framehdr *fh; 363 struct ec_framehdr *fh;
360 err = -EINVAL;
361 res = dev->hard_header(skb, dev, ntohs(proto),
362 &addr, NULL, len);
363 /* Poke in our control byte and 364 /* Poke in our control byte and
364 port number. Hack, hack. */ 365 port number. Hack, hack. */
365 fh = (struct ec_framehdr *)(skb->data); 366 fh = (struct ec_framehdr *)(skb->data);
@@ -368,8 +369,7 @@ static int econet_sendmsg(struct kiocb *iocb, struct socket *sock,
368 if (sock->type != SOCK_DGRAM) { 369 if (sock->type != SOCK_DGRAM) {
369 skb_reset_tail_pointer(skb); 370 skb_reset_tail_pointer(skb);
370 skb->len = 0; 371 skb->len = 0;
371 } else if (res < 0) 372 }
372 goto out_free;
373 } 373 }
374 374
375 /* Copy the data. Returns -EFAULT on error */ 375 /* Copy the data. Returns -EFAULT on error */