forked from luck/tmp_suning_uos_patched
Merge master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
* master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6: [LAPB]: Fix windowsize check [TCP]: Fixes IW > 2 cases when TCP is application limited [PKT_SCHED] RED: Fix overflow in calculation of queue average [LLX]: SOCK_DGRAM interface fixes [PKT_SCHED]: Return ENOENT if qdisc module is unavailable [BRIDGE]: netlink status fix
This commit is contained in:
commit
cb3f1e7b83
|
@ -212,7 +212,7 @@ static inline unsigned long red_calc_qavg_from_idle_time(struct red_parms *p)
|
||||||
* Seems, it is the best solution to
|
* Seems, it is the best solution to
|
||||||
* problem of too coarse exponent tabulation.
|
* problem of too coarse exponent tabulation.
|
||||||
*/
|
*/
|
||||||
us_idle = (p->qavg * us_idle) >> p->Scell_log;
|
us_idle = (p->qavg * (u64)us_idle) >> p->Scell_log;
|
||||||
|
|
||||||
if (us_idle < (p->qavg >> 1))
|
if (us_idle < (p->qavg >> 1))
|
||||||
return p->qavg - us_idle;
|
return p->qavg - us_idle;
|
||||||
|
|
|
@ -85,7 +85,7 @@ void br_ifinfo_notify(int event, struct net_bridge_port *port)
|
||||||
goto err_out;
|
goto err_out;
|
||||||
|
|
||||||
err = br_fill_ifinfo(skb, port, current->pid, 0, event, 0);
|
err = br_fill_ifinfo(skb, port, current->pid, 0, event, 0);
|
||||||
if (err)
|
if (err < 0)
|
||||||
goto err_kfree;
|
goto err_kfree;
|
||||||
|
|
||||||
NETLINK_CB(skb).dst_group = RTNLGRP_LINK;
|
NETLINK_CB(skb).dst_group = RTNLGRP_LINK;
|
||||||
|
|
|
@ -3541,7 +3541,8 @@ void tcp_cwnd_application_limited(struct sock *sk)
|
||||||
if (inet_csk(sk)->icsk_ca_state == TCP_CA_Open &&
|
if (inet_csk(sk)->icsk_ca_state == TCP_CA_Open &&
|
||||||
sk->sk_socket && !test_bit(SOCK_NOSPACE, &sk->sk_socket->flags)) {
|
sk->sk_socket && !test_bit(SOCK_NOSPACE, &sk->sk_socket->flags)) {
|
||||||
/* Limited by application or receiver window. */
|
/* Limited by application or receiver window. */
|
||||||
u32 win_used = max(tp->snd_cwnd_used, 2U);
|
u32 init_win = tcp_init_cwnd(tp, __sk_dst_get(sk));
|
||||||
|
u32 win_used = max(tp->snd_cwnd_used, init_win);
|
||||||
if (win_used < tp->snd_cwnd) {
|
if (win_used < tp->snd_cwnd) {
|
||||||
tp->snd_ssthresh = tcp_current_ssthresh(sk);
|
tp->snd_ssthresh = tcp_current_ssthresh(sk);
|
||||||
tp->snd_cwnd = (tp->snd_cwnd + win_used) >> 1;
|
tp->snd_cwnd = (tp->snd_cwnd + win_used) >> 1;
|
||||||
|
|
|
@ -238,11 +238,13 @@ int lapb_setparms(struct net_device *dev, struct lapb_parms_struct *parms)
|
||||||
goto out_put;
|
goto out_put;
|
||||||
|
|
||||||
if (lapb->state == LAPB_STATE_0) {
|
if (lapb->state == LAPB_STATE_0) {
|
||||||
if (((parms->mode & LAPB_EXTENDED) &&
|
if (parms->mode & LAPB_EXTENDED) {
|
||||||
(parms->window < 1 || parms->window > 127)) ||
|
if (parms->window < 1 || parms->window > 127)
|
||||||
(parms->window < 1 || parms->window > 7))
|
|
||||||
goto out_put;
|
goto out_put;
|
||||||
|
} else {
|
||||||
|
if (parms->window < 1 || parms->window > 7)
|
||||||
|
goto out_put;
|
||||||
|
}
|
||||||
lapb->mode = parms->mode;
|
lapb->mode = parms->mode;
|
||||||
lapb->window = parms->window;
|
lapb->window = parms->window;
|
||||||
}
|
}
|
||||||
|
|
|
@ -784,24 +784,20 @@ static int llc_ui_recvmsg(struct kiocb *iocb, struct socket *sock,
|
||||||
copied += used;
|
copied += used;
|
||||||
len -= used;
|
len -= used;
|
||||||
|
|
||||||
if (used + offset < skb->len)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (!(flags & MSG_PEEK)) {
|
if (!(flags & MSG_PEEK)) {
|
||||||
sk_eat_skb(sk, skb, 0);
|
sk_eat_skb(sk, skb, 0);
|
||||||
*seq = 0;
|
*seq = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* For non stream protcols we get one packet per recvmsg call */
|
||||||
|
if (sk->sk_type != SOCK_STREAM)
|
||||||
|
goto copy_uaddr;
|
||||||
|
|
||||||
|
/* Partial read */
|
||||||
|
if (used + offset < skb->len)
|
||||||
|
continue;
|
||||||
} while (len > 0);
|
} while (len > 0);
|
||||||
|
|
||||||
/*
|
|
||||||
* According to UNIX98, msg_name/msg_namelen are ignored
|
|
||||||
* on connected socket. -ANK
|
|
||||||
* But... af_llc still doesn't have separate sets of methods for
|
|
||||||
* SOCK_DGRAM and SOCK_STREAM :-( So we have to do this test, will
|
|
||||||
* eventually fix this tho :-) -acme
|
|
||||||
*/
|
|
||||||
if (sk->sk_type == SOCK_DGRAM)
|
|
||||||
goto copy_uaddr;
|
|
||||||
out:
|
out:
|
||||||
release_sock(sk);
|
release_sock(sk);
|
||||||
return copied;
|
return copied;
|
||||||
|
|
|
@ -51,10 +51,10 @@ void llc_save_primitive(struct sock *sk, struct sk_buff* skb, u8 prim)
|
||||||
{
|
{
|
||||||
struct sockaddr_llc *addr;
|
struct sockaddr_llc *addr;
|
||||||
|
|
||||||
if (skb->sk->sk_type == SOCK_STREAM) /* See UNIX98 */
|
|
||||||
return;
|
|
||||||
/* save primitive for use by the user. */
|
/* save primitive for use by the user. */
|
||||||
addr = llc_ui_skb_cb(skb);
|
addr = llc_ui_skb_cb(skb);
|
||||||
|
|
||||||
|
memset(addr, 0, sizeof(*addr));
|
||||||
addr->sllc_family = sk->sk_family;
|
addr->sllc_family = sk->sk_family;
|
||||||
addr->sllc_arphrd = skb->dev->type;
|
addr->sllc_arphrd = skb->dev->type;
|
||||||
addr->sllc_test = prim == LLC_TEST_PRIM;
|
addr->sllc_test = prim == LLC_TEST_PRIM;
|
||||||
|
|
|
@ -430,7 +430,7 @@ qdisc_create(struct net_device *dev, u32 handle, struct rtattr **tca, int *errp)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
err = -EINVAL;
|
err = -ENOENT;
|
||||||
if (ops == NULL)
|
if (ops == NULL)
|
||||||
goto err_out;
|
goto err_out;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user