1. 08 Jan, 2003 7 commits
    • Andrew Morton's avatar
      [PATCH] Reduced wakeup rate in direct-io code · a10edc31
      Andrew Morton authored
      We don't need to wake up the synchronous waiter for every BIO
      completion - just for the final BIO.
      
      This reduces the context switch rate of a 180 megabyte/sec read from
      3500/sec to 2200/sec when performing 1400 128k I/Os per second, so it
      more than halves the overhead.
      a10edc31
    • Andrew Morton's avatar
      [PATCH] AIO support for raw/O_DIRECT · c22c8389
      Andrew Morton authored
      Patch from Badari Pulavarty <pbadari@us.ibm.com> and myself.
      
      This patch adds AIO support for direct-IO - O_DIRECT files, O_DIRECT
      blockdevs and /dev/raw/rawN.
      
      Also, the controlling `struct dio' is now always kmalloced, saving ~400 bytes
      of stack.
      
      The best tool for testing AIO/DIO is the modified fsx-linux in ext3 CVS.
      See http://www.zip.com.au/~akpm/linux/ext3/ for details.  For example:
      
      	fsx-linux -Z -A -R -W -r 512 -w 4096 foo
      
      Running many instances of this against ext3 currently fails with incorrect
      file data; some bug in the new ext3 O_DIRECT support.  ext2 is OK though.
      c22c8389
    • Andrew Morton's avatar
      [PATCH] bio dirtying infrastructure · 511d2652
      Andrew Morton authored
      In two cases (AIO-for-direct-IO and some CDROM DMA stuff which Jens
      did), we need to run set_page_dirty() in interrupt context.  After DMA
      hardware has altered userspace pages for direct-IO reads.
      
      But mapping->page_lock, mapping->private_lock and inode_lock are not
      irq-safe.  And really, we don't want to convert those locks just for this
      problem.
      
      So what we do is to dirty the pages *before* starting I/O.  Then, in
      interrupt completion context, check to see that they are still dirty.
      If so then there is nothing to do.  But if the pages were cleaned while
      the direct-IO is in progress we need to redirty them.  The code uses
      schedule_work() for that.
      
      Of course, we could use schedule_work() for all BIOs and pages.  The
      speculative dirty-before-starting-IO is just an optimisation.  It's
      quite unlikely that any of the pages will be cleaned during the direct
      IO.
      
      
      This code is basically untestable under normal circumstances, because the
      relevant pages are pinned via get_user_pages().  This makes
      is_page_cache_freeable() evaluate false and the VM doesn't try to write them
      out anyway.  But if the pages happen to be MAP_SHARED file pages, pdflush
      could clean them.  The way I tested this code was to disable the call to
      bio_set_pages_dirty() in fs/direct-io.c.
      511d2652
    • Andrew Morton's avatar
      [PATCH] AIO support for raw/O_DIRECT · 08e6749e
      Andrew Morton authored
      Patch from Badari Pulavarty <pbadari@us.ibm.com> and myself
      
      This patch adds the infrastructure for performing asynchronous (AIO) blockdev
      direct-IO.
      
      - Adds generic_file_aio_write_nolock() and make other
        generic_file_*_write() to use it.
      
      - Modify generic_file_direct_IO() and ->direct_IO() functions to take
        "kiocb *" instead of "file *".
      
      - Renames generic_direct_IO() to blockdev_direct_IO().
      
      - Move generic_file_direct_IO() to mm/filemap.c (it is not
        blockdev-specific, whereas the rest of fs/direct-io.c is).
      
      - Add AIO read/write support to the raw driver.
      08e6749e
    • Andrew Morton's avatar
      [PATCH] return the correct thing from direct-io · a6d61b6b
      Andrew Morton authored
      If direct-io encounters an error, it currently returns that error even if it
      performed some I/O.
      
      Change it so that if there is an error and we read or wrote something, return
      the number of bytes written/read.  Only return the error code if zero bytes
      were written/read.
      a6d61b6b
    • Andrew Morton's avatar
      [PATCH] AIO exit fix · 90c4bb05
      Andrew Morton authored
      We need to run exit_aio() when the final user of the mm goes away, else lots
      of things leak.
      
      Also remove a printk which comes out when this change is made.
      
      This patch was acked by bcrl.
      90c4bb05
    • Adrian Bunk's avatar
      [PATCH] remove code for 2.0 kernels from drivers/char/ftape/* · bebaf4f0
      Adrian Bunk authored
      The patch below is large but trivial:
      
      It removes old #if'd compatiblity code for 2.0 kernels from
      drivers/char/ftape/* (this includes the removal of two header files
      including only compatibility code and the #include's of these files).
      bebaf4f0
  2. 07 Jan, 2003 33 commits