Andrew Morton [Tue, 18 Nov 2003 16:15:17 +0000 (08:15 -0800)]
[PATCH] Fix bugs in ext2_new_inode()
From: Mingming Cao <cmm@us.ibm.com>
I found several bugs/issues in the ext2_new_inode() code:
1) The for loop variable "i" is used to save the inode offset. In the
case of failure, the loop variable could be crapped. So it is possible
to quit searching before looking at every block groups.
2) The number of free inodes in the selected group is possibly being
miscalculated. The counter is only decreased in the find_group_xx()
functions for the initial selected group. If the initial try failed,
and succeed in finding a free inode in other group, the counter for that
group will not to be decreased.
3) In case of the concurrent case, going back to find_group_xx()
functions are unnecessary, it will only get the same group as before.
The following patch fixed those issues. Ideas are stolen from
ext3_new_inode().
Andrew Morton [Tue, 18 Nov 2003 16:14:51 +0000 (08:14 -0800)]
[PATCH] sched_clock() fix
From: Thomas Schlicter
sched_clock() will try to use the TSC even if the system is not using the TSC
as a time source. It causes bad scheduling decisions and poor interactivity.
The problem was exhibited by the patch which uses ACPI PM as a time source,
but could also happen if the system is using the PIT.
Andrew Morton [Tue, 18 Nov 2003 16:14:43 +0000 (08:14 -0800)]
[PATCH] gettimeofday resolution fix
From: Stephen Hemminger <shemminger@osdl.org>
The original problem all this is solving is that when NTP is slowing the clock
there existed real cases where time appeared to go backwards. Assuming NTP was
slowing the clock, then it would update the xtime by 999us at the next timer interrupt.
If a program read time three times:
Paul Mackerras [Tue, 18 Nov 2003 08:12:15 +0000 (00:12 -0800)]
[PATCH] PPC64: Fix possible race in syscall restart
This is the PPC64 counterpart of the fix for the potential race in the
syscall restart code that has gone into other architectures. It resets
current_thread_info()->restart_block.fn to do_no_syscall_restart in
the sigreturn code.
Jesse Barnes [Mon, 17 Nov 2003 02:10:13 +0000 (18:10 -0800)]
[PATCH] Fix bootmem breakage on ARM
Russell King reports:
"With previous kernels, the nodes are added to the list in reverse order,
so architecture code knew we had to add the highest PFN first and the
lowest PFN node last.
Unfortunately, init_bootmem_core() now sorts the nodes according to
their start pfn. This active sorting broke ARM discontig memory support."
Andrew Morton chimes in:
"It looks to be bogus on ia64 as well, for which the patch was written"
Yep, I think it is bogus. There's only one caller on ia64 that would be
affected--swiotlb_init(), and afaik multi-node systems won't be using
that code (except maybe NEC?), so even if the pgdat list is out of order
we should be ok. If not I'll fix the ia64 discontig code.
Prasanna Meda [Sun, 16 Nov 2003 13:05:16 +0000 (08:05 -0500)]
[netdrvr tulip] fix hashed setup frame code
It is using local variable `i' in both the inner and outer loop.
Need to bring the for loop outside the loop. Otherwise we need to reset the
setup_frame to tp->setup_frame after every loop. You do not need to set the
setup_frm for every mc address, we can set once after the complete has_table
is ready.
Paul Mackerras [Fri, 14 Nov 2003 08:12:24 +0000 (00:12 -0800)]
[PATCH] PPC32: cancel syscall restart on signal delivery
This patch ensures that the PPC kernel cancels any pending restarted
system call when it delivers a signal. This is the PPC counterpart of
the change that has recently gone into i386 and other architectures.
Paul Mackerras [Fri, 14 Nov 2003 07:34:21 +0000 (23:34 -0800)]
[PATCH] PPC32: Don't oops on out-of-range system call
This patch fixes a bug on PPC where the kernel will oops if a process
does a system call and the system call number is out of range.
While fixing that, I noticed that if the process is being ptraced, an
out-of-range system call will not get traced on the way in but will on
the way out. This patch fixes that too, by making it get traced on
the way in as well as the way out. It turned out to be less change,
and fewer instructions overall, to do that than to make the
out-of-range system call not be traced at all.
Early ACPI table parse for HPET tables has a bug, where in it
does not do proper set_fixmap for ACPI-HPET table.
This bug was lost in oversight, and was not noticed during
my testing too, as the ACPI-HPET table on all my test
systems happened to be in 1st Gig of memory (where __va()
will do the job).
Jason Holmes [Thu, 13 Nov 2003 09:02:48 +0000 (01:02 -0800)]
[PATCH] make 2.6 megaraid recognize intel vendor id
The 2.4 megaraid driver recognizes the Intel PCI vendor id whereas the
2.6 driver does not. The attached patch against 2.6.0-test9 adds the
missing two lines from the 2.4 driver to enable this.
Arun Sharma [Thu, 13 Nov 2003 05:29:19 +0000 (21:29 -0800)]
[PATCH] ia64: invoke schedule_tail unconditionally on ia32 emulation
The #ifdef CONFIG_SMP around the call to schedule_tail was removed a
long time ago for native ia64, but ia32 emulation continues to have a
#ifdef. We saw a bunch of weird behavior with respect to getpid() on
multithreaded programs (they behave ok on SMP, but break on UP).
Linus Torvalds [Tue, 11 Nov 2003 23:53:58 +0000 (15:53 -0800)]
Re-instate the ALI northbridge checks in ALI IDE driver
This leaves just the minimal oops protection in place, and
maintains the logic that "if we have a non-ALI northbridge,
we shouldn't touch any of the GPIOs because we don't know
what they might be connected to".
NTFS: Minor bug fix in attribute list attribute handling that fixes the
I/O errors on "ls" of certain fragmented files found by at least two
people running Windows XP.
David S. Miller [Tue, 11 Nov 2003 17:34:37 +0000 (09:34 -0800)]
[IPV6]: Fix packet quoting in icmpv6_send().
- Mucking with the original skb pointers with push/pull around
the packet quoting was wrong, muching with these pointers could
cause problems with others using the SKB.
It was also buggy, it only handled the case where skb->nh.raw was
ahead of or equal to skb->data
- The fix is to record skb->nh.raw - skb->data and use this as
a base offset in calls to skb_copy_and_csum_bits(). This is
what the pre-IPSEC code did.
This fixes IPV6 oopses and packet corruption on 64-bit platforms
when sending UDP port unreachable ICMP messages.
Reported and analyzed by Jan Oravec (jan.oravec@6com.sk)
David Mosberger [Tue, 11 Nov 2003 15:14:26 +0000 (07:14 -0800)]
ia64: From Linus: Always disable system call restart when invoking a
signal handler. Otherwise, a restarted system call that gets
interrupted before the restart has taken effect by _another_
signal will potentially restart the wrong system call.
Linus Torvalds [Tue, 11 Nov 2003 13:18:50 +0000 (05:18 -0800)]
Always disable system call restart when invoking a signal handler.
Otherwise, a restarted system call that gets interrupted before
the restart has taken effect by _another_ signal will potentially
restart the wrong system call.
George Anzinger [Tue, 11 Nov 2003 06:59:12 +0000 (22:59 -0800)]
[PATCH] Fix clock_nanosleep() signal restart issues
The problem with clock_nanosleep() restarting was that the address of
the users return timespec was being saved at the wrong place. In needs
to be saved in the sys call interface code rather than the
do_clock_nanosleep(). My original tests were a bit weak as they only
did one signal rather than two or more which were required to break it.
The attached patch fixes the problem.
I also added a few comments about how restart works, and added my name
to the MAINTAINERS list.
Linus Torvalds [Tue, 11 Nov 2003 02:52:30 +0000 (18:52 -0800)]
Avoid racy optimization in signal sending.
The bug is probably impossible to trigger on x86, due to its
fairly strong coherency model (the SMP-safe bitops end up being
memory barriers etc), but other architectures - notably ppc64 -
can apparently trigger a race whereby the signal sender doesn't
wake up the target because it doesn't notice that it has gone to
sleep.
The optimization also optimizes only what appears to be the
uncommon case, where the signal happens for an already-running
process.
Since 2.6.x by default does not remap the disk partitions any more, it
would be a good idea to warn when we see EZD or DM signatures. That
informs the user to fix his setup (or pass in "hdx=remap" on the kernel
command line).
Andrew Morton [Sun, 9 Nov 2003 23:18:43 +0000 (15:18 -0800)]
[PATCH] compile fix for voyager with gcc-3.3
From: James Bottomley <James.Bottomley@SteelEye.com>
The cpu_callout_map differs from the prototype in asm-i386/smp.h by a
volatile. gcc-3.3 now treats this as an error, so voyager support will
only compile with older gcc's. The fix is to remove the spurious volatile.
Andrew Morton [Sun, 9 Nov 2003 23:18:35 +0000 (15:18 -0800)]
[PATCH] JBD: fix assertion failure
This fixes a JBD assertion failure (goes BUG) in __journal_remove_journal_head().
When the journal had aborted due to earlier internal consistency errors (or
I/O errors) it is possible that we free journal_heads which still have
attached copyout buffers. So just free them up.
Andrew Morton [Sun, 9 Nov 2003 23:18:26 +0000 (15:18 -0800)]
[PATCH] Fix RAID1 recovery
From: Mike Tran <mhtran@us.ibm.com>
This fixes the RAID1 recovery problems; it seems to be a simple thinko:
sync_request_write() is passing "ok=0" into md_done_sync(). Clearly, `ok'
should be true here.
Andrew Morton [Sun, 9 Nov 2003 23:18:01 +0000 (15:18 -0800)]
[PATCH] ext2 block allocation race fix
If this CPU decides that an ext2 block group has a free block it will then go
in and try to acquire it. No locks are held, so another CPU can come in and
steal the last block.
In this case we will bogusly report a corrupted filessytem.
Fix it by just restarting the scan - this will choose a different blockgroup
or will generate -ENOSPC.
Andrew Morton [Sun, 9 Nov 2003 23:17:43 +0000 (15:17 -0800)]
[PATCH] AS: handle non-block requests
From: Nick Piggin <piggin@cyberone.com.au>
as_completed_request() can be called for requests which were not generated by
the generic block layer. Handle these, to avoid a subsequent WARN_ON (at
least).
Also kill a separate WARN_ON which is bogusly triggering.
Paul Mackerras [Sun, 9 Nov 2003 12:03:30 +0000 (04:03 -0800)]
[PATCH] PPC32: Fix alignment problem with __ex_table and __bug_table.
The __start___ex_table and __start___bug_table symbols could end up
pointing a few bytes before the actual __ex_table and __bug_table
sections, if the preceding section had an odd length. This led to
oopses in some situations. Patch from Sam Ravnborg.
Russell King [Sun, 9 Nov 2003 23:03:30 +0000 (23:03 +0000)]
[ARM] Fix ARM signal handling.
If we are unable to deliver a signal to the process (eg, due to stack
pointer corruption) block the signal so other fatal signals can kill
off the process.