[PATCH][ANNOUNCE] Linux 2.5.68-ce2

Chuck Ebbert (76306.1226@compuserve.com)
Tue, 22 Apr 2003 14:26:21 -0400


This patch is a collection of small fixes and enhancements for 2.5.68-release.

Makefile | 2 +-
arch/i386/kernel/entry.S | 8 +++++---
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 +-
fs/ext3/super.c | 12 ++++++------
fs/fat/inode.c | 1 +
fs/fat/misc.c | 1 +
include/linux/msdos_fs.h | 3 +--
mm/vmscan.c | 21 ++++++++++++++++++---
net/ax25/af_ax25.c | 2 ++
net/ipv4/netfilter/ip_queue.c | 8 ++++++--
net/ipv6/netfilter/ip6_queue.c | 6 +++++-
net/irda/irttp.c | 2 +-
19 files changed, 62 insertions(+), 26 deletions(-)

extraversion.2.patch (me)
change extraversion to -ce2
checker.1.patch (Muli Ben-Yehuda)
6 checker fixes from lkml
irq_align.2.patch (me)
16-byte align interrupt entry points
pci_probe.1.patch (?, from 2.5.68-mm1)
1-line fix from mm1
pci_bus.1.patch (me, from 2.5.68-mm1)
fix global pci device list order
kbd.1.patch (Chris Heath)
fix SAK in raw mode
ide_probe.1.patch (Manfred Spraul)
fix ide probe return codes
ext3.1.patch (Ernie Petrides)
fix bug in ext3_orphan_cleanup()
fat.1.patch (Bjvrn Stenberg)
make fat use next_cluster field
io_apic.1.patch (me, in 2.5.68-bk)
fix overflow with large number of IRQ sources
via6103.1.patch (Pedro A. Gracia Fajardo)
add VIA 6103 PHY to sis900 driver
vmscan.1.patch (Andrew Morton)
fix vm accounting error

diff -u --exclude-from=/home/me/.exclude -r a/Makefile b/Makefile
--- a/Makefile Sun Apr 20 06:26:50 2003
+++ b/Makefile Tue Apr 22 04:56:49 2003
@ -1,7 +1,7 @
VERSION = 2
PATCHLEVEL = 5
SUBLEVEL = 68
-EXTRAVERSION =
+EXTRAVERSION = -ce2

# *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 Sun Apr 20 14:29:01 2003
@ -382,10 +382,11 @
ENTRY(interrupt)
.text

+ .align 16,0x90 # make ENTRY have correct address
vector=0
ENTRY(irq_entries_start)
.rept NR_IRQS
- ALIGN
+ .align 16,0x90 # should be cacheline-aligned?
1: pushl $vector-256
jmp common_interrupt
.data
@ -394,17 +395,18 @
vector=vector+1
.endr

- ALIGN
+ .align 16,0x90
common_interrupt:
SAVE_ALL
call do_IRQ
jmp ret_from_intr

#define BUILD_INTERRUPT(name, nr) \
+ .align 16,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/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/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/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);

------
Chuck
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/