- 19 May, 2002 18 commits
-
-
Andrew Morton authored
Fix the "race with umount" in __sync_list(). __sync_list() no longer puts inodes onto a local list while writing them out. The super_block.sb_dirty list is kept time-ordered. Mappings which have the "oldest" ->dirtied_when are kept at sb->s_dirty.prev. So the time-based writeback (kupdate) can just bale out when it encounters a not-old-enough mapping, rather than walking the entire list. dirtied_when is set on the *first* dirtying of a mapping. So once the mapping is marked dirty it strictly retains its place on s_dirty until it reaches the oldest end and is written out. So frequently-dirtied mappings don't stay dirty at the head of the list for all time. That local inode list was there for livelock avoidance. Livelock is instead avoided by looking at each mapping's ->dirtied_when. If we encounter one which was dirtied after this invokation of __sync_list(), then just bale out - the sync functions are only required to write out data which was dirty at the time when they were called. Keeping the s_dirty list in time-order is the right thing to do anyway - so all the various writeback callers always work against the oldest data.
-
Andrew Morton authored
Miscellany. - make the printk in buffer_io_error() sector_t-aware. - Some buffer.c cleanups from AntonA: remove a couple of !uptodate checks, and set a new buffer's b_blocknr to -1 in a more sensible place. - Make buffer_head.b_size a 32-bit quantity. Needed for 64k pagesize on ia64. Does not increase sizeof(struct buffer_head).
-
Andrew Morton authored
reiserfs is using b_inode_buffers and fsync_buffers_list() for attaching dependent buffers to its journal. For writeout prior to commit. This worked OK when a global lock was used everywhere, but the locking is currently incorrect - try_to_free_buffers() is taking a different lock when detaching buffers from their "foreign" inode. So list_head corruption could occur on SMP. The patch implements a reiserfs_releasepage() which holds the journal-wide buffer lock while it runs try_to_free_buffers(), so all those list_heads are protected. The lock is held across the try_to_free_buffers() call as well, so nobody will attach one of this page's buffers to a list while try_to_free_buffers() is running.
-
Andrew Morton authored
This fixes a bug in ext3 - when ext3 decides that it wants to fail its writepage(), it is running SetPageDirty(). But ->writepage has just put the page on ->clean_pages(). The page ends up dirty, on ->clean_pages and the normal writeback paths don't know about it any more. So run set_page_dirty() instead, to place the page back on the dirty list. And in move_from_swap_cache(), shuffle the page across to ->dirty_pages so that it's eligible for writeout. ___add_to_page_cache() forgets to look at the page state when deciding which list to attach it to. All SetPageDirty() callers otherwise look OK.
-
Andrew Morton authored
This fixes a race between try_to_free_buffers' call to __remove_inode_queue() and other users of b_inode_buffers (fsync_inode_buffers and mark_buffer_dirty_inode()). They are presently taking different locks. The patch relocates and redefines and clarifies(?) the role of inode.i_dirty_buffers. The 2.4 definition of i_dirty_buffers is "a list of random buffers which is protected by a kernel-wide lock". This definition needs to be narrowed in the 2.5 context. It is now "a list of buffers from a different mapping, protected by a lock within that mapping". This list of buffers is specifically for fsync(). As this is a "data plane" operation, all the structures have been moved out of the inode and into the address_space. So address_space now has: list_head private_list; A list, available to the address_space for any purpose. If that address_space chooses to use the helper functions mark_buffer_dirty_inode and sync_mapping_buffers() then this list will contain buffer_heads, attached via buffer_head.b_assoc_buffers. If the address_space does not call those helper functions then the list is free for other usage. The only requirement is that the list be list_empty() at destroy_inode() time. At least, this is the objective. At present, generic_file_write() will call generic_osync_inode(), which expects that list to contain buffer_heads. So private_list isn't useful for anything else yet. spinlock_t private_lock; A spinlock, available to the address_space. If the address_space is using try_to_free_buffers(), mark_inode_dirty_buffers() and fsync_inode_buffers() then this lock is used to protect the private_list of *other* mappings which have listed buffers from *this* mapping onto themselves. That is: for buffer_heads, mapping_A->private_lock does not protect mapping_A->private_list! It protects the b_assoc_buffers list from buffers which are backed by mapping_A and it protects mapping_B->private_list, mapping_C->private_list, ... So what we have here is a cross-mapping association. S_ISREG mappings maintain a list of buffers from the blockdev's address_space which they need to know about for a successful fsync(). The locking follows the buffers: the lock in in the blockdev's mapping, not in the S_ISREG file's mapping. For address_spaces which use try_to_free_buffers, private_lock is also (and quite unrelatedly) used for protection of the buffer ring at page->private. Exclusion between try_to_free_buffers(), __get_hash_table() and __set_page_dirty_buffers(). This is in fact its major use. address_space *assoc_mapping Sigh. This is the address of the mapping which backs the buffers which are attached to private_list. It's here so that generic_osync_inode() can locate the lock which protects this mapping's private_list. Will probably go away. A consequence of all the above is that: a) All the buffers at a mapping_A's ->private_list must come from the same mapping, mapping_B. There is no requirement that mapping_B be a blockdev mapping, but that's how it's used. There is a BUG() check in mark_buffer_dirty_inode() for this. b) blockdev mappings never have any buffers on ->private_list. It just never happens, and doesn't make a lot of sense. reiserfs is using b_inode_buffers for attaching dependent buffers to its journal and that caused a few problems. Fixed in reiserfs_releasepage.patch
-
Andrew Morton authored
- Add a debug check to catch people who are marking non-uptodate buffers as dirty. This is either a source of data corruption, or sloppy programming. - Fix sloppy programming in ext3 ;)
-
Andrew Morton authored
Anton Blanchard has a workload (the SDET benchmark) which is showing some moderate lock contention in do_pagecache_readahead(). Seems that SDET has many threads performing seeky reads against a cached file. The average number of pagecache probes in a single do_pagecache_readahead() is six, which seems reasonable. The patch (from Anton) flips the locking around to optimise for the fast case (page was present). So the kernel takes the lock less often, and does more work once it has been acquired.
-
Arnaldo Carvalho de Melo authored
- fix copy_{to,from}_user error handling (thanks to Rusty for pointing this out)
-
http://linux-isdn.bkbits.net/linux-2.5.makeLinus Torvalds authored
into home.transmeta.com:/home/torvalds/v2.5/linux
-
Kai Germaschewski authored
Not a big change, but make provides the current directory, so why not use it ;-)
-
Kai Germaschewski authored
Don't print the actual command to call make in a subdir, make will print 'Entering directory <foo>' anyway, so we don't lose that information.
-
Kai Germaschewski authored
This Makefile would add irlan/irlan.o to $(obj-m) when selected as modular, which is wrong. The module will get compiled just fine after descending into that subdirectory anyway (whereas in the current directory we have no idea how to build it).
-
Kai Germaschewski authored
Make CFLAGS_foo.o work also when generating preprocessed (.i) and assembler (.s) files. Same for AFLAGS_foo.o.
-
http://linux-isdn.bkbits.net/linux-2.5.makeKai Germaschewski authored
into tp1.ruhr-uni-bochum.de:/home/kai/kernel/v2.5/linux-2.5.make
-
http://kernel-acme.bkbits.net:8080/usb-copy_tofrom_user-2.5Linus Torvalds authored
into home.transmeta.com:/home/torvalds/v2.5/linux
-
http://kernel-acme.bkbits.net:8080/isdn-copy_tofrom_user-2.5Linus Torvalds authored
into home.transmeta.com:/home/torvalds/v2.5/linux
-
Arnaldo Carvalho de Melo authored
- fix copy_{to,from}_user error handling (thanks to Rusty for pointing this out)
-
Arnaldo Carvalho de Melo authored
- fix copy_{to,from}_user error handling (thanks to Rusty for pointing this out)
-
- 18 May, 2002 3 commits
-
-
Kai Germaschewski authored
.<object>.flags are gone, but we have .<object>.cmd instead now and surely don't want to add the to the repository.
-
Kai Germaschewski authored
-
http://kernel-acme.bkbits.net:8080/oss-copy_tofrom_user-2.5Linus Torvalds authored
into home.transmeta.com:/home/torvalds/v2.5/linux
-
- 19 May, 2002 1 commit
-
-
Arnaldo Carvalho de Melo authored
into conectiva.com.br:/home/acme/bk/oss-copy_tofrom_user-2.5
-
- 18 May, 2002 18 commits
-
-
Arnaldo Carvalho de Melo authored
- fix copy_{to,from}_user error handling (thanks to Rusty for pointing this out)
-
Arnaldo Carvalho de Melo authored
fs/intermezzo/kml.c fs/intermezzo/psdev.c - fix copy_{to,from}_user error handling (thans to Rusty for pointing this out)
-
http://linux-isdn.bkbits.net/linux-2.5.isdnLinus Torvalds authored
into home.transmeta.com:/home/torvalds/v2.5/linux
-
Linus Torvalds authored
-
http://linux-isdn.bkbits.net/linux-2.5.makeLinus Torvalds authored
into home.transmeta.com:/home/torvalds/v2.5/linux
-
http://linux-isdn.bkbits.net/linux-2.5.make-nextLinus Torvalds authored
into home.transmeta.com:/home/torvalds/v2.5/linux
-
http://kernel-acme.bkbits.net:8080/intermezzo-copy_tofrom_user-2.5Linus Torvalds authored
into home.transmeta.com:/home/torvalds/v2.5/linux
-
Kai Germaschewski authored
into tp1.ruhr-uni-bochum.de:/home/kai/kernel/v2.5/linux-2.5.make-as
-
Kai Germaschewski authored
into tp1.ruhr-uni-bochum.de:/home/kai/kernel/v2.5/linux-2.5.isdn
-
Kai Germaschewski authored
into tp1.ruhr-uni-bochum.de:/home/kai/kernel/v2.5/linux-2.5.make.next
-
Kai Germaschewski authored
into tp1.ruhr-uni-bochum.de:/home/kai/kernel/v2.5/linux-2.5.make
-
Christoph Hellwig authored
This patch makes nfsd_open use init_private_file to initilize the file pointer the caller had allocated on stack. In addition a number of small cleanups: - format comments to be readable on 80char ANSI terminal - don't fop_get (and fop_put in nfsd_close), out file already is a reference to the inode so they can't go away. - don't decrement f_count on failure - it won't be checked anyway - don't check for filp->f_op n nfsd_close, it can't be NULL
-
Christoph Hellwig authored
Separate checks for !FS_REQUIRES_DEV and missing fsid option and missing export operations, second check for missing export operations and a small cleanup as side effect.
-
Neil Brown authored
With this patch raid5 works. There is still some more work to though. - uses bio instead of buffer_head - stripe cache is now a fixed size. If read requests are smaller, we read the whole block anyway If write reqeusts are smaller, we pre-read. - stripe_head is now variable sized with an array of structures at the end. We allocate extra space depending on how many devices are in the array. stripe_head has it's very own slab cache. - store and use bdev for each device in array by-passing the cache for reads is currently disabled. I need to think through the implications (and implementation) of allowing large bion that are larger than the stripe cache to go directly to the device (if it isn't failed of-course).
-
Neil Brown authored
- remove md_ prefix from some calls that used to be defined in md_compatability.h - remove "raid5_" prefix from some static functions, in line with recent changes to raid1.c ?? should cpu_has_mmx be moved to in processor.h ?
-
Neil Brown authored
The current code hits the page cache for the block device which requires memory allocation which can sometimes cause a deadlock (if it blocks the raid5d thread). This code takes the page that holds the superblock, and passes it to submit_bh in a suitable bio wrapper.
-
Neil Brown authored
I under-allocated the space that RPC needs for transmit on a UDP socket. We need lots of space to be allowed (though we may not use much) so that a lack of un-commited transmit space will not cause new requests to be blocked.
-
Chris Mason authored
This fixes reiserfs compile warnings for a few bitops calls.
-