1. 04 Jul, 2002 12 commits
    • Andrew Morton's avatar
      [PATCH] set TASK_RUNNING in cond_resched() · b2bd3a26
      Andrew Morton authored
      do_select() does set_current_state(TASK_INTERRUPTIBLE) then calls
      __pollwait() which calls __get_free_page() and the cond_resched() which
      I added to the pagecache reclaim code never returns.
      
      The patch makes cond_resched() more useful by setting current->state to
      TASK_RUNNING before scheduling.
      b2bd3a26
    • Andrew Morton's avatar
      [PATCH] add new list_splice_init() · f42e6ed8
      Andrew Morton authored
      A little cleanup: Most callers of list_splice() immediately
      reinitialise the source list_head after calling list_splice().
      
      So create a new list_splice_init() which does all that.
      f42e6ed8
    • Andrew Morton's avatar
      [PATCH] shmem fixes · e7c89646
      Andrew Morton authored
      A shmem cleanup/bugfix patch from Hugh Dickins.
      
      - Minor: in try_to_unuse(), only wait on writeout if we actually
        started new writeout.  Otherwise, there is no need because a
        wait_on_page_writeback() has already been executed against this page.
        And it's locked, so no new writeback can start.
      
      - Minor: in shmem_unuse_inode(): remove all the
        wait_on_page_writeback() logic.  We already did that in
        try_to_unuse(), adn the page is locked so no new writeback can start.
      
      - Less minor: add a missing a page_cache_release() to
        shmem_get_page_locked() in the uncommon case where the page was found
        to be under writeout.
      e7c89646
    • Andrew Morton's avatar
      [PATCH] remove swap_get_block() · b6a7f088
      Andrew Morton authored
      Patch from Christoph Hellwig removes swap_get_block().
      
      I was sort-of hanging onto this function because it is a standard
      get_block function, and maybe perhaps it could be used to make swap use
      the regular filesystem I/O functions.  We don't want to do that, so
      kill it.
      b6a7f088
    • Andrew Morton's avatar
      [PATCH] pdflush cleanup · f0e10c64
      Andrew Morton authored
      Writeback/pdflush cleanup patch from Steven Augart
      
      * Exposes nr_pdflush_threads as /proc/sys/vm/nr_pdflush_threads, read-only.
      
        (I like this - I expect that management of the pdflush thread pool
        will be important for many-spindle machines, and this is a neat way
        of getting at the info).
      
      * Adds minimum and maximum checking to the five writable pdflush
        and fs-writeback  parameters.
      
      * Minor indentation fix in sysctl.c
      
      * mm/pdflush.c now includes linux/writeback.h, which prototypes
        pdflush_operation.  This is so that the compiler can
        automatically check that the prototype matches the definition.
      
      * Adds a few comments to existing code.
      f0e10c64
    • Andrew Morton's avatar
      [PATCH] misc cleanups and fixes · 06be3a5e
      Andrew Morton authored
      - Comment and documentation fixlets
      
      - Remove some unneeded fields from swapper_inode (these are a
        leftover from when I had swap using the filesystem IO functions).
      
      - fix a printk bug in pci/pool.c: when dma_addr_t is 64 bit it
        generates a compile warning, and will print out garbage.  Cast it to
        unsigned long long.
      
      - Convert some writeback #defines into enums (Steven Augart)
      06be3a5e
    • Andrew Morton's avatar
      [PATCH] debug check for leaked blockdev buffers · 5226cca6
      Andrew Morton authored
      Having just fiddled with the refcounts of blockdev buffers, I want some
      way of assuring that the code is correct and is not leaking
      buffer_heads.
      
      There's no easy way to do this: if a blockdev page has pinned buffers
      then truncate_complete_page just cuts it loose and we leak memory.
      
      The patch adds a bit of debug code to catch these leaks.  This code,
      PF_RADIX_TREE and buffer_error() need to be removed later on.
      5226cca6
    • Andrew Morton's avatar
      [PATCH] Remove ext3's buffer_head cache · 34cb9226
      Andrew Morton authored
      Removes ext3's open-coded inode and allocation bitmap LRUs.
      
      This patch includes a cleanup to ext3_new_block().  The local variables
      `bh', `bh2', `i', `j', `k' and `tmp' have been renamed to something
      more palatable.
      34cb9226
    • Andrew Morton's avatar
      [PATCH] Remove ext2's buffer_head cache · 7ef751c5
      Andrew Morton authored
      Remove ext2's open-coded bitmap LRUs.  Core kernel does this for it now.
      7ef751c5
    • Andrew Morton's avatar
      [PATCH] per-cpu buffer_head cache · e7ae11b6
      Andrew Morton authored
      ext2 and ext3 implement a custom LRU cache of buffer_heads - the eight
      most-recently-used inode bitmap buffers and the eight MRU block bitmap
      buffers.
      
      I don't like them, for a number of reasons:
      
      - The code is duplicated between filesystems
      
      - The functionality is unavailable to other filesystems
      
      - The LRU only applies to bitmap buffers.  And not, say, indirects.
      
      - The LRUs are subtly dependent upon lock_super() for protection:
        without lock_super protection a bitmap could be evicted and freed
        while in use.
      
        And removing this dependence on lock_super() gets us one step on
        the way toward getting that semaphore out of the ext2 block allocator -
        it causes significant contention under some loads and should be a
        spinlock.
      
      - The LRUs pin 64 kbytes per mounted filesystem.
      
      Now, we could just delete those LRUs and rely on the VM to manage the
      memory.  But that would introduce significant lock contention in
      __find_get_block - the blockdev mapping's private_lock and page_lock
      are heavily used.
      
      So this patch introduces a transparent per-CPU bh lru which is hidden
      inside __find_get_block(), __getblk() and __bread().  It is designed to
      shorten code paths and to reduce lock contention.  It uses a seven-slot
      LRU.  It achieves a 99% hit rate in `dbench 64'.  It provides benefit
      to all filesystems.
      
      The next patches remove the open-coded LRUs from ext2 and ext3.
      
      Taken together, these patches are a code cleanup (300-400 lines gone),
      and they reduce lock contention.  Anton tested these patches on the
      32-way and demonstrated a throughput improvement of up to 15% on
      RAM-only dbench runs.  See http://samba.org/~anton/linux/2.5.24/dbench/
      
      Most of this benefit is from avoiding find_get_page() on the blockdev
      mapping.  Because the generic LRU copes with indirect blocks as well as
      bitmaps.
      e7ae11b6
    • Andrew Morton's avatar
      [PATCH] Fix 3c59x driver for some 3c566B's · fbaf74c8
      Andrew Morton authored
      Fix from Rahul Karnik and Donald Becker - some new 3c566B mini-PCI NICs
      refuse to power up the transceiver unless we tickle an undocumented bit
      in an undocumented register.  They worked this out by before-and-after
      diffing of the register contents when it was set up by the Windows
      driver.
      fbaf74c8
    • Andrew Morton's avatar
      [PATCH] handle BIO allocation failures in swap_writepage() · 27c02b00
      Andrew Morton authored
      If allocation of a BIO for swap writeout fails, mark the page dirty
      again to save it from eviction.
      27c02b00
  2. 20 Jun, 2002 28 commits