[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>
This commit is contained in:
committed by
David S. Miller
parent
4c94f8c0c9
commit
0c4e85813d
@@ -336,6 +336,7 @@ static int econet_sendmsg(struct kiocb *iocb, struct socket *sock,
|
||||
/* Real hardware Econet. We're not worthy etc. */
|
||||
#ifdef CONFIG_ECONET_NATIVE
|
||||
unsigned short proto = 0;
|
||||
int res;
|
||||
|
||||
dev_hold(dev);
|
||||
|
||||
@@ -354,12 +355,12 @@ static int econet_sendmsg(struct kiocb *iocb, struct socket *sock,
|
||||
eb->sec = *saddr;
|
||||
eb->sent = ec_tx_done;
|
||||
|
||||
if (dev->hard_header) {
|
||||
int res;
|
||||
err = -EINVAL;
|
||||
res = dev_hard_header(skb, dev, ntohs(proto), &addr, NULL, len);
|
||||
if (res < 0)
|
||||
goto out_free;
|
||||
if (res > 0) {
|
||||
struct ec_framehdr *fh;
|
||||
err = -EINVAL;
|
||||
res = dev->hard_header(skb, dev, ntohs(proto),
|
||||
&addr, NULL, len);
|
||||
/* Poke in our control byte and
|
||||
port number. Hack, hack. */
|
||||
fh = (struct ec_framehdr *)(skb->data);
|
||||
@@ -368,8 +369,7 @@ static int econet_sendmsg(struct kiocb *iocb, struct socket *sock,
|
||||
if (sock->type != SOCK_DGRAM) {
|
||||
skb_reset_tail_pointer(skb);
|
||||
skb->len = 0;
|
||||
} else if (res < 0)
|
||||
goto out_free;
|
||||
}
|
||||
}
|
||||
|
||||
/* Copy the data. Returns -EFAULT on error */
|
||||
|
Reference in New Issue
Block a user