[PATCH] I2C: fixed a little memory leak in i2c-ali15x3.c
there is a little memory leak in i2c-ali15x3.c .
You can reproduce the BUG as follows:
In a PC with no such device unloading i2c-ali15x3 cause an oops in release_region.
I've fixed by moving release_region() from i2c_ali15x3_exit() to ali15x3_remove().
Randy Dunlap [Fri, 1 Aug 2003 08:07:01 +0000 (01:07 -0700)]
[PATCH] janitor: convert to pci_name()
[ GregKH has already done this is USB and PCI core. ]
From: "Warren A. Layton" <zeevon@debian.org>
Based on a request from Matthew Wilcox, convert instances of
pci_dev->slot_name to use pci_name() instead:
"In order to support PCI Domains, we have to stop using slot_name.
It's related to driver model transition too since pci_dev->slot_name
was redundant with pci_dev->dev.bus_id. So I introduced the inline
function pci_name(). Now there's about 300-400 places in the tree
that're using slot_name which need to be converted to use pci_name().
once that's done, we can remove the slot_name pointer in pci_dev and
save a (void *) per pci_dev."
Jan Kara [Fri, 1 Aug 2003 07:55:50 +0000 (00:55 -0700)]
[PATCH] Fix old quota format locking
This fixes a bug in locking (we take one lock twice) for old quota
format. Without this patch the old format simply don't work (I really
don't know how that could happen).
These have been in the pci.ids file for awhile but not in <linux/pci_ids.h>
They're used by my drivers/atm/lanai.c driver that has been in tree for
some time now (it provides its own copy of these #define's protected by
an #ifndef - I'll remove that once this patch goes into the mainline)
Andrew Morton [Fri, 1 Aug 2003 03:11:57 +0000 (20:11 -0700)]
[PATCH] cpu_idle() startup race fix
Diagnosis from Christian Vogel <vogel@skunk.physik.uni-erlangen.de>
cpu_idle() tests pm_idle() just once then falls into the
while (!need_resched())
idle();
loop.
Problem is, that loop never terminates (need_resched() always returns false
on preemptive kernels).
The other problem is that ACPI updates pm_idle _after_ cpu_idle() has taken a
local copy. So we always call default_idle(), even when pm_idle is pointing
at a new idle handler.
So fix it to pick up changed values of pm_idle() each time around the inner
loop.
Andrew Morton [Fri, 1 Aug 2003 03:11:48 +0000 (20:11 -0700)]
[PATCH] export install_page() to modules
install_page() is a library function which we expect will be used by all
drivers which implement vm_operations.populate(). Therefore it should be
exported to kernel modules.
Petr Vandrovec has a project which involves sparse mappings of device memory
which can use remap_file_pages(). It needs install_page().
Andrew Morton [Fri, 1 Aug 2003 03:11:26 +0000 (20:11 -0700)]
[PATCH] serial drivers are not experimental
From: Andries.Brouwer@cwi.nl
A few days ago I needed a serial line and couldnt find the option in
menuconfig. Turned out that SERIAL_8250 depends on EXPERIMENTAL. I
suppose that dependence should be removed.
Andrew Morton [Fri, 1 Aug 2003 03:11:18 +0000 (20:11 -0700)]
[PATCH] dscc4 compile fix for hdlc
From: Francois Romieu <romieu@fr.zoreil.com>
The wan driver I maintain was hit by hdlc changes too. Please
apply patch below. It is diffed against plain -test2 but it
applies equally as well against -test2-mm2.
More important changes will come in a near future for this
driver but I'd rather keep the changes separated.
Description:
- after the hdlc changes, dscc4 module doesn't need to set
hdlc->proto(.id) itself anymore;
- MOD_{INC/DEC}_USE_COUNT removal;
- SET_NETDEV_DEV() use;
Andrew Morton [Fri, 1 Aug 2003 03:10:26 +0000 (20:10 -0700)]
[PATCH] binfmt_script argv[0] fix
From: Arun Sharma <arun.sharma@intel.com>
A script such as
#!/bin/foo.bar
...
where /bin/foo.bar is handled by binfmt_misc, is not handled correctly i.e.
the interpreter of foo.bar doesn't receive the correct arguments.
The binfmt_misc handler requires that bprm->filename is appropriately
filled so that the argv[1] could be correctly passed to the interpreter.
However, binfmt_script, as it exists today doesn't populate bprm->filename
correctly.
Another motivation for this patch is the output of ps. Emulators which use
binfmt_misc may want to keep the output of ps consistent with native
execution. This requires preserving bprm->filename. The attached patch
guarantees this even if we have to go through several binfmt handlers
(think of finite loops involving binfmt_script and binfmt_misc).
Andrew Morton [Fri, 1 Aug 2003 03:10:03 +0000 (20:10 -0700)]
[PATCH] uidhash init-time locking
From: <ffrederick@prov-liege.be>
Add the necessary locking around uid_hash_insert() in uid_cache_init().
(It's an initcall, and the chances of another CPU racing with us here are
basically zero. But it's good for documentary purposes and the code gets
dropped later anyway...)
Andrew Morton [Fri, 1 Aug 2003 03:09:49 +0000 (20:09 -0700)]
[PATCH] fix read_dir()
This function tries to allocate increasingly large buffers, but it gets the
bounds wrong by a factor of PAGE_SIZE. It causes boot-time devfs mounting
to fail.
Andrew Morton [Fri, 1 Aug 2003 03:09:41 +0000 (20:09 -0700)]
[PATCH] ext3: fix commit assertion failure
We're getting asserion failures in commit in data=journal mode.
journal_unmap_buffer() has unexpectedly donated this buffer to the committing
transaction, and the commit-time assertion doesn't expect that to happen. It
doesn't happen in 2.4 because both paths are under lock_journal().
Simply remove the assertion: the commit code will uncheckpoint the buffer and
then recheckpoint it if needed.
It assumes that a following write will succeed if less than 256 bytes
are in the write buffer right now. This assumption is wrong for
con_write_room: if the console is stopped, it returns 0 bytes buffer
size (con_write_room()). Ditto for pty_write_room.
Andrew Morton [Fri, 1 Aug 2003 03:09:08 +0000 (20:09 -0700)]
[PATCH] direct-io support for XFS unwritten extents
From: Nathan Scott <nathans@sgi.com>
This patch adds a mechanism by which a filesystem can register an interest in
the completion of direct I/O. The completion routine will be given the
inode, an offset and a length, and an optional filesystem-private field.
We have extended the use of the buffer_head-based interface (i.e.
get_block_t) for direct I/O such that the b_private field is now utilised.
It is defined to be initially zero at the start of I/O, and will be passed
into the filesystem unmodified by the VFS with each map request, while
setting up the direct I/O. Once I/O has completed the final value of this
pointer will be passed into a filesystems I/O completion handler. This
mechanism can be used to keep track of all of the mapping requests which
encompass an individual direct I/O request.
This has been implemented specifically for XFS, but is done so as to be as
generic as possible. XFS uses this mechanism to provide support for
unwritten extents - these are file extents which have been pre-allocated
on-disk, but not yet written to (once written, these become regular file
extents, but only once I/O is complete).
Andrew Morton [Fri, 1 Aug 2003 03:08:53 +0000 (20:08 -0700)]
[PATCH] vmscan: use zone_pressure for page unmapping
From: Nikita Danilov <Nikita@Namesys.COM>
Use zone->pressure (rathar than scanning priority) to determine when to
start reclaiming mapped pages in refill_inactive_zone(). When using
priority every call to try_to_free_pages() starts with scanning parts of
active list and skipping mapped pages (because reclaim_mapped evaluates to
0 on low priorities) no matter how high memory pressure is.
Andrew Morton [Fri, 1 Aug 2003 03:08:36 +0000 (20:08 -0700)]
[PATCH] vmscan: decaying average of zone pressure
From: Nikita Danilov <Nikita@Namesys.COM>
The vmscan logic at present will scan the inactive list with increasing
priority until a threshold is triggered. At that threshold we start
unmapping pages from pagetables.
The problem is that each time someone calls into this code, the priority is
initially low, so some mapped pages will be refiled event hough we really
should be unmapping them now.
Nikita's patch adds the `pressure' field to struct zone. it is a decaying
average of the zone's memory pressure and allows us to start unmapping pages
immediately on entry to page reclaim, based on measurements which were made
in earlier reclaim attempts.
Alan Stern [Fri, 1 Aug 2003 03:08:22 +0000 (20:08 -0700)]
[PATCH] USB: Remove usb_set_maxpacket()
This is the final part of as66c. It removes the usb_set_maxpacket()
routine, since the same functionality now exists elsewhere. The one place
it was used was in the device reset pathway for a device that has changed
somehow since the previous reset. That code needs to be fixed up anyway;
for now it's enough just to have it call usb_set_configuration().
David Brownell [Fri, 1 Aug 2003 03:08:08 +0000 (20:08 -0700)]
[PATCH] USB: hcd initialization fix
This cleans up HCD initialization by adding an explicit
reset step, putting the device into a known state before
resources are allocated. This step is implemented for
EHCI, since some BIOS firmware seems to act quirky there,
but nothing else yet. (OHCI would be just easy too.)
Andrew Morton [Fri, 1 Aug 2003 03:08:01 +0000 (20:08 -0700)]
[PATCH] use mark_page_accessed() in the write() path
We're currently just setting the referenced bit when modifying pagecache in
write().
Consequently overwritten (and redirtied) pages are remaining on the inactive
list. The net result is that a lot of dirty pages are reaching the tail of
the LRU in page reclaim and are getting written via the writepage() in there.
But a core design objective is to minimise the amount of IO via that path,
and to maximise the amount of IO via balance_dirty_pages(). Because the
latter has better IO patterns.
This may explain the bad IO patterns which Gerrit talked about at KS.
Andrew Morton [Fri, 1 Aug 2003 03:07:34 +0000 (20:07 -0700)]
[PATCH] devfs_lookup stack corruption fix rework
From: Andrey Borzenkov <arvidjaar@mail.ru>
A while back Andrey fixed a devfs bug in which we were running
remove_wait_queue() against a wait_queue_head which was on another process's
stack, and which had gone out of scope.
The patch reverts that fix and does it the same way as 2.4: just leave the
waitqueue struct dangling on the waitqueue_head: there is no need to touch it
at all.
It adds a big comment explaining why we are doing this nasty thing.
Andrew Morton [Fri, 1 Aug 2003 03:04:17 +0000 (20:04 -0700)]
[PATCH] Fix race in ext3_getblk
From: Alex Tomas <bzzz@tmi.comex.ru>
ext3_getblk() memsets a newly allocated buffer, but forgets to check
whether a different thread brought it uptodate while we waited for the
buffer lock.
It's OK normally because we're serialised by the page lock. But lustre
apparently is doing something different with getblk and hits this race.
Plus I suspect it's racy with competing O_DIRECT writes.
Andrew Morton [Fri, 1 Aug 2003 03:02:32 +0000 (20:02 -0700)]
[PATCH] rework readahead for congested queues
Since Jens changed the block layer to fail readahead if the queue has no
requests free, a few changes suggest themselves.
- It's a bit silly to go and alocate a bunch of pages, build BIOs for them,
submit the IO only to have it fail, forcing us to free the pages again.
So the patch changes do_page_cache_readahead() to peek at the queue's
read_congested state. If the queue is read-congested we abandon the entire
readahead up-front without doing all that work.
- If the queue is not read-congested, we go ahead and do the readahead,
after having set PF_READAHEAD.
The backing_dev_info's read-congested threshold cuts in when 7/8ths of
the queue's requests are in flight, so it is probable that the readahead
abandonment code in __make_request will now almost never trigger.
- The above changes make do_page_cache_readahead() "unreliable", in that it
may do nothing at all.
In which the user has an expectation that the kernel will actually
perform the IO.
So the patch creates a new "force_page_cache_readahead()" which will
perform the IO regardless of the queue's congestion state.
Arguably, this is the wrong thing to do: even though the application
requested readahead it could be that the kernel _should_ abandon the user's
request because the disk is so busy.
I don't know. But for now, let's keep the above syscalls behaviour
unchanged. It is trivial to switch back to do_page_cache_readahead()
later.
Andrew Morton [Fri, 1 Aug 2003 03:01:37 +0000 (20:01 -0700)]
[PATCH] fix bogus IO error messages
Since Jens added the pagecache readahead support in the block layer we've
been getting bogus IO error messages from buffer.c due to __make_request
calling end_io against a non-uptodate buffer.
We can just use PF_READAHEAD to shut that up. But really, we shouldn't even
have allocated all those pages and submittted the readahead IO if the queue
was congested. We have the infrastructure to do that now.
Andrew Morton [Fri, 1 Aug 2003 03:00:04 +0000 (20:00 -0700)]
[PATCH] Fix vmtruncate race and distributed filesystem race
From: Dave McCracken <dmccr@us.ibm.com>
This patch solves the race between truncate and page in which can cause stray
anon pages to appear in the truncated region.
The race occurs when a process is sleeping in pagein IO during the truncate:
there's a window after checking i_size in which the paging-in process decides
that the page was an OK one.
This leaves an anon page in the pagetables, and if the file is subsequently
extended we have an anon page floating about inside a file-backed mmap - user
modifications will not be written out.
Apparently this is also needed for the implementation of POSIX semantics for
distributed filesystems.
We use a generation counter in the address_space so the paging-in process can
determine whether there was a truncate which might have shot the new page
down.
It's a bit grubby to be playing with files and inodes in do_no_page(), but we
do need the page_table_lock coverage for this, and rearranging thngs to
provide that coverage to filemap_nopage wasn't very nice either.
Andrew Morton [Fri, 1 Aug 2003 02:59:19 +0000 (19:59 -0700)]
[PATCH] Interface to invalidate regions of mmaps
From: "Paul E. McKenney" <paulmck@us.ibm.com>
The patch reworks and generalises vmtruncate_list() a bit to create an API
which invalidates a specified portion of an address_space, permitting
distributed filesystems to maintain POSIX semantics when a file mmap()ed on
one client is modified on another client.
Andrew Morton [Fri, 1 Aug 2003 02:56:53 +0000 (19:56 -0700)]
[PATCH] non-MII 3c59x fix
From: Marc Zyngier <mzyngier@freesurf.fr>
The following patch tries to fix a small bug that crept in at some
point during 2.5.
None of my 3c592 or 3c597 would work if I didn't force media
type. Instead, it would try to probe MII, looking for a suitable
transceiver, and finaly give up, because these cards really do not
have any sort of MII... :
EISA: Probing bus 0 at Intel Corp. 82375EB
EISA: Mainboard DEC5000 detected.
EISA: slot 2 : ADP0001 detected.
EISA: slot 3 : ADP7771 detected.
EISA: slot 4 : DPTA401 detected.
EISA: slot 5 : TCM5920 detected.
3c59x: Donald Becker and others. www.scyld.com/network/vortex.html
00:05: 3Com EISA 3c592 EISA 10Mbps Demon/Vortex at 0x5000. Vers LK1.1.19
***WARNING*** No MII transceivers found!
EISA: Detected 4 cards.
With the enclosed patch, it just works, at least on my setup (3c592 on
Alpha, and 3c597 on x86). I haven't been able to test it didn't break
cards with MII, because I do not have such cards in my test boxes...
The patch also removes two useless EISA-only #define I introduced some
time ago.
Andrew Morton [Fri, 1 Aug 2003 02:56:15 +0000 (19:56 -0700)]
[PATCH] dev_t printing
From: Greg KH <greg@kroah.com>
Different architectures use different types for dev_t, so it is hard to
print dev_t variables out correctly. Quite a lot of code is wrong now, and
will continue to be wrong when 64-bit dev_t is merged.
Greg's patch introduces a little wrapper function which can be used to
safely form a dev_t for printing. I added the format_dev_t function as
well, which is needed for direct insertion in a printk statement.
Andrew Morton [Fri, 1 Aug 2003 02:55:36 +0000 (19:55 -0700)]
[PATCH] 3c59x suspend/resume fix
Currently, all of the 3c59x power management code is disabled unless the
`enable_wol' module parameter is provided. This was done because the PM
support was added quite late in the 2.4 cycle.
It was always intended that this conditionality be removed in 2.5.
Andrew Morton [Fri, 1 Aug 2003 02:54:45 +0000 (19:54 -0700)]
[PATCH] buffer.c debugging
We get a bug report about once per month wherein find_get_block_slow() spits
an error message. For some reason we have buffers against a blockdev page
which have the incorrect b_size.
Probably, an earlier set_blcoksize() failed to invalidate all the apges for
some reason. I just don't know.
The patch adds a bit of extra debug info to aid in diagnosing this.
Andrew Morton [Fri, 1 Aug 2003 02:54:26 +0000 (19:54 -0700)]
[PATCH] re-slabify i386 pgd's and pmd's
From: William Lee Irwin III <wli@holomorphy.com>
The original pgd/pmd slabification patches had a critical bug on
non-PAE where both modifications of pgd entries to remove pagetables
attached for non-PSE mappings back to a PSE state and modifications of
pgd entries to attach pagetables to bring PSE mappings into a non-PSE
state were not propagated to cached pgd's. PAE was immune to it owing
to the shared kernel pmd.
The following patch vs. 2.5.69 restores the slabification done to cache
preconstructed pagetables with the proper propagation of conversions
to and from PSE mappings to cached pgd's for the non-PAE case.
This is an optimization to reduce the bitblitting overhead for spawning
small tasks (for larger ones, bottom-level pagetable copies dominate)
primarily on non-PAE; the PAE code change is largely to remove #ifdefs
and to treat the two cases uniformly, though some positive but small
performance improvement has been observed for PAE in one of mbligh's
posts. The non-PAE performance improvement has been observed on a box
running a script-heavy end-user workload as a large long-term profile
hit count reduction for pgd_alloc() and relatives thereof.
I would very much appreciate outside testers. Even though I've been
able to verify this boots and runs properly and survives several cycles
of restarting X on my non-PAE Thinkpad T21, that environment has never
been able to reproduce the bug. Those with the proper graphics hardware
to prod the affected codepaths into action are the ones best suited to
verify proper functionality. There is also some locking introduced; if
some performance verification on non-PAE SMP i386 targets (my SMP
targets unfortunately all require PAE due to arch code dependencies)
that also have the proper hardware could be done, that would help
determine whether alternative locking schemes that competed against
the one shown here are preferable (in particular, the ticket-based
scheme mentioned in the comments).