* [PATCH][ANNOUNCE] Linux 2.5.68-ce3
@ 2003-04-24 3:01 Chuck Ebbert
0 siblings, 0 replies; only message in thread
From: Chuck Ebbert @ 2003-04-24 3:01 UTC (permalink / raw)
To: linux-kernel
Summary:
Fixes ethernet and hd detection order problems.
Many other small bugfixes (aio, ppa, rpc, scheduler,
ext3, vm, ide, memory leaks...)
Performance enhancements (fat filesystem, scsi...)
New in 2.5.68-ce3:
=====================================================================
extraversion.3.patch (me)
- update version
oom_kill.1.patch (wli)
- prevent false out-of-memory kills
irq_align.3.patch (me)
- cache align start of x86 interrupt handler table
- 8-byte align the handlers
- move common_interrupt so it's after the
first 16 interrupts even when NR_IRQS = 224
tftp.1.patch (Jeff Smith)
- fix misspelling in Kconfig for TFTP conntrack
unusual.1.patch (Hanno Boeck)
- fixes for some unusual USB devices
Plus the following patches shamelessly stolen from 2.5.68-mm2:
aio-retval-fix.patch Async IO
kobj_lock-fix.patch Object locking
ppa-null-pointer-fix.patch Iomega Zip
rpciod-atomic-allocations.patch RPC
sched_idle-typo-fix.patch Scheduler
sk-allocation.patch Socket
sym-do-160.patch Make sym53c8xx do 160MB/s
================================================================================
Older changelog entries removed -- see archives
================================================================================
Makefile | 2 -
arch/i386/kernel/entry.S | 38 +++++++++++++++++++++++++++++-------
arch/i386/kernel/io_apic.c | 2 -
drivers/char/keyboard.c | 2 -
drivers/ide/ide-probe.c | 2 -
drivers/isdn/tpam/tpam_queues.c | 1
drivers/net/sis900.c | 1
drivers/net/wan/sdla_ppp.c | 3 --
drivers/pci/bus.c | 9 +++++++-
drivers/pci/probe.c | 2 -
drivers/scsi/ppa.c | 6 +++--
drivers/scsi/sym53c8xx_2/sym_hipd.c | 3 +-
drivers/usb/storage/unusual_devs.h | 25 +++++++++++++++++++++++
fs/aio.c | 6 +++--
fs/ext3/super.c | 12 +++++------
fs/fat/inode.c | 1
fs/fat/misc.c | 1
include/linux/msdos_fs.h | 3 --
kernel/sched.c | 2 -
lib/kobject.c | 19 ++++++++++++------
mm/oom_kill.c | 7 +++++-
mm/vmscan.c | 21 +++++++++++++++++--
net/ax25/af_ax25.c | 2 +
net/ipv4/netfilter/Kconfig | 2 -
net/ipv4/netfilter/ip_queue.c | 8 +++++--
net/ipv6/netfilter/ip6_queue.c | 6 ++++-
net/irda/irttp.c | 2 -
net/sunrpc/clnt.c | 3 --
net/sunrpc/sched.c | 2 -
net/sunrpc/xprt.c | 1
30 files changed, 147 insertions(+), 47 deletions(-)
================================================================================
diff -u --exclude-from=/home/me/.exclude -r a/Makefile b/Makefile
--- a/Makefile Sun Apr 20 06:26:50 2003
+++ b/Makefile Wed Apr 23 13:45:47 2003
@ -1,7 +1,7 @
VERSION = 2
PATCHLEVEL = 5
SUBLEVEL = 68
-EXTRAVERSION =
+EXTRAVERSION = -ce3
# *DOCUMENTATION*
# To see a list of typical targets execute "make help"
diff -u --exclude-from=/home/me/.exclude -r a/arch/i386/kernel/entry.S b/arch/i386/kernel/entry.S
--- a/arch/i386/kernel/entry.S Sat Mar 29 09:16:32 2003
+++ b/arch/i386/kernel/entry.S Wed Apr 23 11:47:23 2003
@ -42,6 +42,7 @
#include <linux/config.h>
#include <linux/linkage.h>
+#include <asm/cache.h>
#include <asm/thread_info.h>
#include <asm/errno.h>
#include <asm/segment.h>
@ -49,6 +50,8 @
#include <asm/page.h>
#include "irq_vectors.h"
+#define L1ALIGN .align L1_CACHE_BYTES,0x90
+
EBX = 0x00
ECX = 0x04
EDX = 0x08
@ -382,29 +385,50 @
ENTRY(interrupt)
.text
+ L1ALIGN # first 16 entries fit in 128 bytes
vector=0
-ENTRY(irq_entries_start)
-.rept NR_IRQS
- ALIGN
-1: pushl $vector-256
- jmp common_interrupt
+ENTRY(low_irq_entries_start)
+.rept 16 # build just the first 16
+ .align 8,0x90
+1: pushl $vector-256 # 5-byte instruction
+ jmp common_interrupt # 2 bytes (always 8-bit offset here)
.data
.long 1b
.text
vector=vector+1
.endr
- ALIGN
+ /* Placing common_interrupt here gives better packing
+ * for interrupt handlers in io-apic mode. Code in this
+ * area does not place anything in .data, so this is safe
+ * to do and will not corrupt the interrupt[] array.
+ */
+ .align 8,0x90
common_interrupt:
SAVE_ALL
call do_IRQ
jmp ret_from_intr
+.if NR_IRQS > 16
+ .align 8,0x90 # make ENTRY have exact address
+ENTRY(high_irq_entries_start)
+.rept NR_IRQS-16 # now the rest of the interrupt stubs
+ .align 8,0x90
+1: pushl $vector-256 # 5-byte instruction
+ jmp common_interrupt # 2 or 5 bytes (8 or 32-bit offset)
+.data
+ .long 1b
+.text
+vector=vector+1
+.endr
+.endif
+
#define BUILD_INTERRUPT(name, nr) \
+ .align 8,0x90; \
ENTRY(name) \
pushl $nr-256; \
SAVE_ALL \
- call smp_/**/name; \
+ call smp_/**/name; \
jmp ret_from_intr;
/* The include is where all of the SMP etc. interrupts come from */
diff -u --exclude-from=/home/me/.exclude -r a/arch/i386/kernel/io_apic.c b/arch/i386/kernel/io_apic.c
--- a/arch/i386/kernel/io_apic.c Sun Apr 20 06:26:50 2003
+++ b/arch/i386/kernel/io_apic.c Sun Apr 20 17:41:22 2003
@ -1117,7 +1117,7 @
if (current_vector == SYSCALL_VECTOR)
goto next;
- if (current_vector > FIRST_SYSTEM_VECTOR) {
+ if (current_vector >= FIRST_SYSTEM_VECTOR) {
offset = (offset + 1) & 7;
current_vector = FIRST_DEVICE_VECTOR + offset;
}
diff -u --exclude-from=/home/me/.exclude -r a/drivers/char/keyboard.c b/drivers/char/keyboard.c
--- a/drivers/char/keyboard.c Tue Mar 4 22:29:17 2003
+++ b/drivers/char/keyboard.c Sun Apr 20 14:46:11 2003
@ -601,7 +601,7 @
return;
if ((kbd->kbdmode == VC_RAW ||
kbd->kbdmode == VC_MEDIUMRAW) &&
- value != K_SAK)
+ value != KVAL(K_SAK))
return; /* SAK is allowed even in raw mode */
fn_handler[value](vc, regs);
}
diff -u --exclude-from=/home/me/.exclude -r a/drivers/ide/ide-probe.c b/drivers/ide/ide-probe.c
--- a/drivers/ide/ide-probe.c Sun Apr 20 06:26:51 2003
+++ b/drivers/ide/ide-probe.c Sun Apr 20 15:28:23 2003
@ -1214,7 +1214,7 @
spin_unlock_irq(&ide_lock);
out_up:
up(&ide_cfg_sem);
- return 0;
+ return 1;
}
static int ata_lock(dev_t dev, void *data)
diff -u --exclude-from=/home/me/.exclude -r a/drivers/isdn/tpam/tpam_queues.c b/drivers/isdn/tpam/tpam_queues.c
--- a/drivers/isdn/tpam/tpam_queues.c Tue Mar 4 22:28:56 2003
+++ b/drivers/isdn/tpam/tpam_queues.c Sun Apr 20 08:47:54 2003
@ -144,6 +144,7 @
do {
hpic = readl(card->bar0 + TPAM_HPIC_REGISTER);
if (waiting_too_long++ > 0xfffffff) {
+ kfree_skb(skb);
spin_unlock(&card->lock);
printk(KERN_ERR "TurboPAM(tpam_irq): "
"waiting too long...\n");
diff -u --exclude-from=/home/me/.exclude -r a/drivers/net/sis900.c b/drivers/net/sis900.c
--- a/drivers/net/sis900.c Sat Mar 29 09:16:22 2003
+++ b/drivers/net/sis900.c Tue Apr 22 11:31:28 2003
@ -124,6 +124,7 @
{ "ICS LAN PHY", 0x0015, 0xF440, LAN },
{ "NS 83851 PHY", 0x2000, 0x5C20, MIX },
{ "Realtek RTL8201 PHY", 0x0000, 0x8200, LAN },
+ { "VIA 6103 PHY", 0x0101, 0x8F20, LAN },
{0,},
};
diff -u --exclude-from=/home/me/.exclude -r a/drivers/net/wan/sdla_ppp.c b/drivers/net/wan/sdla_ppp.c
--- a/drivers/net/wan/sdla_ppp.c Sat Mar 29 09:16:22 2003
+++ b/drivers/net/wan/sdla_ppp.c Sun Apr 20 08:47:54 2003
@ -1747,11 +1747,10 @
if (!test_bit(SEND_CRIT, &card->wandev.critical)){
ppp_send(card, skb->data, skb->len, htons(ETH_P_IPX));
}
- dev_kfree_skb_any(skb);
-
} else {
++card->wandev.stats.rx_dropped;
}
+ dev_kfree_skb_any(skb);
} else {
/* Pass data up the protocol stack */
skb->dev = dev;
diff -u --exclude-from=/home/me/.exclude -r a/drivers/pci/bus.c b/drivers/pci/bus.c
--- a/drivers/pci/bus.c Sat Mar 29 09:16:22 2003
+++ b/drivers/pci/bus.c Sun Apr 20 11:55:24 2003
@ -75,7 +75,8 @
* Add newly discovered PCI devices (which are on the bus->devices
* list) to the global PCI device list, add the sysfs and procfs
* entries. Where a bridge is found, add the discovered bus to
- * the parents list of child buses, and recurse.
+ * the parents list of child buses, and recurse (breadth-first
+ * to be compatible with 2.4)
*
* Call hotplug for each new devices.
*/
@ -98,6 +99,12 @
#endif
pci_create_sysfs_dev_files(dev);
+ }
+
+ list_for_each_entry(dev, &bus->devices, bus_list) {
+
+ BUG_ON(list_empty(&dev->global_list));
+
/*
* If there is an unattached subordinate bus, attach
* it and then scan for unattached PCI devices.
diff -u --exclude-from=/home/me/.exclude -r a/drivers/pci/probe.c b/drivers/pci/probe.c
--- a/drivers/pci/probe.c Sat Mar 29 09:16:22 2003
+++ b/drivers/pci/probe.c Sun Apr 20 11:55:33 2003
@ -173,7 +173,7 @
limit |= (io_limit_hi << 16);
}
- if (base && base <= limit) {
+ if (base <= limit) {
res->flags = (io_base_lo & PCI_IO_RANGE_TYPE_MASK) | IORESOURCE_IO;
res->start = base;
res->end = limit + 0xfff;
diff -u --exclude-from=/home/me/.exclude -r a/drivers/scsi/ppa.c b/drivers/scsi/ppa.c
--- a/drivers/scsi/ppa.c Tue Mar 4 22:29:23 2003
+++ b/drivers/scsi/ppa.c Wed Apr 23 20:32:53 2003
@ -219,13 +219,15 @
printk(" supported by the imm (ZIP Plus) driver. If the\n");
printk(" cable is marked with \"AutoDetect\", this is what has\n");
printk(" happened.\n");
- spin_lock_irq(hreg->host_lock);
+ if (hreg) /* This is silly */
+ spin_lock_irq(hreg->host_lock);
return 0;
}
try_again = 1;
goto retry_entry;
} else {
- spin_lock_irq(hreg->host_lock);
+ if (hreg) /* And this should be unnecessary */
+ spin_lock_irq(hreg->host_lock);
return 1; /* return number of hosts detected */
}
}
diff -u --exclude-from=/home/me/.exclude -r a/drivers/scsi/sym53c8xx_2/sym_hipd.c b/drivers/scsi/sym53c8xx_2/sym_hipd.c
--- a/drivers/scsi/sym53c8xx_2/sym_hipd.c Sat Mar 29 09:16:22 2003
+++ b/drivers/scsi/sym53c8xx_2/sym_hipd.c Wed Apr 23 20:35:57 2003
@ -800,7 +800,8 @
* Btw, 'period' is in tenths of nanoseconds.
*/
period = (4 * div_10M[0] + np->clock_khz - 1) / np->clock_khz;
- if (period <= 250) np->minsync = 10;
+ if (period == 250) np->minsync = 9;
+ else if (period <= 250) np->minsync = 10;
else if (period <= 303) np->minsync = 11;
else if (period <= 500) np->minsync = 12;
else np->minsync = (period + 40 - 1) / 40;
diff -u --exclude-from=/home/me/.exclude -r a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h
--- a/drivers/usb/storage/unusual_devs.h Sun Apr 20 06:26:52 2003
+++ b/drivers/usb/storage/unusual_devs.h Wed Apr 23 20:20:41 2003
@ -236,6 +236,13 @
US_SC_SCSI, US_PR_CB, NULL,
US_FL_SINGLE_LUN | US_FL_START_STOP | US_FL_MODE_XLATE ),
+/* This entry is needed because the device reports Sub=ff */
+UNUSUAL_DEV( 0x054c, 0x0010, 0x0106, 0x0432,
+ "Sony",
+ "DSC-F707/U10/U20",
+ US_SC_SCSI, US_PR_CB, NULL,
+ US_FL_SINGLE_LUN | US_FL_START_STOP | US_FL_MODE_XLATE ),
+
/* Reported by wimeeks.nl */
UNUSUAL_DEV( 0x054c, 0x0025, 0x0100, 0x0100,
"Sony",
@ -268,6 +275,12 @
"PEG Mass Storage",
US_SC_8070, US_PR_CBI, NULL,
US_FL_FIX_INQUIRY ),
+
+UNUSUAL_DEV( 0x054c, 0x0058, 0x0000, 0x9999,
+ "Sony",
+ "PEG-N760C Mass Storage",
+ US_SC_8070, US_PR_CBI, NULL,
+ US_FL_FIX_INQUIRY ),
UNUSUAL_DEV( 0x057b, 0x0000, 0x0000, 0x0299,
"Y-E Data",
@ -375,6 +388,12 @
US_SC_SCSI, US_PR_BULK, NULL,
US_FL_FIX_INQUIRY | US_FL_MODE_XLATE),
+UNUSUAL_DEV( 0x0636, 0x0003, 0x0000, 0x9999,
+ "Vivitar",
+ "Vivicam 35Xx",
+ US_SC_SCSI, US_PR_BULK, NULL,
+ US_FL_START_STOP | US_FL_FIX_INQUIRY | US_FL_MODE_XLATE),
+
UNUSUAL_DEV( 0x0644, 0x0000, 0x0100, 0x0100,
"TEAC",
"Floppy Drive",
@ -440,6 +459,12 @
US_FL_SINGLE_LUN | US_FL_START_STOP ),
#endif
+UNUSUAL_DEV( 0x0784, 0x1688, 0x0000, 0x9999,
+ "Vivitar",
+ "Vivicam 36xx",
+ US_SC_SCSI, US_PR_BULK, NULL,
+ US_FL_START_STOP | US_FL_FIX_INQUIRY | US_FL_MODE_XLATE),
+
#ifdef CONFIG_USB_STORAGE_FREECOM
UNUSUAL_DEV( 0x07ab, 0xfc01, 0x0000, 0x9999,
"Freecom",
diff -u --exclude-from=/home/me/.exclude -r a/fs/aio.c b/fs/aio.c
--- a/fs/aio.c Sun Apr 20 06:26:23 2003
+++ b/fs/aio.c Wed Apr 23 20:24:09 2003
@ -204,6 +204,7 @
{
struct mm_struct *mm;
struct kioctx *ctx;
+ int ret = 0;
/* Prevent overflows */
if ((nr_events > (0x10000000U / sizeof(struct io_event))) ||
@ -233,7 +234,8 @
INIT_LIST_HEAD(&ctx->run_list);
INIT_WORK(&ctx->wq, aio_kick_handler, ctx);
- if (aio_setup_ring(ctx) < 0)
+ ret = aio_setup_ring(ctx);
+ if (unlikely(ret < 0))
goto out_freectx;
/* limit the number of system wide aios */
@ -259,7 +261,7 @
out_freectx:
kmem_cache_free(kioctx_cachep, ctx);
- ctx = ERR_PTR(-ENOMEM);
+ ctx = ERR_PTR(ret);
dprintk("aio: error allocating ioctx %p\n", ctx);
return ctx;
diff -u --exclude-from=/home/me/.exclude -r a/fs/ext3/super.c b/fs/ext3/super.c
--- a/fs/ext3/super.c Sun Apr 20 06:26:52 2003
+++ b/fs/ext3/super.c Tue Apr 22 11:07:42 2003
@ -982,12 +982,6 @
return;
}
- if (s_flags & MS_RDONLY) {
- printk(KERN_INFO "EXT3-fs: %s: orphan cleanup on readonly fs\n",
- sb->s_id);
- sb->s_flags &= ~MS_RDONLY;
- }
-
if (EXT3_SB(sb)->s_mount_state & EXT3_ERROR_FS) {
if (es->s_last_orphan)
jbd_debug(1, "Errors on filesystem, "
@ -997,6 +991,12 @
return;
}
+ if (s_flags & MS_RDONLY) {
+ printk(KERN_INFO "EXT3-fs: %s: orphan cleanup on readonly fs\n",
+ sb->s_id);
+ sb->s_flags &= ~MS_RDONLY;
+ }
+
while (es->s_last_orphan) {
struct inode *inode;
diff -u --exclude-from=/home/me/.exclude -r a/fs/fat/inode.c b/fs/fat/inode.c
--- a/fs/fat/inode.c Sun Apr 20 06:26:23 2003
+++ b/fs/fat/inode.c Tue Apr 22 10:57:28 2003
@ -898,6 +898,7 @
sbi->fsinfo_sector);
} else {
sbi->free_clusters = CF_LE_L(fsinfo->free_clusters);
+ sbi->prev_free = CF_LE_L(fsinfo->next_cluster);
}
brelse(fsinfo_bh);
diff -u --exclude-from=/home/me/.exclude -r a/fs/fat/misc.c b/fs/fat/misc.c
--- a/fs/fat/misc.c Tue Mar 4 22:29:34 2003
+++ b/fs/fat/misc.c Tue Apr 22 10:57:28 2003
@ -74,6 +74,7 @
MSDOS_SB(sb)->fsinfo_sector);
} else {
fsinfo->free_clusters = CF_LE_L(MSDOS_SB(sb)->free_clusters);
+ fsinfo->next_cluster = CF_LE_L(MSDOS_SB(sb)->prev_free);
mark_buffer_dirty(bh);
}
brelse(bh);
diff -u --exclude-from=/home/me/.exclude -r a/include/linux/msdos_fs.h b/include/linux/msdos_fs.h
--- a/include/linux/msdos_fs.h Tue Mar 4 22:29:33 2003
+++ b/include/linux/msdos_fs.h Tue Apr 22 10:57:28 2003
@ -146,8 +146,7 @
__u32 reserved1[120]; /* Nothing as far as I can tell */
__u32 signature2; /* 0x61417272L */
__u32 free_clusters; /* Free cluster count. -1 if unknown */
- __u32 next_cluster; /* Most recently allocated cluster.
- * Unused under Linux. */
+ __u32 next_cluster; /* Most recently allocated cluster */
__u32 reserved2[4];
};
diff -u --exclude-from=/home/me/.exclude -r a/kernel/sched.c b/kernel/sched.c
--- a/kernel/sched.c Sun Apr 20 06:26:52 2003
+++ b/kernel/sched.c Wed Apr 23 20:34:25 2003
@ -1130,7 +1130,7 @
#endif
if (!(j % IDLE_REBALANCE_TICK)) {
spin_lock(&this_rq->lock);
- load_balance(this_rq, 0, cpu_to_node_mask(this_cpu));
+ load_balance(this_rq, idle, cpu_to_node_mask(this_cpu));
spin_unlock(&this_rq->lock);
}
return;
diff -u --exclude-from=/home/me/.exclude -r a/lib/kobject.c b/lib/kobject.c
--- a/lib/kobject.c Sun Apr 20 06:26:52 2003
+++ b/lib/kobject.c Wed Apr 23 20:30:26 2003
@ -336,12 +336,14 @
struct kobject * kobject_get(struct kobject * kobj)
{
struct kobject * ret = kobj;
- spin_lock(&kobj_lock);
+ unsigned long flags;
+
+ spin_lock_irqsave(&kobj_lock, flags);
if (kobj && atomic_read(&kobj->refcount) > 0)
atomic_inc(&kobj->refcount);
else
ret = NULL;
- spin_unlock(&kobj_lock);
+ spin_unlock_irqrestore(&kobj_lock, flags);
return ret;
}
@ -371,10 +373,15 @
void kobject_put(struct kobject * kobj)
{
- if (!atomic_dec_and_lock(&kobj->refcount, &kobj_lock))
- return;
- spin_unlock(&kobj_lock);
- kobject_cleanup(kobj);
+ unsigned long flags;
+
+ local_irq_save(flags);
+ if (atomic_dec_and_lock(&kobj->refcount, &kobj_lock)) {
+ spin_unlock_irqrestore(&kobj_lock, flags);
+ kobject_cleanup(kobj);
+ } else {
+ local_irq_restore(flags);
+ }
}
diff -u --exclude-from=/home/me/.exclude -r a/mm/oom_kill.c b/mm/oom_kill.c
--- a/mm/oom_kill.c Sat Mar 29 09:16:43 2003
+++ b/mm/oom_kill.c Wed Apr 23 14:27:35 2003
@ -258,6 +258,11 @
oom_kill();
reset:
- first = now;
+ /*
+ * We dropped the lock above, so check to be sure the variable
+ * first only ever increases to prevent false OOM's.
+ */
+ if time_after(now, first)
+ first = now;
count = 0;
}
diff -u --exclude-from=/home/me/.exclude -r a/mm/vmscan.c b/mm/vmscan.c
--- a/mm/vmscan.c Sun Apr 20 06:26:52 2003
+++ b/mm/vmscan.c Tue Apr 22 05:37:51 2003
@ -558,6 +558,7 @
refill_inactive_zone(struct zone *zone, const int nr_pages_in,
struct page_state *ps, int priority)
{
+ int pgmoved;
int pgdeactivate = 0;
int nr_pages = nr_pages_in;
LIST_HEAD(l_hold); /* The pages which were snipped off */
@ -571,6 +572,7 @
long swap_tendency;
lru_add_drain();
+ pgmoved = 0;
spin_lock_irq(&zone->lru_lock);
while (nr_pages && !list_empty(&zone->active_list)) {
page = list_entry(zone->active_list.prev, struct page, lru);
@ -585,9 +587,12 @
} else {
page_cache_get(page);
list_add(&page->lru, &l_hold);
+ pgmoved++;
}
nr_pages--;
}
+ zone->nr_active -= pgmoved;
+ zone->nr_inactive += pgmoved;
spin_unlock_irq(&zone->lru_lock);
/*
@ -647,10 +652,10 @
continue;
}
list_add(&page->lru, &l_inactive);
- pgdeactivate++;
}
pagevec_init(&pvec, 1);
+ pgmoved = 0;
spin_lock_irq(&zone->lru_lock);
while (!list_empty(&l_inactive)) {
page = list_entry(l_inactive.prev, struct page, lru);
@ -660,19 +665,27 @
if (!TestClearPageActive(page))
BUG();
list_move(&page->lru, &zone->inactive_list);
+ pgmoved++;
if (!pagevec_add(&pvec, page)) {
+ zone->nr_inactive += pgmoved;
spin_unlock_irq(&zone->lru_lock);
+ pgdeactivate += pgmoved;
+ pgmoved = 0;
if (buffer_heads_over_limit)
pagevec_strip(&pvec);
__pagevec_release(&pvec);
spin_lock_irq(&zone->lru_lock);
}
}
+ zone->nr_inactive += pgmoved;
+ pgdeactivate += pgmoved;
if (buffer_heads_over_limit) {
spin_unlock_irq(&zone->lru_lock);
pagevec_strip(&pvec);
spin_lock_irq(&zone->lru_lock);
}
+
+ pgmoved = 0;
while (!list_empty(&l_active)) {
page = list_entry(l_active.prev, struct page, lru);
prefetchw_prev_lru_page(page, &l_active, flags);
@ -680,14 +693,16 @
BUG();
BUG_ON(!PageActive(page));
list_move(&page->lru, &zone->active_list);
+ pgmoved++;
if (!pagevec_add(&pvec, page)) {
+ zone->nr_active += pgmoved;
+ pgmoved = 0;
spin_unlock_irq(&zone->lru_lock);
__pagevec_release(&pvec);
spin_lock_irq(&zone->lru_lock);
}
}
- zone->nr_active -= pgdeactivate;
- zone->nr_inactive += pgdeactivate;
+ zone->nr_active += pgmoved;
spin_unlock_irq(&zone->lru_lock);
pagevec_release(&pvec);
diff -u --exclude-from=/home/me/.exclude -r a/net/ax25/af_ax25.c b/net/ax25/af_ax25.c
--- a/net/ax25/af_ax25.c Sat Mar 29 09:16:22 2003
+++ b/net/ax25/af_ax25.c Sun Apr 20 08:47:54 2003
@ -1202,6 +1202,8 @
ax25_insert_socket(ax25);
} else {
if (ax25->ax25_dev == NULL) {
+ if (digi != NULL)
+ kfree(digi);
err = -EHOSTUNREACH;
goto out;
}
diff -u --exclude-from=/home/me/.exclude -r a/net/ipv4/netfilter/Kconfig b/net/ipv4/netfilter/Kconfig
--- a/net/ipv4/netfilter/Kconfig Sun Apr 20 06:26:24 2003
+++ b/net/ipv4/netfilter/Kconfig Wed Apr 23 20:14:20 2003
@ -48,7 +48,7 @
<file:Documentation/modules.txt>. If unsure, say `Y'.
config IP_NF_TFTP
- tristate "TFTP prtocol support"
+ tristate "TFTP protocol support"
depends on IP_NF_CONNTRACK
help
TFTP connection tracking helper, this is required depending
diff -u --exclude-from=/home/me/.exclude -r a/net/ipv4/netfilter/ip_queue.c b/net/ipv4/netfilter/ip_queue.c
--- a/net/ipv4/netfilter/ip_queue.c Sun Apr 20 06:26:24 2003
+++ b/net/ipv4/netfilter/ip_queue.c Sun Apr 20 08:47:54 2003
@ -298,10 +298,11 @
goto err_out_free;
write_lock_bh(&queue_lock);
-
+
if (!peer_pid)
- goto err_out_unlock;
+ goto err_out_free_nskb;
+ /* netlink_unicast will either free the nskb or attach it to a socket */
status = netlink_unicast(ipqnl, nskb, peer_pid, MSG_DONTWAIT);
if (status < 0)
goto err_out_unlock;
@ -312,6 +313,9 @
write_unlock_bh(&queue_lock);
return status;
+
+err_out_free_nskb:
+ kfree_skb(nskb);
err_out_unlock:
write_unlock_bh(&queue_lock);
diff -u --exclude-from=/home/me/.exclude -r a/net/ipv6/netfilter/ip6_queue.c b/net/ipv6/netfilter/ip6_queue.c
--- a/net/ipv6/netfilter/ip6_queue.c Sun Apr 20 06:26:24 2003
+++ b/net/ipv6/netfilter/ip6_queue.c Sun Apr 20 08:47:54 2003
@ -304,8 +304,9 @
write_lock_bh(&queue_lock);
if (!peer_pid)
- goto err_out_unlock;
+ goto err_out_free_nskb;
+ /* netlink_unicast will either free the nskb or attach it to a socket */
status = netlink_unicast(ipqnl, nskb, peer_pid, MSG_DONTWAIT);
if (status < 0)
goto err_out_unlock;
@ -317,6 +318,9 @
write_unlock_bh(&queue_lock);
return status;
+err_out_free_nskb:
+ kfree_skb(nskb);
+
err_out_unlock:
write_unlock_bh(&queue_lock);
diff -u --exclude-from=/home/me/.exclude -r a/net/irda/irttp.c b/net/irda/irttp.c
--- a/net/irda/irttp.c Tue Mar 4 22:29:23 2003
+++ b/net/irda/irttp.c Sun Apr 20 08:47:54 2003
@ -263,7 +263,7 @
IRDA_DEBUG(2, "%s(), rx_sdu_size=%d\n", __FUNCTION__,
self->rx_sdu_size);
- ASSERT(n <= self->rx_sdu_size, return NULL;);
+ ASSERT(n <= self->rx_sdu_size, {dev_kfree_skb(skb); return NULL;});
/* Set the new length */
skb_trim(skb, n);
diff -u --exclude-from=/home/me/.exclude -r a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c
--- a/net/sunrpc/clnt.c Sun Apr 20 06:26:24 2003
+++ b/net/sunrpc/clnt.c Wed Apr 23 20:33:37 2003
@ -514,10 +514,9 @
if (rpc_malloc(task, bufsiz << 1) != NULL)
return;
- printk(KERN_INFO "RPC: buffer allocation failed for task %p\n", task);
+ dprintk("RPC: buffer allocation failed for task %p\n", task);
if (RPC_IS_ASYNC(task) || !(task->tk_client->cl_intr && signalled())) {
- xprt_release(task);
task->tk_action = call_reserve;
rpc_delay(task, HZ>>4);
return;
diff -u --exclude-from=/home/me/.exclude -r a/net/sunrpc/sched.c b/net/sunrpc/sched.c
--- a/net/sunrpc/sched.c Sun Apr 20 06:26:24 2003
+++ b/net/sunrpc/sched.c Wed Apr 23 20:33:37 2003
@ -672,7 +672,7 @
{
int gfp;
- if (task->tk_flags & RPC_TASK_SWAPPER)
+ if (task->tk_flags & (RPC_TASK_SWAPPER|RPC_TASK_ASYNC))
gfp = GFP_ATOMIC;
else
gfp = GFP_NOFS;
diff -u --exclude-from=/home/me/.exclude -r a/net/sunrpc/xprt.c b/net/sunrpc/xprt.c
--- a/net/sunrpc/xprt.c Sun Apr 20 06:26:52 2003
+++ b/net/sunrpc/xprt.c Wed Apr 23 20:34:58 2003
@ -1461,6 +1461,7 @
if (xprt->prot == IPPROTO_UDP) {
sk->data_ready = udp_data_ready;
sk->no_check = UDP_CSUM_NORCV;
+ sk->allocation = GFP_NOFS;
xprt_set_connected(xprt);
} else {
struct tcp_opt *tp = tcp_sk(sk);
------
Chuck
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2003-04-24 2:54 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-04-24 3:01 [PATCH][ANNOUNCE] Linux 2.5.68-ce3 Chuck Ebbert
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).