- 30 Apr, 2002 40 commits
-
-
David Brownell authored
The attached patch makes the one SiS controller behave like the other... the key fix being wmb() to make sure that no writes are still in CPU caches before telling the HC it's OK to fetch the data. (And a minor tweak to access PCI less often through the hub driver.) But the OPTi problem seems to be different. Could you try this patch to see if it affects the problem your seeing with that NCR implementation? And in any case, please integrate it to Linus' latest. (Against 2.5.10, might be some fuzz on the pci tweak due to that warning fix.) Those missing wmb() statements have likely been the root cause of various usb-ohci flakes reported over time, too. The drivers are still almost identical in those areas. (Though something made ohci-hcd consistently lose that cache flush race; maybe it's a bit faster.)
-
David Brownell authored
This resends the "usb_make_path()" update (my net-0408 patch) to pegasus, so it reports the same bus info the other usb network drivers now return, and fixes a couple other bugs in ethtool support I happened to notice: - driver info wasn't providing the "driver short name". - settings weren't correctly initting data (returned garbage) The first bug caused one text fields to overflow into the next in "ethtool -i eth1" output. The second caused a 10/100 device to report itself with "ethtool eth1" as having gigabit support ... :)
-
Linus Torvalds authored
-
Maksim Krasnyanskiy authored
This adds proper support for readv/writev in the TUN/TAP driver.
-
Linus Torvalds authored
-
http://linux-isdn.bkbits.net/linux-2.5.make-soundLinus Torvalds authored
into penguin.transmeta.com:/home/penguin/torvalds/repositories/kernel/linux
-
http://linux-isdn.bkbits.net/linux-2.5.isdnLinus Torvalds authored
into penguin.transmeta.com:/home/penguin/torvalds/repositories/kernel/linux
-
Linus Torvalds authored
-
Linus Torvalds authored
-
Linus Torvalds authored
-
David Gibson authored
The following patch against 2.5.11 updates the orinoco driver. As well as miscellaneous updates to the driver core it adds a new module supporting Prism 2.5 based PCI wireless cards, and adds a MAINTAINERS entry for the driver.
-
Frank Davis authored
Linus, During a 'make bzImage', I received a warning on ppp_generic.c that ret wasn't initialized (also for 2.5.10). I have attached a patch that sets ret = count, thus removing the warning. Please review for inclusion. Regards, Frank
-
http://linux-isdn.bkbits.net/linux-2.5.makeLinus Torvalds authored
into penguin.transmeta.com:/home/penguin/torvalds/repositories/kernel/linux
-
Robert Love authored
Attached patch is a resync of previous patches sent by Ingo and I. Specifically: - create new MAX_USER_RT_PRIO value - separate uses of MAX_RT_PRIO vs MAX_USER_RT_PRIO - replace use of magic numbers by above - additional comments
-
Paul Fulghum authored
This patch to synclink.h against 2.5.11 is required for the synclink_cs.c driver to compile.
-
Brian Gerst authored
Last remaining instances removed.
-
Linus Torvalds authored
-
Jaroslav Kysela authored
I overlooked these single line changes. Here are next corrections against ChangeSet 1.547:
-
Linus Torvalds authored
-
Linus Torvalds authored
-
Linus Torvalds authored
-
Dave Hansen authored
This patch takes the BKL out of vfs_readdir() and moves it into the individual filesystems, all 35 of them. I have the feeling that this wasn't done before because there are a lot of these to change and it was a pain to find them all. I definitely got all of those that were defined in the in the structure declaration like this "readdir: fs_readdir;" vxfs_readdir was assigned strangely, but I found it anyway. I also left devfs out of this one. Richard seems confident that devfs has no need for the BKL.
-
Linus Torvalds authored
-
Martin Dalecki authored
Tue Apr 30 13:23:13 CEST 2002 ide-clean-48 This fixes the "performance" degradation partially, becouse we don't miss that many jiffies in choose_urgent_device() anymore. However choose_urgent_device has to be fixed for the off by one error to don't loop for a whole 1/100 second before submitting the next request. - Include small declaration bits for Jens. (WIN_NOP fix in esp.) - Fix ide-pmac to conform to the recent API changes. - Prepare and improve the handling of the request queue. It sucks now as many request as possible. This is improving the performance.
-
Martin Dalecki authored
- Rewrite choose_drive() to iterate explicitely over the channels and devices on them. It is not performance critical to iterate over this typically quite small array of disks and allows us to let them act on the natural entity, namely the channel as well as to remove the drive->next field from struct ata_device. Make the device eviction code in ide_do_request() more intelliglible. Add some comments explaining the reasoning behind the code there. - Now finally since the code for choosing the drive which will be serviced next is intelliglibly it became obvious that the attempt to choose the next drive based on the duration of the last request was entierly bogous. (Because for example wakeups can take a long time, but this doesn't indicate that the drive is slow.) Remove this criterium and the corresponding accounting therefore. Threat all drives fairly right now. Surprise surprise the overall system throughput increased :-).
-
Martin Dalecki authored
- Remove the specific CONFIG_IDEDMA_PCI_WIP in favor of using the generic CONFIG_EXPERIMENTAL tag. (Pointed out by Vojtech Pavlik). - Change the signature of the IRQ handler to take the request directly as a parameter. This doesn't blow the code up but makes it much more obvious and finally it's reducing the number of side effects of the hwgroup->rq field. - A second sharp look after the above change allowed us to remove the wrq field from the hwgroup struct. It's just not used at all. - Change the signature of the end_request member of struct ata_operations to take the request as a second argument. Similar for __ide_end_request() and ide_end_request(). - Remove BUG_ON() items just before ide_set_handler(). The check in ide_set_handler is clever enough now. - Remove the rq subfield from ide-scsi packet structure. We have now the request context always in place. Same for floppy. - Let the timer expiry function take the request as a direct argument. Yes I know those changes are extensive. But they are a necessary step in between for the following purposes: - Consolidate the whole ATA/ATAPI stuff on passing a single unified request handling object. Because after eliminating those side effects it's far easier to see what's passed where. - Minimizing the amount of side effects in the overall code. That's a good thing anyway and it *doesn't* cost us neither performance nor space, since the stack depths are small anyway here. - Minimizing the usage of hwgroup - which should go away if possible.
-
Andrew Morton authored
Renames sync_buffers() to sync_blockdev() and removes its (never used) second argument. Removes fsync_no_super() in favour of direct calls to sync_blockdev().
-
Andrew Morton authored
- Fixes a performance problem - callers of prepare_write/commit_write, etc are locking pages, which synchronises them behind writeback, which also locks these pages. Significant slowdowns for some workloads. - So pages are no longer locked while under writeout. Introduce a new PG_writeback and associated infrastructure to support this design change. - Pages which are under read I/O still use PageLocked. Pages which are under write I/O have PageWriteback() true. I considered creating Page_IO instead of PageWriteback, and marking both readin and writeout pages as PageIO(). So pages are unlocked during both read and write. There just doesn't seem a need to do this - nobody ever needs unblocking access to a page which is under read I/O. - Pages under swapout (brw_page) are PageLocked, not PageWriteback. So their treatment is unchangeded. It's not obvious that pages which are under swapout actually need the more asynchronous behaviour of PageWriteback. I was setting the swapout pages PageWriteback and unlocking them prior to submitting the buffers in brw_page(). This led to deadlocks on the exit_mmap->zap_page_range->free_swap_and_cache path. These functions call block_flushpage under spinlock. If the page is unlocked but has locked buffers, block_flushpage->discard_buffer() sleeps. Under spinlock. So that will need fixing if for some reason we want swapout to use PageWriteback. Kernel has called block_flushpage() under spinlock for a long time. It is assuming that a locked page will never have locked buffers. This appears to be true, but it's ugly. - Adds new function wait_on_page_writeback(). Renames wait_on_page() to wait_on_page_locked() to remind people that they need to call the appropriate one. - Renames filemap_fdatasync() to filemap_fdatawrite(). It's more accurate - "sync" implies, if anything, writeout and wait. (fsync, msync) Or writeout. it's not clear. - Subtly changes the filemap_fdatawrite() internals - this function used to do a lock_page() - it waited for any other user of the page to let go before submitting new I/O against a page. It has been changed to simply skip over any pages which are currently under writeback. This is the right thing to do for memory-cleansing reasons. But it's the wrong thing to do for data consistency operations (eg, fsync()). For those operations we must ensure that all data which was dirty *at the time of the system call* are tight on disk before the call returns. So all places which care about this have been converted to do: filemap_fdatawait(mapping); /* Wait for current writeback */ filemap_fdatawrite(mapping); /* Write all dirty pages */ filemap_fdatawait(mapping); /* Wait for I/O to complete */ - Fixes a truncate_inode_pages problem - truncate currently will block when it hits a locked page, so it ends up getting into lockstep behind writeback and all of the file is pointlessly written back. One fix for this is for truncate to simply walk the page list in the opposite direction from writeback. I chose to use a separate cleansing pass. It is more CPU-intensive, but it is surer and clearer. This is because there is no reason why the per-address_space ->vm_writeback and ->writeback_mapping functions *have* to perform writeout in ->dirty_pages order. They may choose to do something totally different. (set_page_dirty() is an a_op now, so address_spaces could almost privatise the whole dirty-page handling thing. Except truncate_inode_pages and invalidate_inode_pages assume that the pages are on the address_space lists. hmm. So making truncate_inode_pages and invalidate_inode_pages a_ops would make some sense).
-
Andrew Morton authored
Implements hashed waitqueues for buffer_heads. Drops twelve bytes from struct buffer_head.
-
Andrew Morton authored
Moves all buffer_head-related stuff out of linux/fs.h and into linux/buffer_head.h. buffer_head.h is currently included at the very end of fs.h. So it is possible to include buffer_head directly from all .c files and remove this nested include. Also rationalises all the set_buffer_foo() and mark_buffer_bar() functions. We have: set_buffer_foo(bh) clear_buffer_foo(bh) buffer_foo(bh) and, in some cases, where needed: test_set_buffer_foo(bh) test_clear_buffer_foo(bh) And that's it. BUFFER_FNS() and TAS_BUFFER_FNS() macros generate all the above real inline functions. Normally not a big fan of cpp abuse, but in this case it fits. These function-generating macros are available to filesystems to expand their own b_state functions. JBD uses this in one case.
-
Andrew Morton authored
Remove show_buffers(). It really has nothing to show any more. just buffermem_pages() - move that out into the callers. There's a lot of duplication in this code. better approach would be to remove all the duplicated code out in the architectures and implement generic show_memory_state(). Later.
-
Andrew Morton authored
Remove PG_skip. Nothing is using it (the change was acked by rmk a while back)
-
Andrew Morton authored
Removes inode.i_dirty_data_buffers. It's no longer used - all dirty buffers have their pages marked dirty and filemap_fdatasync() / filemap_fdatawait() catches it all. Updates all callers. This required a change in JFS - it has "metapages" which are a container around a page which holds metadata. They were holding these pages locked and were relying on fsync_inode_data_buffers for writing them out. So fdatasync() deadlocked. I've changed JFS to not lock those pages. Change was acked by Dave Kleikamp <shaggy@austin.ibm.com> as the right thing to do, but may not be complete. Probably igrab() against ->host is needed to pin the address_space down.
-
Andrew Morton authored
Removal of buffer_head.b_inode. The list_emptiness of b_inode_buffers is used to indicate whether the buffer is on an inode's i_dirty_buffers.
-
Andrew Morton authored
Remove writeout_one_page(), waitfor_one_page() and the now-unused generic_buffer_fdatasync(). Add new write_one_page(struct page *page, int wait) which is exported to modules. Update callers to use that. It's only used for IS_SYNC operations.
-
Andrew Morton authored
Removes some redundant BUG checks - trueness of PageSwapCache() implies that page->mapping is non-NULL, and we've already checked that.
-
Andrew Morton authored
page->flags cleanup. Moves the definitions of the page->flags bits and all the PageFoo macros into linux/page-flags.h. That file is currently included from mm.h, but the stage is set to remove that and include page-flags.h direct in all .c files which require that. (120 of them). The patch also makes all the page flag macros and functions consistent: For PG_foo, the following functions are defined: SetPageFoo ClearPageFoo TestSetPageFoo TestClearPageFoo PageFoo and that's it. - Page_Uptodate is renamed to PageUptodate - LockPage is removed. All users updated to use SetPageLocked - UnlockPage is removed. All callers updated to use unlock_page(). it's a real function - there's no need to hide that fact. - PageTestandClearReferenced renamed to TestClearPageReferenced - PageSetSlab renamed to SetPageSlab - __SetPageReserved is removed. It's an infinitesimally small microoptimisation, and is inconsistent. - TryLockPage is renamed to TestSetPageLocked - PageSwapCache() is renamed to page_swap_cache(), so it doesn't pretend to be a page->flags bit test.
-
Andrew Morton authored
Convert minixfs directory code to not rely on the state of data outside i_size.
-
Andrew Morton authored
Removes the buffer_head unused list. Use a mempool instead. The reduced lock contention provided about a 10% boost on ANton's 12-way.
-
Andrew Morton authored
[ I reversed the order in which writeback walks the superblock's dirty inodes. It sped up dbench's unlink phase greatly. I'm such a sleaze ] The core writeback patch. Switches file writeback from the dirty buffer LRU over to address_space.dirty_pages. - The buffer LRU is removed - The buffer hash is removed (uses blockdev pagecache lookups) - The bdflush and kupdate functions are implemented against address_spaces, via pdflush. - The relationship between pages and buffers is changed. - If a page has dirty buffers, it is marked dirty - If a page is marked dirty, it *may* have dirty buffers. - A dirty page may be "partially dirty". block_write_full_page discovers this. - A bunch of consistency checks of the form if (!something_which_should_be_true()) buffer_error(); have been introduced. These fog the code up but are important for ensuring that the new buffer/page code is working correctly. - New locking (inode.i_bufferlist_lock) is introduced for exclusion from try_to_free_buffers(). This is needed because set_page_dirty is called under spinlock, so it cannot lock the page. But it needs access to page->buffers to set them all dirty. i_bufferlist_lock is also used to protect inode.i_dirty_buffers. - fs/inode.c has been split: all the code related to file data writeback has been moved into fs/fs-writeback.c - Code related to file data writeback at the address_space level is in the new mm/page-writeback.c - try_to_free_buffers() is now non-blocking - Switches vmscan.c over to understand that all pages with dirty data are now marked dirty. - Introduces a new a_op for VM writeback: ->vm_writeback(struct page *page, int *nr_to_write) this is a bit half-baked at present. The intent is that the address_space is given the opportunity to perform clustered writeback. To allow it to opportunistically write out disk-contiguous dirty data which may be in other zones. To allow delayed-allocate filesystems to get good disk layout. - Added address_space.io_pages. Pages which are being prepared for writeback. This is here for two reasons: 1: It will be needed later, when BIOs are assembled direct against pagecache, bypassing the buffer layer. It avoids a deadlock which would occur if someone moved the page back onto the dirty_pages list after it was added to the BIO, but before it was submitted. (hmm. This may not be a problem with PG_writeback logic). 2: Avoids a livelock which would occur if some other thread is continually redirtying pages. - There are two known performance problems in this code: 1: Pages which are locked for writeback cause undesirable blocking when they are being overwritten. A patch which leaves pages unlocked during writeback comes later in the series. 2: While inodes are under writeback, they are locked. This causes namespace lookups against the file to get unnecessarily blocked in wait_on_inode(). This is a fairly minor problem. I don't have a fix for this at present - I'll fix this when I attach dirty address_spaces direct to super_blocks. - The patch vastly increases the amount of dirty data which the kernel permits highmem machines to maintain. This is because the balancing decisions are made against the amount of memory in the machine, not against the amount of buffercache-allocatable memory. This may be very wrong, although it works fine for me (2.5 gigs). We can trivially go back to the old-style throttling with s/nr_free_pagecache_pages/nr_free_buffer_pages/ in balance_dirty_pages(). But better would be to allow blockdev mappings to use highmem (I'm thinking about this one, slowly). And to move writer-throttling and writeback decisions into the VM (modulo the file-overwriting problem). - Drops 24 bytes from struct buffer_head. More to come. - There's some gunk like super_block.flags:MS_FLUSHING which needs to be killed. Need a better way of providing collision avoidance between pdflush threads, to prevent more than one pdflush thread working a disk at the same time. The correct way to do that is to put a flag in the request queue to say "there's a pdlfush thread working this disk". This is easy to do: just generalise the "ra_pages" pointer to point at a struct which includes ra_pages and the new collision-avoidance flag.
-