mirror of
https://github.com/torvalds/linux.git
synced 2024-11-26 22:21:42 +00:00
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
This commit is contained in:
commit
06fb4e701b
@ -979,7 +979,6 @@ static void bond_poll_controller(struct net_device *bond_dev)
|
||||
if (bond_3ad_get_active_agg_info(bond, &ad_info))
|
||||
return;
|
||||
|
||||
rcu_read_lock_bh();
|
||||
bond_for_each_slave_rcu(bond, slave, iter) {
|
||||
ops = slave->dev->netdev_ops;
|
||||
if (!bond_slave_is_up(slave) || !ops->ndo_poll_controller)
|
||||
@ -1000,7 +999,6 @@ static void bond_poll_controller(struct net_device *bond_dev)
|
||||
ops->ndo_poll_controller(slave->dev);
|
||||
up(&ni->dev_lock);
|
||||
}
|
||||
rcu_read_unlock_bh();
|
||||
}
|
||||
|
||||
static void bond_netpoll_cleanup(struct net_device *bond_dev)
|
||||
|
@ -1659,7 +1659,7 @@ static int ravb_probe(struct platform_device *pdev)
|
||||
ndev->dma = -1;
|
||||
irq = platform_get_irq(pdev, 0);
|
||||
if (irq < 0) {
|
||||
error = -ENODEV;
|
||||
error = irq;
|
||||
goto out_release;
|
||||
}
|
||||
ndev->irq = irq;
|
||||
|
@ -3089,10 +3089,8 @@ static int sh_eth_drv_probe(struct platform_device *pdev)
|
||||
|
||||
ndev->dma = -1;
|
||||
ret = platform_get_irq(pdev, 0);
|
||||
if (ret < 0) {
|
||||
ret = -ENODEV;
|
||||
if (ret < 0)
|
||||
goto out_release;
|
||||
}
|
||||
ndev->irq = ret;
|
||||
|
||||
SET_NETDEV_DEV(ndev, &pdev->dev);
|
||||
|
@ -2428,7 +2428,10 @@ static int smsc911x_drv_probe(struct platform_device *pdev)
|
||||
res_size = resource_size(res);
|
||||
|
||||
irq = platform_get_irq(pdev, 0);
|
||||
if (irq <= 0) {
|
||||
if (irq == -EPROBE_DEFER) {
|
||||
retval = -EPROBE_DEFER;
|
||||
goto out_0;
|
||||
} else if (irq <= 0) {
|
||||
pr_warn("Could not allocate irq resource\n");
|
||||
retval = -ENODEV;
|
||||
goto out_0;
|
||||
|
@ -110,6 +110,7 @@ struct nlmsgerr {
|
||||
#define NETLINK_TX_RING 7
|
||||
#define NETLINK_LISTEN_ALL_NSID 8
|
||||
#define NETLINK_LIST_MEMBERSHIPS 9
|
||||
#define NETLINK_CAP_ACK 10
|
||||
|
||||
struct nl_pktinfo {
|
||||
__u32 group;
|
||||
|
@ -84,6 +84,7 @@ struct listeners {
|
||||
#define NETLINK_F_BROADCAST_SEND_ERROR 0x4
|
||||
#define NETLINK_F_RECV_NO_ENOBUFS 0x8
|
||||
#define NETLINK_F_LISTEN_ALL_NSID 0x10
|
||||
#define NETLINK_F_CAP_ACK 0x20
|
||||
|
||||
static inline int netlink_is_kernel(struct sock *sk)
|
||||
{
|
||||
@ -610,11 +611,11 @@ static void netlink_increment_head(struct netlink_ring *ring)
|
||||
|
||||
static void netlink_forward_ring(struct netlink_ring *ring)
|
||||
{
|
||||
unsigned int head = ring->head, pos = head;
|
||||
unsigned int head = ring->head;
|
||||
const struct nl_mmap_hdr *hdr;
|
||||
|
||||
do {
|
||||
hdr = __netlink_lookup_frame(ring, pos);
|
||||
hdr = __netlink_lookup_frame(ring, ring->head);
|
||||
if (hdr->nm_status == NL_MMAP_STATUS_UNUSED)
|
||||
break;
|
||||
if (hdr->nm_status != NL_MMAP_STATUS_SKIP)
|
||||
@ -2258,6 +2259,13 @@ static int netlink_setsockopt(struct socket *sock, int level, int optname,
|
||||
nlk->flags &= ~NETLINK_F_LISTEN_ALL_NSID;
|
||||
err = 0;
|
||||
break;
|
||||
case NETLINK_CAP_ACK:
|
||||
if (val)
|
||||
nlk->flags |= NETLINK_F_CAP_ACK;
|
||||
else
|
||||
nlk->flags &= ~NETLINK_F_CAP_ACK;
|
||||
err = 0;
|
||||
break;
|
||||
default:
|
||||
err = -ENOPROTOOPT;
|
||||
}
|
||||
@ -2332,6 +2340,16 @@ static int netlink_getsockopt(struct socket *sock, int level, int optname,
|
||||
netlink_table_ungrab();
|
||||
break;
|
||||
}
|
||||
case NETLINK_CAP_ACK:
|
||||
if (len < sizeof(int))
|
||||
return -EINVAL;
|
||||
len = sizeof(int);
|
||||
val = nlk->flags & NETLINK_F_CAP_ACK ? 1 : 0;
|
||||
if (put_user(len, optlen) ||
|
||||
put_user(val, optval))
|
||||
return -EFAULT;
|
||||
err = 0;
|
||||
break;
|
||||
default:
|
||||
err = -ENOPROTOOPT;
|
||||
}
|
||||
@ -2873,9 +2891,12 @@ void netlink_ack(struct sk_buff *in_skb, struct nlmsghdr *nlh, int err)
|
||||
struct nlmsghdr *rep;
|
||||
struct nlmsgerr *errmsg;
|
||||
size_t payload = sizeof(*errmsg);
|
||||
struct netlink_sock *nlk = nlk_sk(NETLINK_CB(in_skb).sk);
|
||||
|
||||
/* error messages get the original request appened */
|
||||
if (err)
|
||||
/* Error messages get the original request appened, unless the user
|
||||
* requests to cap the error message.
|
||||
*/
|
||||
if (!(nlk->flags & NETLINK_F_CAP_ACK) && err)
|
||||
payload += nlmsg_len(nlh);
|
||||
|
||||
skb = netlink_alloc_skb(in_skb->sk, nlmsg_total_size(payload),
|
||||
@ -2898,7 +2919,7 @@ void netlink_ack(struct sk_buff *in_skb, struct nlmsghdr *nlh, int err)
|
||||
NLMSG_ERROR, payload, 0);
|
||||
errmsg = nlmsg_data(rep);
|
||||
errmsg->error = err;
|
||||
memcpy(&errmsg->msg, nlh, err ? nlh->nlmsg_len : sizeof(*nlh));
|
||||
memcpy(&errmsg->msg, nlh, payload > sizeof(*errmsg) ? nlh->nlmsg_len : sizeof(*nlh));
|
||||
netlink_unicast(in_skb->sk, skb, NETLINK_CB(in_skb).portid, MSG_DONTWAIT);
|
||||
}
|
||||
EXPORT_SYMBOL(netlink_ack);
|
||||
|
@ -3090,8 +3090,19 @@ static __be16 sctp_process_asconf_param(struct sctp_association *asoc,
|
||||
sctp_assoc_set_primary(asoc, asconf->transport);
|
||||
sctp_assoc_del_nonprimary_peers(asoc,
|
||||
asconf->transport);
|
||||
} else
|
||||
sctp_assoc_del_peer(asoc, &addr);
|
||||
return SCTP_ERROR_NO_ERROR;
|
||||
}
|
||||
|
||||
/* If the address is not part of the association, the
|
||||
* ASCONF-ACK with Error Cause Indication Parameter
|
||||
* which including cause of Unresolvable Address should
|
||||
* be sent.
|
||||
*/
|
||||
peer = sctp_assoc_lookup_paddr(asoc, &addr);
|
||||
if (!peer)
|
||||
return SCTP_ERROR_DNS_FAILED;
|
||||
|
||||
sctp_assoc_rm_peer(asoc, peer);
|
||||
break;
|
||||
case SCTP_PARAM_SET_PRIMARY:
|
||||
/* ADDIP Section 4.2.4
|
||||
|
@ -954,7 +954,7 @@ static void sctp_cmd_del_non_primary(struct sctp_association *asoc)
|
||||
t = list_entry(pos, struct sctp_transport, transports);
|
||||
if (!sctp_cmp_addr_exact(&t->ipaddr,
|
||||
&asoc->peer.primary_addr)) {
|
||||
sctp_assoc_del_peer(asoc, &t->ipaddr);
|
||||
sctp_assoc_rm_peer(asoc, t);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user