Russell King [Tue, 5 Aug 2003 00:15:49 +0000 (01:15 +0100)]
[ARM] Fix do_settimeofday()
ARM seems to have missed an update for the time keeping code; this
cset fixes a problem where the altering the system time changes the
reported uptime.
Hirofumi Ogawa [Sat, 2 Aug 2003 11:09:04 +0000 (04:09 -0700)]
[PATCH] Consolidate dot-stripping code
From Ren <l.s.r@web.de>
there are several places inside fs/vfat/namei.c where the length of a
struct qstr without any trailing dots is calculated. The patch below
adds a function vfat_striptail_len() which does that and makes use of it.
[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.