Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
* 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6: [AF_RXRPC]: Add a missing goto [VLAN]: Lost rtnl_unlock() in vlan_ioctl() [SCTP]: Fix the bind_addr info during migration. [SCTP]: Add bind hash locking to the migrate code [IPV4]: Remove prototype of ip_rt_advice [IPv4]: Reply net unreachable ICMP message [IPv6] SNMP: Increment OutNoRoutes when connecting to unreachable network [BRIDGE]: Section fix. [NIU]: Fix link LED handling.
This commit is contained in:
Коммит
29ac0052ea
|
@ -1045,6 +1045,7 @@ static int niu_serdes_init(struct niu *np)
|
|||
}
|
||||
|
||||
static void niu_init_xif(struct niu *);
|
||||
static void niu_handle_led(struct niu *, int status);
|
||||
|
||||
static int niu_link_status_common(struct niu *np, int link_up)
|
||||
{
|
||||
|
@ -1066,11 +1067,15 @@ static int niu_link_status_common(struct niu *np, int link_up)
|
|||
|
||||
spin_lock_irqsave(&np->lock, flags);
|
||||
niu_init_xif(np);
|
||||
niu_handle_led(np, 1);
|
||||
spin_unlock_irqrestore(&np->lock, flags);
|
||||
|
||||
netif_carrier_on(dev);
|
||||
} else if (netif_carrier_ok(dev) && !link_up) {
|
||||
niuwarn(LINK, "%s: Link is down\n", dev->name);
|
||||
spin_lock_irqsave(&np->lock, flags);
|
||||
niu_handle_led(np, 0);
|
||||
spin_unlock_irqrestore(&np->lock, flags);
|
||||
netif_carrier_off(dev);
|
||||
}
|
||||
|
||||
|
@ -3915,16 +3920,14 @@ static int niu_init_ipp(struct niu *np)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static void niu_init_xif_xmac(struct niu *np)
|
||||
static void niu_handle_led(struct niu *np, int status)
|
||||
{
|
||||
struct niu_link_config *lp = &np->link_config;
|
||||
u64 val;
|
||||
|
||||
val = nr64_mac(XMAC_CONFIG);
|
||||
|
||||
if ((np->flags & NIU_FLAGS_10G) != 0 &&
|
||||
(np->flags & NIU_FLAGS_FIBER) != 0) {
|
||||
if (netif_carrier_ok(np->dev)) {
|
||||
if (status) {
|
||||
val |= XMAC_CONFIG_LED_POLARITY;
|
||||
val &= ~XMAC_CONFIG_FORCE_LED_ON;
|
||||
} else {
|
||||
|
@ -3933,6 +3936,15 @@ static void niu_init_xif_xmac(struct niu *np)
|
|||
}
|
||||
}
|
||||
|
||||
nw64_mac(XMAC_CONFIG, val);
|
||||
}
|
||||
|
||||
static void niu_init_xif_xmac(struct niu *np)
|
||||
{
|
||||
struct niu_link_config *lp = &np->link_config;
|
||||
u64 val;
|
||||
|
||||
val = nr64_mac(XMAC_CONFIG);
|
||||
val &= ~XMAC_CONFIG_SEL_POR_CLK_SRC;
|
||||
|
||||
val |= XMAC_CONFIG_TX_OUTPUT_EN;
|
||||
|
@ -4776,6 +4788,8 @@ static int niu_close(struct net_device *dev)
|
|||
|
||||
niu_free_channels(np);
|
||||
|
||||
niu_handle_led(np, 0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -109,7 +109,6 @@ struct in_device;
|
|||
extern int ip_rt_init(void);
|
||||
extern void ip_rt_redirect(__be32 old_gw, __be32 dst, __be32 new_gw,
|
||||
__be32 src, struct net_device *dev);
|
||||
extern void ip_rt_advice(struct rtable **rp, int advice);
|
||||
extern void rt_cache_flush(int how);
|
||||
extern int __ip_route_output_key(struct rtable **, const struct flowi *flp);
|
||||
extern int ip_route_output_key(struct rtable **, struct flowi *flp);
|
||||
|
|
|
@ -1184,6 +1184,9 @@ int sctp_bind_addr_copy(struct sctp_bind_addr *dest,
|
|||
const struct sctp_bind_addr *src,
|
||||
sctp_scope_t scope, gfp_t gfp,
|
||||
int flags);
|
||||
int sctp_bind_addr_dup(struct sctp_bind_addr *dest,
|
||||
const struct sctp_bind_addr *src,
|
||||
gfp_t gfp);
|
||||
int sctp_add_bind_addr(struct sctp_bind_addr *, union sctp_addr *,
|
||||
__u8 use_as_src, gfp_t gfp);
|
||||
int sctp_del_bind_addr(struct sctp_bind_addr *, union sctp_addr *);
|
||||
|
|
|
@ -776,7 +776,7 @@ static int vlan_ioctl_handler(struct net *net, void __user *arg)
|
|||
case SET_VLAN_NAME_TYPE_CMD:
|
||||
err = -EPERM;
|
||||
if (!capable(CAP_NET_ADMIN))
|
||||
return -EPERM;
|
||||
break;
|
||||
if ((args.u.name_type >= 0) &&
|
||||
(args.u.name_type < VLAN_NAME_TYPE_HIGHEST)) {
|
||||
vlan_name_type = args.u.name_type;
|
||||
|
|
|
@ -44,7 +44,7 @@ int __init br_fdb_init(void)
|
|||
return 0;
|
||||
}
|
||||
|
||||
void __exit br_fdb_fini(void)
|
||||
void br_fdb_fini(void)
|
||||
{
|
||||
kmem_cache_destroy(br_fdb_cache);
|
||||
}
|
||||
|
|
|
@ -1161,7 +1161,7 @@ static struct dst_entry *ipv4_negative_advice(struct dst_entry *dst)
|
|||
unsigned hash = rt_hash(rt->fl.fl4_dst, rt->fl.fl4_src,
|
||||
rt->fl.oif);
|
||||
#if RT_CACHE_DEBUG >= 1
|
||||
printk(KERN_DEBUG "ip_rt_advice: redirect to "
|
||||
printk(KERN_DEBUG "ipv4_negative_advice: redirect to "
|
||||
"%u.%u.%u.%u/%02x dropped\n",
|
||||
NIPQUAD(rt->rt_dst), rt->fl.fl4_tos);
|
||||
#endif
|
||||
|
@ -1252,6 +1252,7 @@ static int ip_error(struct sk_buff *skb)
|
|||
break;
|
||||
case ENETUNREACH:
|
||||
code = ICMP_NET_UNREACH;
|
||||
IP_INC_STATS_BH(IPSTATS_MIB_INNOROUTES);
|
||||
break;
|
||||
case EACCES:
|
||||
code = ICMP_PKT_FILTERED;
|
||||
|
@ -1881,6 +1882,8 @@ no_route:
|
|||
RT_CACHE_STAT_INC(in_no_route);
|
||||
spec_dst = inet_select_addr(dev, 0, RT_SCOPE_UNIVERSE);
|
||||
res.type = RTN_UNREACHABLE;
|
||||
if (err == -ESRCH)
|
||||
err = -ENETUNREACH;
|
||||
goto local_input;
|
||||
|
||||
/*
|
||||
|
|
|
@ -933,6 +933,8 @@ static int ip6_dst_lookup_tail(struct sock *sk,
|
|||
return 0;
|
||||
|
||||
out_err_release:
|
||||
if (err == -ENETUNREACH)
|
||||
IP6_INC_STATS_BH(NULL, IPSTATS_MIB_OUTNOROUTES);
|
||||
dst_release(*dst);
|
||||
*dst = NULL;
|
||||
return err;
|
||||
|
|
|
@ -1021,6 +1021,7 @@ static int rxkad_verify_response(struct rxrpc_connection *conn,
|
|||
|
||||
abort_code = RXKADINCONSISTENCY;
|
||||
if (version != RXKAD_VERSION)
|
||||
goto protocol_error;
|
||||
|
||||
abort_code = RXKADTICKETLEN;
|
||||
if (ticket_len < 4 || ticket_len > MAXKRB5TICKETLEN)
|
||||
|
|
|
@ -105,6 +105,32 @@ out:
|
|||
return error;
|
||||
}
|
||||
|
||||
/* Exactly duplicate the address lists. This is necessary when doing
|
||||
* peer-offs and accepts. We don't want to put all the current system
|
||||
* addresses into the endpoint. That's useless. But we do want duplicat
|
||||
* the list of bound addresses that the older endpoint used.
|
||||
*/
|
||||
int sctp_bind_addr_dup(struct sctp_bind_addr *dest,
|
||||
const struct sctp_bind_addr *src,
|
||||
gfp_t gfp)
|
||||
{
|
||||
struct sctp_sockaddr_entry *addr;
|
||||
struct list_head *pos;
|
||||
int error = 0;
|
||||
|
||||
/* All addresses share the same port. */
|
||||
dest->port = src->port;
|
||||
|
||||
list_for_each(pos, &src->address_list) {
|
||||
addr = list_entry(pos, struct sctp_sockaddr_entry, list);
|
||||
error = sctp_add_bind_addr(dest, &addr->a, 1, gfp);
|
||||
if (error < 0)
|
||||
break;
|
||||
}
|
||||
|
||||
return error;
|
||||
}
|
||||
|
||||
/* Initialize the SCTP_bind_addr structure for either an endpoint or
|
||||
* an association.
|
||||
*/
|
||||
|
|
|
@ -6325,7 +6325,7 @@ static void sctp_sock_migrate(struct sock *oldsk, struct sock *newsk,
|
|||
struct sctp_endpoint *newep = newsp->ep;
|
||||
struct sk_buff *skb, *tmp;
|
||||
struct sctp_ulpevent *event;
|
||||
int flags = 0;
|
||||
struct sctp_bind_hashbucket *head;
|
||||
|
||||
/* Migrate socket buffer sizes and all the socket level options to the
|
||||
* new socket.
|
||||
|
@ -6342,23 +6342,21 @@ static void sctp_sock_migrate(struct sock *oldsk, struct sock *newsk,
|
|||
newsp->hmac = NULL;
|
||||
|
||||
/* Hook this new socket in to the bind_hash list. */
|
||||
head = &sctp_port_hashtable[sctp_phashfn(inet_sk(oldsk)->num)];
|
||||
sctp_local_bh_disable();
|
||||
sctp_spin_lock(&head->lock);
|
||||
pp = sctp_sk(oldsk)->bind_hash;
|
||||
sk_add_bind_node(newsk, &pp->owner);
|
||||
sctp_sk(newsk)->bind_hash = pp;
|
||||
inet_sk(newsk)->num = inet_sk(oldsk)->num;
|
||||
sctp_spin_unlock(&head->lock);
|
||||
sctp_local_bh_enable();
|
||||
|
||||
/* Copy the bind_addr list from the original endpoint to the new
|
||||
* endpoint so that we can handle restarts properly
|
||||
*/
|
||||
if (PF_INET6 == assoc->base.sk->sk_family)
|
||||
flags = SCTP_ADDR6_ALLOWED;
|
||||
if (assoc->peer.ipv4_address)
|
||||
flags |= SCTP_ADDR4_PEERSUPP;
|
||||
if (assoc->peer.ipv6_address)
|
||||
flags |= SCTP_ADDR6_PEERSUPP;
|
||||
sctp_bind_addr_copy(&newsp->ep->base.bind_addr,
|
||||
&oldsp->ep->base.bind_addr,
|
||||
SCTP_SCOPE_GLOBAL, GFP_KERNEL, flags);
|
||||
sctp_bind_addr_dup(&newsp->ep->base.bind_addr,
|
||||
&oldsp->ep->base.bind_addr, GFP_KERNEL);
|
||||
|
||||
/* Move any messages in the old socket's receive queue that are for the
|
||||
* peeled off association to the new socket's receive queue.
|
||||
|
|
Загрузка…
Ссылка в новой задаче