r4305 - in dists/trunk/linux-2.6/debian: . patches-debian
patches-debian/series
maximilian attems
maks-guest at costa.debian.org
Tue Oct 4 03:16:49 UTC 2005
Author: maks-guest
Date: 2005-10-04 03:16:48 +0000 (Tue, 04 Oct 2005)
New Revision: 4305
Added:
dists/trunk/linux-2.6/debian/patches-debian/patch-2.6.13.3
Modified:
dists/trunk/linux-2.6/debian/changelog
dists/trunk/linux-2.6/debian/patches-debian/series/2.6.13-1
Log:
add latest stable 2.6.13.3 release
Modified: dists/trunk/linux-2.6/debian/changelog
===================================================================
--- dists/trunk/linux-2.6/debian/changelog 2005-10-03 21:02:13 UTC (rev 4304)
+++ dists/trunk/linux-2.6/debian/changelog 2005-10-04 03:16:48 UTC (rev 4305)
@@ -71,6 +71,15 @@
- forcedeth: Initialize link settings in every nv_open()
- Lost sockfd_put() in routing_ioctl()
- lost fput in 32bit ioctl on x86-64
+ * Added patch-2.6.13.3:
+ - Fix fs/exec.c:788 (de_thread()) BUG_ON
+ - Don't over-clamp window in tcp_clamp_window()
+ - fix IPv6 per-socket multicast filtering in exact-match case
+ - yenta oops fix
+ - ipvs: ip_vs_ftp breaks connections using persistence
+ - uml - Fix x86_64 page leak
+ - skge: set mac address oops with bonding
+ - tcp: set default congestion control correctly for incoming connections
[ Sven Luther ]
* [powerpc] Added hotplug support to the mv643xx_eth driver :
Added: dists/trunk/linux-2.6/debian/patches-debian/patch-2.6.13.3
===================================================================
--- dists/trunk/linux-2.6/debian/patches-debian/patch-2.6.13.3 2005-10-03 21:02:13 UTC (rev 4304)
+++ dists/trunk/linux-2.6/debian/patches-debian/patch-2.6.13.3 2005-10-04 03:16:48 UTC (rev 4305)
@@ -0,0 +1,420 @@
+diff --git a/arch/um/kernel/skas/include/mmu-skas.h b/arch/um/kernel/skas/include/mmu-skas.h
+--- a/arch/um/kernel/skas/include/mmu-skas.h
++++ b/arch/um/kernel/skas/include/mmu-skas.h
+@@ -6,11 +6,15 @@
+ #ifndef __SKAS_MMU_H
+ #define __SKAS_MMU_H
+
++#include "linux/config.h"
+ #include "mm_id.h"
+
+ struct mmu_context_skas {
+ struct mm_id id;
+ unsigned long last_page_table;
++#ifdef CONFIG_3_LEVEL_PGTABLES
++ unsigned long last_pmd;
++#endif
+ };
+
+ extern void switch_mm_skas(struct mm_id * mm_idp);
+diff --git a/arch/um/kernel/skas/mmu.c b/arch/um/kernel/skas/mmu.c
+--- a/arch/um/kernel/skas/mmu.c
++++ b/arch/um/kernel/skas/mmu.c
+@@ -56,6 +56,9 @@ static int init_stub_pte(struct mm_struc
+ */
+
+ mm->context.skas.last_page_table = pmd_page_kernel(*pmd);
++#ifdef CONFIG_3_LEVEL_PGTABLES
++ mm->context.skas.last_pmd = (unsigned long) __va(pud_val(*pud));
++#endif
+
+ *pte = mk_pte(virt_to_page(kernel), __pgprot(_PAGE_PRESENT));
+ *pte = pte_mkexec(*pte);
+@@ -140,6 +143,10 @@ void destroy_context_skas(struct mm_stru
+ else {
+ os_kill_ptraced_process(mmu->id.u.pid, 1);
+ free_page(mmu->id.stack);
+- free_page(mmu->last_page_table);
++ pte_free_kernel((pte_t *) mmu->last_page_table);
++ dec_page_state(nr_page_table_pages);
++#ifdef CONFIG_3_LEVEL_PGTABLES
++ pmd_free((pmd_t *) mmu->last_pmd);
++#endif
+ }
+ }
+diff --git a/drivers/net/skge.c b/drivers/net/skge.c
+--- a/drivers/net/skge.c
++++ b/drivers/net/skge.c
+@@ -2828,21 +2828,29 @@ static void skge_netpoll(struct net_devi
+ static int skge_set_mac_address(struct net_device *dev, void *p)
+ {
+ struct skge_port *skge = netdev_priv(dev);
+- struct sockaddr *addr = p;
+- int err = 0;
++ struct skge_hw *hw = skge->hw;
++ unsigned port = skge->port;
++ const struct sockaddr *addr = p;
+
+ if (!is_valid_ether_addr(addr->sa_data))
+ return -EADDRNOTAVAIL;
+
+- skge_down(dev);
++ spin_lock_bh(&hw->phy_lock);
+ memcpy(dev->dev_addr, addr->sa_data, ETH_ALEN);
+- memcpy_toio(skge->hw->regs + B2_MAC_1 + skge->port*8,
++ memcpy_toio(hw->regs + B2_MAC_1 + port*8,
+ dev->dev_addr, ETH_ALEN);
+- memcpy_toio(skge->hw->regs + B2_MAC_2 + skge->port*8,
++ memcpy_toio(hw->regs + B2_MAC_2 + port*8,
+ dev->dev_addr, ETH_ALEN);
+- if (dev->flags & IFF_UP)
+- err = skge_up(dev);
+- return err;
++
++ if (hw->chip_id == CHIP_ID_GENESIS)
++ xm_outaddr(hw, port, XM_SA, dev->dev_addr);
++ else {
++ gma_set_addr(hw, port, GM_SRC_ADDR_1L, dev->dev_addr);
++ gma_set_addr(hw, port, GM_SRC_ADDR_2L, dev->dev_addr);
++ }
++ spin_unlock_bh(&hw->phy_lock);
++
++ return 0;
+ }
+
+ static const struct {
+diff --git a/drivers/pcmcia/yenta_socket.c b/drivers/pcmcia/yenta_socket.c
+--- a/drivers/pcmcia/yenta_socket.c
++++ b/drivers/pcmcia/yenta_socket.c
+@@ -976,7 +976,18 @@ static int __devinit yenta_probe (struct
+ {
+ struct yenta_socket *socket;
+ int ret;
+-
++
++ /*
++ * If we failed to assign proper bus numbers for this cardbus
++ * controller during PCI probe, its subordinate pci_bus is NULL.
++ * Bail out if so.
++ */
++ if (!dev->subordinate) {
++ printk(KERN_ERR "Yenta: no bus associated with %s! "
++ "(try 'pci=assign-busses')\n", pci_name(dev));
++ return -ENODEV;
++ }
++
+ socket = kmalloc(sizeof(struct yenta_socket), GFP_KERNEL);
+ if (!socket)
+ return -ENOMEM;
+diff --git a/fs/exec.c b/fs/exec.c
+--- a/fs/exec.c
++++ b/fs/exec.c
+@@ -745,8 +745,8 @@ static inline int de_thread(struct task_
+ }
+
+ /*
+- * Now there are really no other threads at all,
+- * so it's safe to stop telling them to kill themselves.
++ * There may be one thread left which is just exiting,
++ * but it's safe to stop telling the group to kill themselves.
+ */
+ sig->flags = 0;
+
+@@ -785,7 +785,6 @@ no_thread_group:
+ kmem_cache_free(sighand_cachep, oldsighand);
+ }
+
+- BUG_ON(!thread_group_empty(current));
+ BUG_ON(!thread_group_leader(current));
+ return 0;
+ }
+diff --git a/include/asm-um/pgalloc.h b/include/asm-um/pgalloc.h
+--- a/include/asm-um/pgalloc.h
++++ b/include/asm-um/pgalloc.h
+@@ -42,11 +42,13 @@ static inline void pte_free(struct page
+ #define __pte_free_tlb(tlb,pte) tlb_remove_page((tlb),(pte))
+
+ #ifdef CONFIG_3_LEVEL_PGTABLES
+-/*
+- * In the 3-level case we free the pmds as part of the pgd.
+- */
+-#define pmd_free(x) do { } while (0)
+-#define __pmd_free_tlb(tlb,x) do { } while (0)
++
++extern __inline__ void pmd_free(pmd_t *pmd)
++{
++ free_page((unsigned long)pmd);
++}
++
++#define __pmd_free_tlb(tlb,x) tlb_remove_page((tlb),virt_to_page(x))
+ #endif
+
+ #define check_pgt_cache() do { } while (0)
+diff --git a/include/asm-um/pgtable-3level.h b/include/asm-um/pgtable-3level.h
+--- a/include/asm-um/pgtable-3level.h
++++ b/include/asm-um/pgtable-3level.h
+@@ -98,14 +98,11 @@ static inline pmd_t *pmd_alloc_one(struc
+ return pmd;
+ }
+
+-static inline void pmd_free(pmd_t *pmd){
+- free_page((unsigned long) pmd);
++extern inline void pud_clear (pud_t *pud)
++{
++ set_pud(pud, __pud(0));
+ }
+
+-#define __pmd_free_tlb(tlb,x) do { } while (0)
+-
+-static inline void pud_clear (pud_t * pud) { }
+-
+ #define pud_page(pud) \
+ ((struct page *) __va(pud_val(pud) & PAGE_MASK))
+
+diff --git a/include/net/ip_vs.h b/include/net/ip_vs.h
+--- a/include/net/ip_vs.h
++++ b/include/net/ip_vs.h
+@@ -84,6 +84,7 @@
+ #define IP_VS_CONN_F_IN_SEQ 0x0400 /* must do input seq adjust */
+ #define IP_VS_CONN_F_SEQ_MASK 0x0600 /* in/out sequence mask */
+ #define IP_VS_CONN_F_NO_CPORT 0x0800 /* no client port set yet */
++#define IP_VS_CONN_F_TEMPLATE 0x1000 /* template, not connection */
+
+ /* Move it to better place one day, for now keep it unique */
+ #define NFC_IPVS_PROPERTY 0x10000
+@@ -740,6 +741,8 @@ enum {
+
+ extern struct ip_vs_conn *ip_vs_conn_in_get
+ (int protocol, __u32 s_addr, __u16 s_port, __u32 d_addr, __u16 d_port);
++extern struct ip_vs_conn *ip_vs_ct_in_get
++(int protocol, __u32 s_addr, __u16 s_port, __u32 d_addr, __u16 d_port);
+ extern struct ip_vs_conn *ip_vs_conn_out_get
+ (int protocol, __u32 s_addr, __u16 s_port, __u32 d_addr, __u16 d_port);
+
+diff --git a/net/ipv4/ipvs/ip_vs_conn.c b/net/ipv4/ipvs/ip_vs_conn.c
+--- a/net/ipv4/ipvs/ip_vs_conn.c
++++ b/net/ipv4/ipvs/ip_vs_conn.c
+@@ -196,6 +196,7 @@ static inline struct ip_vs_conn *__ip_vs
+ list_for_each_entry(cp, &ip_vs_conn_tab[hash], c_list) {
+ if (s_addr==cp->caddr && s_port==cp->cport &&
+ d_port==cp->vport && d_addr==cp->vaddr &&
++ ((!s_port) ^ (!(cp->flags & IP_VS_CONN_F_NO_CPORT))) &&
+ protocol==cp->protocol) {
+ /* HIT */
+ atomic_inc(&cp->refcnt);
+@@ -227,6 +228,40 @@ struct ip_vs_conn *ip_vs_conn_in_get
+ return cp;
+ }
+
++/* Get reference to connection template */
++struct ip_vs_conn *ip_vs_ct_in_get
++(int protocol, __u32 s_addr, __u16 s_port, __u32 d_addr, __u16 d_port)
++{
++ unsigned hash;
++ struct ip_vs_conn *cp;
++
++ hash = ip_vs_conn_hashkey(protocol, s_addr, s_port);
++
++ ct_read_lock(hash);
++
++ list_for_each_entry(cp, &ip_vs_conn_tab[hash], c_list) {
++ if (s_addr==cp->caddr && s_port==cp->cport &&
++ d_port==cp->vport && d_addr==cp->vaddr &&
++ cp->flags & IP_VS_CONN_F_TEMPLATE &&
++ protocol==cp->protocol) {
++ /* HIT */
++ atomic_inc(&cp->refcnt);
++ goto out;
++ }
++ }
++ cp = NULL;
++
++ out:
++ ct_read_unlock(hash);
++
++ IP_VS_DBG(7, "template lookup/in %s %u.%u.%u.%u:%d->%u.%u.%u.%u:%d %s\n",
++ ip_vs_proto_name(protocol),
++ NIPQUAD(s_addr), ntohs(s_port),
++ NIPQUAD(d_addr), ntohs(d_port),
++ cp?"hit":"not hit");
++
++ return cp;
++}
+
+ /*
+ * Gets ip_vs_conn associated with supplied parameters in the ip_vs_conn_tab.
+@@ -367,7 +402,7 @@ ip_vs_bind_dest(struct ip_vs_conn *cp, s
+ atomic_read(&dest->refcnt));
+
+ /* Update the connection counters */
+- if (cp->cport || (cp->flags & IP_VS_CONN_F_NO_CPORT)) {
++ if (!(cp->flags & IP_VS_CONN_F_TEMPLATE)) {
+ /* It is a normal connection, so increase the inactive
+ connection counter because it is in TCP SYNRECV
+ state (inactive) or other protocol inacive state */
+@@ -406,7 +441,7 @@ static inline void ip_vs_unbind_dest(str
+ atomic_read(&dest->refcnt));
+
+ /* Update the connection counters */
+- if (cp->cport || (cp->flags & IP_VS_CONN_F_NO_CPORT)) {
++ if (!(cp->flags & IP_VS_CONN_F_TEMPLATE)) {
+ /* It is a normal connection, so decrease the inactconns
+ or activeconns counter */
+ if (cp->flags & IP_VS_CONN_F_INACTIVE) {
+@@ -776,7 +811,7 @@ void ip_vs_random_dropentry(void)
+ ct_write_lock_bh(hash);
+
+ list_for_each_entry(cp, &ip_vs_conn_tab[hash], c_list) {
+- if (!cp->cport && !(cp->flags & IP_VS_CONN_F_NO_CPORT))
++ if (cp->flags & IP_VS_CONN_F_TEMPLATE)
+ /* connection template */
+ continue;
+
+diff --git a/net/ipv4/ipvs/ip_vs_core.c b/net/ipv4/ipvs/ip_vs_core.c
+--- a/net/ipv4/ipvs/ip_vs_core.c
++++ b/net/ipv4/ipvs/ip_vs_core.c
+@@ -242,10 +242,10 @@ ip_vs_sched_persist(struct ip_vs_service
+ if (ports[1] == svc->port) {
+ /* Check if a template already exists */
+ if (svc->port != FTPPORT)
+- ct = ip_vs_conn_in_get(iph->protocol, snet, 0,
++ ct = ip_vs_ct_in_get(iph->protocol, snet, 0,
+ iph->daddr, ports[1]);
+ else
+- ct = ip_vs_conn_in_get(iph->protocol, snet, 0,
++ ct = ip_vs_ct_in_get(iph->protocol, snet, 0,
+ iph->daddr, 0);
+
+ if (!ct || !ip_vs_check_template(ct)) {
+@@ -271,14 +271,14 @@ ip_vs_sched_persist(struct ip_vs_service
+ iph->daddr,
+ ports[1],
+ dest->addr, dest->port,
+- 0,
++ IP_VS_CONN_F_TEMPLATE,
+ dest);
+ else
+ ct = ip_vs_conn_new(iph->protocol,
+ snet, 0,
+ iph->daddr, 0,
+ dest->addr, 0,
+- 0,
++ IP_VS_CONN_F_TEMPLATE,
+ dest);
+ if (ct == NULL)
+ return NULL;
+@@ -297,10 +297,10 @@ ip_vs_sched_persist(struct ip_vs_service
+ * port zero template: <protocol,caddr,0,vaddr,0,daddr,0>
+ */
+ if (svc->fwmark)
+- ct = ip_vs_conn_in_get(IPPROTO_IP, snet, 0,
++ ct = ip_vs_ct_in_get(IPPROTO_IP, snet, 0,
+ htonl(svc->fwmark), 0);
+ else
+- ct = ip_vs_conn_in_get(iph->protocol, snet, 0,
++ ct = ip_vs_ct_in_get(iph->protocol, snet, 0,
+ iph->daddr, 0);
+
+ if (!ct || !ip_vs_check_template(ct)) {
+@@ -325,14 +325,14 @@ ip_vs_sched_persist(struct ip_vs_service
+ snet, 0,
+ htonl(svc->fwmark), 0,
+ dest->addr, 0,
+- 0,
++ IP_VS_CONN_F_TEMPLATE,
+ dest);
+ else
+ ct = ip_vs_conn_new(iph->protocol,
+ snet, 0,
+ iph->daddr, 0,
+ dest->addr, 0,
+- 0,
++ IP_VS_CONN_F_TEMPLATE,
+ dest);
+ if (ct == NULL)
+ return NULL;
+diff --git a/net/ipv4/ipvs/ip_vs_sync.c b/net/ipv4/ipvs/ip_vs_sync.c
+--- a/net/ipv4/ipvs/ip_vs_sync.c
++++ b/net/ipv4/ipvs/ip_vs_sync.c
+@@ -297,16 +297,24 @@ static void ip_vs_process_message(const
+
+ p = (char *)buffer + sizeof(struct ip_vs_sync_mesg);
+ for (i=0; i<m->nr_conns; i++) {
++ unsigned flags;
++
+ s = (struct ip_vs_sync_conn *)p;
+- cp = ip_vs_conn_in_get(s->protocol,
+- s->caddr, s->cport,
+- s->vaddr, s->vport);
++ flags = ntohs(s->flags);
++ if (!(flags & IP_VS_CONN_F_TEMPLATE))
++ cp = ip_vs_conn_in_get(s->protocol,
++ s->caddr, s->cport,
++ s->vaddr, s->vport);
++ else
++ cp = ip_vs_ct_in_get(s->protocol,
++ s->caddr, s->cport,
++ s->vaddr, s->vport);
+ if (!cp) {
+ cp = ip_vs_conn_new(s->protocol,
+ s->caddr, s->cport,
+ s->vaddr, s->vport,
+ s->daddr, s->dport,
+- ntohs(s->flags), NULL);
++ flags, NULL);
+ if (!cp) {
+ IP_VS_ERR("ip_vs_conn_new failed\n");
+ return;
+@@ -315,11 +323,11 @@ static void ip_vs_process_message(const
+ } else if (!cp->dest) {
+ /* it is an entry created by the synchronization */
+ cp->state = ntohs(s->state);
+- cp->flags = ntohs(s->flags) | IP_VS_CONN_F_HASHED;
++ cp->flags = flags | IP_VS_CONN_F_HASHED;
+ } /* Note that we don't touch its state and flags
+ if it is a normal entry. */
+
+- if (ntohs(s->flags) & IP_VS_CONN_F_SEQ_MASK) {
++ if (flags & IP_VS_CONN_F_SEQ_MASK) {
+ opt = (struct ip_vs_sync_conn_options *)&s[1];
+ memcpy(&cp->in_seq, opt, sizeof(*opt));
+ p += FULL_CONN_SIZE;
+diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
+--- a/net/ipv4/tcp_input.c
++++ b/net/ipv4/tcp_input.c
+@@ -350,8 +350,6 @@ static void tcp_clamp_window(struct sock
+ app_win -= tp->ack.rcv_mss;
+ app_win = max(app_win, 2U*tp->advmss);
+
+- if (!ofo_win)
+- tp->window_clamp = min(tp->window_clamp, app_win);
+ tp->rcv_ssthresh = min(tp->window_clamp, 2U*tp->advmss);
+ }
+ }
+diff --git a/net/ipv4/tcp_minisocks.c b/net/ipv4/tcp_minisocks.c
+--- a/net/ipv4/tcp_minisocks.c
++++ b/net/ipv4/tcp_minisocks.c
+@@ -774,7 +774,7 @@ struct sock *tcp_create_openreq_child(st
+ newtp->frto_counter = 0;
+ newtp->frto_highmark = 0;
+
+- newtp->ca_ops = &tcp_reno;
++ newtp->ca_ops = &tcp_init_congestion_ops;
+
+ tcp_set_ca_state(newtp, TCP_CA_Open);
+ tcp_init_xmit_timers(newsk);
+diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c
+--- a/net/ipv6/udp.c
++++ b/net/ipv6/udp.c
+@@ -404,9 +404,8 @@ static struct sock *udp_v6_mcast_next(st
+ continue;
+
+ if (!ipv6_addr_any(&np->rcv_saddr)) {
+- if (ipv6_addr_equal(&np->rcv_saddr, loc_addr))
+- return s;
+- continue;
++ if (!ipv6_addr_equal(&np->rcv_saddr, loc_addr))
++ continue;
+ }
+ if(!inet6_mc_check(s, loc_addr, rmt_addr))
+ continue;
Modified: dists/trunk/linux-2.6/debian/patches-debian/series/2.6.13-1
===================================================================
--- dists/trunk/linux-2.6/debian/patches-debian/series/2.6.13-1 2005-10-03 21:02:13 UTC (rev 4304)
+++ dists/trunk/linux-2.6/debian/patches-debian/series/2.6.13-1 2005-10-04 03:16:48 UTC (rev 4305)
@@ -24,4 +24,5 @@
+ patch-2.6.13.2
+ amd64-tlb-flush-sigsegv-fix.patch
+ powerpc-apus.patch
++ patch-2.6.13.3
More information about the Kernel-svn-changes
mailing list