- 22 Jul, 2002 5 commits
-
-
James Simmons authored
-
-
James Simmons authored
-
-
Alexander Viro authored
So the fix for our problems is: a) in fs/namei.c replace d_unhash() with a safe version. b) in fs/nfs/dir.c replace d_drop(dentry) in beginning of nfs_unlink() with list_del_init(&dentry->d_hash);
-
- 21 Jul, 2002 19 commits
-
-
Linus Torvalds authored
-
Alexander Viro authored
Ugh. nfs_unlink() is actually racy as hell - look what happens if we enter it with ->d_count == 1, see that nfs_sillyrename() doesn't need to do anything and call nfs_safe_remove(). In the meanwhile somebody does dcache lookup (without going into NFS code - plain and simple cache hit) and increments ->d_count. nfs_safe_remove() decides that something is very rotten and fails. AFAICS we should take the test for ->d_count + d_drop if it's 1 under dcache_lock (and in one place). Comments? Proposed fix follows: * dget/dput killed in vfs_unlink() (safely) * nfs_unlink() starts with check for ->d_count (under dcache_lock) * if it's > 1 - sillyrename * if it is 1 - immediately unhash, then drop dcache_lock. after that we do as in old variant, except that rehashing is done in nfs_unlink() and only if there was an error - if there was none we simply leave d_delete() to vfs_unlink().
-
Linus Torvalds authored
confused the NFS client code wrt the exclusiveness of a dentry getting removed.
-
Robert Love authored
One more doc correction while we are at it...
-
Linus Torvalds authored
-
Ingo Molnar authored
i've done a minor comment update in softirq.c, plus i've written a cli-sti-removal.txt guide to help driver writers do the transition.
-
Russell King authored
The serial layer is restructured to allow less code duplication (and hence bug duplication) across various serial drivers. Since ARM adds six extra serial drivers, maintaining six copies of serial.c was not my idea of fun. Therefore, we've ended up with a core serial driver, which knows about the interactions with the tty layer, and low-level hardware drivers, which know all about the hardware. The interface between the two is described in "Documentation/serial/driver". This patch completely removes the old serial.c driver and its associated configuration options, as you requested at KS2002. We keep a certain amount of configuration compatibility with the per-architecture serial.h file for the moment; this *will* be killed in the next round of patches. The biggest user of this is x86, and since I don't have an x86 box to test this stuff on, I think the changes are best kept separate.
-
Ingo Molnar authored
This is a massive cleanup of the IRQ subsystem. It's losely based on Linus' original idea and DaveM's original implementation, to fold our various irq, softirq and bh counters into the preemption counter. with this approach it was possible: - to remove the 'big IRQ lock' on SMP - on which sti() and cli() relied. - to streamline/simplify arch/i386/kernel/irq.c significantly. - to simplify the softirq code. - to remove the preemption count increase/decrease code from the lowlevel IRQ assembly code. - to speed up schedule() a bit. Global sti() and cli() is gone forever on SMP, there is no more globally synchronizing irq-disabling capability. All code that relied on sti() and cli() and restore_flags() must use other locking mechanisms from now on (spinlocks and __cli()/__sti()). obviously this patch breaks massive amounts of code, so only limited .configs are working at the moment (UP is expected to be unaffected, but SMP will require various driver updates). The patch was developed and tested on SMP systems, and while the code is still a bit rough in places, the base IRQ code appears to be pretty robust and clean. while it boots already so the worst is over, there is lots of work left: eg. to fix the serial layer to not use cli()/sti() and bhs ...
-
Alexander Viro authored
In the /proc/fs/jffs/* code we switch to passing number of mtd device (as an integer) instead of messing with kdev_t (which would always be mk_kdev(MTD_BLOCK_MAJOR, device_number) anyway).
-
Alexander Viro authored
Removed prototypes of several functions that do not exist...
-
Alexander Viro authored
->bios_param() switched from kdev_t to struct block_device *. Caller and all instances updated.
-
Alexander Viro authored
somewhat related to the above - drivers/block/paride/* switched to module_init()/module_exit(), pd.c taught to use LBA if disks support it (needed for paride disks >8Gb; change is fairly trivial and I've got 40Gb one ;-)
-
Alexander Viro authored
blk_ioctl() not exported anymore; calls moved from drivers to block_dev.c.
-
Alexander Viro authored
Horrors with open/reread_partition exclusion are starting to get fixed. It's not the final variant, but at least we are getting the logics into one place; switch to final variant will happen once we get per-disk analog of gendisks. New fields - ->bd_part_sem and ->bd_part_count. The latter counts the amount of opened partitions. The former protects said count _and_ is held while we are rereading partition tables. Helpers - dev_part_lock()/dev_part_unlock() (currently taking kdev_t; that will change pretty soon). No more ->open() and ->release() for partitions, all that logics went to generic code. Lock hierachy is currently messy: ->bd_sem for partitions -> ->bd_part_sem -> ->bd_sem for entire disks Ugly, but that'll go away and to get the final variant of locking right now would take _really_ big patch - with a lot of steps glued together. The damn thing is large as it is...
-
Alexander Viro authored
for partitioned devices we use ->nr_sect to find the size; blk_size[] is still used for things like floppy.c, etc.; that will go away later. There was only one place (do_open()) that needed it - the rest uses ->bd_inode->i_size now. So blkdev_size_in_bytes() is gone - it's expanded in its only caller. Same place (do_open()) finds the partition offset and stores it in new field ->bd_offset. As the result, call of get_gendisk() is gone from the IO path - in blk_partition_remap() we just add ->bd_offset. Additionally, we take driver probing (get_blkfops()) outside of ->bd_sem (again, do_open()) - that will allow to kill ad-hackery in check_partitions() (opening bdev by hand).
-
Alexander Viro authored
struct gendisk and partition parsers divorced; all these parsers (IBM style, disklabel, etc.) just fill the structure they get from check_partitions(). Actual setting the things up (filling hd_struct arrays, telling RAID that we had found partitions worth a look, etc.) is taken into check_partitions() and done only when we are done with parsing. Parsers don't know (or care) what majors/minors they are dealing with; that knowledge also went to check_partitions().
-
Alexander Viro authored
a bunch of places doing invalidate_device() either didn't need it at all or actually wanted wipe_partitions(). Switched.
-
Alexander Viro authored
unrelated to the rest, replaces home-grown (racy) semaphores in fs/hfs with the real thing.
-
Linus Torvalds authored
We should _not_ update the current LDT if it's not the current MM that we are tearing down.
-
- 20 Jul, 2002 3 commits
-
-
Linus Torvalds authored
-
Linus Torvalds authored
it unconditional for now.
-
bk://lsm.bkbits.net/linus-2.5Linus Torvalds authored
into home.transmeta.com:/home/torvalds/v2.5/linux
-
- 19 Jul, 2002 13 commits
-
-
Greg Kroah-Hartman authored
This can be overridden by editing the .config file if you really want it.
-
bk://lsm.bkbits.net/linus-2.5Linus Torvalds authored
into home.transmeta.com:/home/torvalds/v2.5/linux
-
Greg Kroah-Hartman authored
-
Greg Kroah-Hartman authored
This includes the security_* functions, and the default and capability modules.
-
Greg Kroah-Hartman authored
This is needed due to the next header file changes.
-
Hirofumi Ogawa authored
This patch changes cont_prepare_write(), in order to support a 4G-1 file for FAT32. int cont_prepare_write(struct page *page, unsigned offset, - unsigned to, get_block_t *get_block, unsigned long *bytes) + unsigned to, get_block_t *get_block, loff_t *bytes) And it fixes broken adfs/affs/fat/hfs/hpfs/qnx4 by this cont_prepare_write() change.
-
http://linuxusb.bkbits.net/linus-2.5Linus Torvalds authored
into home.transmeta.com:/home/torvalds/v2.5/linux
-
Andrew Morton authored
Been looking at a workload which involves several processes which seek around and read from a large file. There are a few problems: generic_file_lseek is bouncing i_sem around like mad, and readahead is doing lots of pointless pagecache probing. This patch addresses readahead. Presumably the change will be larger on machines which have higher bandwidth memory than my test box, of which there are many. This patch teaches readahead to detect the situation where no IO is actually being performed as a result of its actions. Now, we don't want to sacrifice IO efficiency to save a bit of CPU, so the code is very cautious. But eventually, after some tens of consecutive readahead attempts were found to perform no I/O at all, readahead will turn itself off. readahead will be turned on again when either generic_file_read() or filemap_nopage() get a pagecache miss. The function handle_ra_thrashing() has been renamed to handle_ra_miss() to reflect its widened role. A performance bug in page_cache_readround() was fixed - if ra->next_size is zero, that function needs to leave it well alone, because next_size==0 is a magic value meaning that the file has just been opened and that readahead needs to get aggressive. This change makes a `make dep' run at the same speed as in the 2.4 kernel. It used to take 4x as long... `make dep' is an interesting test because it uses mmap to read the files.
-
Andrew Morton authored
The kernel has a number of problems wrt heavy write traffic to multiple spindles. What keeps on happening is that all processes which are responsible for writeback get blocked on one of the queues and all the others fall idle. This happens in the balance_dirty_pages() path (balance_dirty() in 2.4) and in the page reclaim code, when a dirty page is found on the LRU. The latter is particularly bad because it causes "innocent" processes to be suspended for long periods due to the activity of heavy writers. The general idea is: the primary resource for writeback should be the process which is dirtying memory. The secondary resource is the pdflush pool (although this is mainly for providing async writeback in the presence of light-moderate loads). Add the final oh-gee-we-screwed-up resource for writeback is a caller to shrink_cache(). This patch addresses the balance_dirty_pages() path. This code was initially modelled on the 2.4 writeback scheme: throttled processes writeback all data regardless of its queue. Instead, the patch changes it so that the balance_dirty_pages() caller only writes back pages which are dirty against the queue which that caller just dirtied. So the effect is a better allocation of writeback resources across the queues and increased parallelism. The per-queue writeback is implemented by using mapping->backing_dev_info as a search key during the walk across the superblocks and inodes. The patch also fixes an initialisation problem in block_dev.c:do_open(): it was setting up the blockdev's mapping->backing_dev_info too early, before the queue has been identified. Generally, this patch doesn't help much, because of the stalls in the page allocator. I have a patch which mostly fixes that up, and taken together the kernel is achieving almost platter speed against six spindles, but only when the system has a small amount of memory. More work is needed there.
-
Andrew Morton authored
A tasty patch from Hugh Dickens. radix_tree_insert() fails if something was already present at the target index, so that error can be propagated back through add_to_page_cache(). Hence add_to_page_cache_unique() is obsolete. Hugh's patch removes add_to_page_cache_unique() and cleans up a bunch of stuff.
-
Andrew Morton authored
Some cleanup from the surprise direct-to-bio for O_DIRECT merge. - Remove bits and pieces from the kiobuf implementation - Replace the waitqueue in struct dio with just a task_struct pointer and use wake_up_process. (Ben). - Only take mmap_sem around the individual calls to get_user_pages(). (It pins the vmas, yes?) - Remove some debug code. - Fix JFS.
-
Andrew Morton authored
Cleanup patch from Martin Bligh: convert some loops which want to be `for' loops into that, and add some commentary.
-
Andrew Morton authored
generic_writepages() is just a wrapper around mpage_writepages(), so inline it.
-