1. 01 Feb, 2008 2 commits
    • Jens Axboe's avatar
      block: kill swap_io_context() · 3bc217ff
      Jens Axboe authored
      
      It blindly copies everything in the io_context, including the lock.
      That doesn't work so well for either lock ordering or lockdep.
      
      There seems zero point in swapping io contexts on a request to request
      merge, so the best point of action is to just remove it.
      Signed-off-by: default avatarJens Axboe <jens.axboe@oracle.com>
      3bc217ff
    • Jens Axboe's avatar
      as-iosched: fix inconsistent ioc->lock context · 8bdd3f8a
      Jens Axboe authored
      
      Since it's acquired from irq context, all locking must be of the
      irq safe variant. Most are already inside the queue lock (which
      already disables interrupts), but the io scheduler rmmod path
      always has irqs enabled and the put_io_context() path may legally
      be called with irqs enabled (even if it isn't usually). So fixup
      those two.
      Signed-off-by: default avatarJens Axboe <jens.axboe@oracle.com>
      8bdd3f8a
  2. 30 Jan, 2008 1 commit
  3. 28 Jan, 2008 1 commit
  4. 18 Dec, 2007 3 commits
  5. 24 Jul, 2007 1 commit
  6. 17 Jul, 2007 1 commit
  7. 09 May, 2007 1 commit
  8. 08 May, 2007 1 commit
  9. 13 Dec, 2006 1 commit
  10. 01 Dec, 2006 1 commit
  11. 22 Nov, 2006 1 commit
    • David Howells's avatar
      WorkStruct: Pass the work_struct pointer instead of context data · 65f27f38
      David Howells authored
      
      Pass the work_struct pointer to the work function rather than context data.
      The work function can use container_of() to work out the data.
      
      For the cases where the container of the work_struct may go away the moment the
      pending bit is cleared, it is made possible to defer the release of the
      structure by deferring the clearing of the pending bit.
      
      To make this work, an extra flag is introduced into the management side of the
      work_struct.  This governs auto-release of the structure upon execution.
      
      Ordinarily, the work queue executor would release the work_struct for further
      scheduling or deallocation by clearing the pending bit prior to jumping to the
      work function.  This means that, unless the driver makes some guarantee itself
      that the work_struct won't go away, the work function may not access anything
      else in the work_struct or its container lest they be deallocated..  This is a
      problem if the auxiliary data is taken away (as done by the last patch).
      
      However, if the pending bit is *not* cleared before jumping to the work
      function, then the work function *may* access the work_struct and its container
      with no problems.  But then the work function must itself release the
      work_struct by calling work_release().
      
      In most cases, automatic release is fine, so this is the default.  Special
      initiators exist for the non-auto-release case (ending in _NAR).
      Signed-Off-By: default avatarDavid Howells <dhowells@redhat.com>
      65f27f38
  12. 01 Oct, 2006 1 commit
  13. 30 Sep, 2006 12 commits
  14. 30 Jun, 2006 1 commit
  15. 26 Jun, 2006 1 commit
  16. 23 Jun, 2006 3 commits
    • Jens Axboe's avatar
      [PATCH] rbtree: support functions used by the io schedulers · dd67d051
      Jens Axboe authored
      
      They all duplicate macros to check for empty root and/or node, and
      clearing a node. So put those in rbtree.h.
      Signed-off-by: default avatarJens Axboe <axboe@suse.de>
      dd67d051
    • Jens Axboe's avatar
      [PATCH] Kill PF_SYNCWRITE flag · b31dc66a
      Jens Axboe authored
      
      A process flag to indicate whether we are doing sync io is incredibly
      ugly. It also causes performance problems when one does a lot of async
      io and then proceeds to sync it. Part of the io will go out as async,
      and the other part as sync. This causes a disconnect between the
      previously submitted io and the synced io. For io schedulers such as CFQ,
      this will cause us lost merges and suboptimal behaviour in scheduling.
      
      Remove PF_SYNCWRITE completely from the fsync/msync paths, and let
      the O_DIRECT path just directly indicate that the writes are sync
      by using WRITE_SYNC instead.
      Signed-off-by: default avatarJens Axboe <axboe@suse.de>
      b31dc66a
    • Akinobu Mita's avatar
      [PATCH] iosched: use hlist for request hashtable · bae386f7
      Akinobu Mita authored
      
      Use hlist instead of list_head for request hashtable in deadline-iosched
      and as-iosched. It also can remove the flag to know hashed or unhashed.
      Signed-off-by: default avatarAkinobu Mita <mita@miraclelinux.com>
      Signed-off-by: default avatarJens Axboe <axboe@suse.de>
      
       block/as-iosched.c       |   45 +++++++++++++++++++--------------------------
       block/deadline-iosched.c |   39 ++++++++++++++++-----------------------
       2 files changed, 35 insertions(+), 49 deletions(-)
      bae386f7
  17. 08 Jun, 2006 1 commit
    • Jens Axboe's avatar
      [PATCH] elevator switching race · bc1c1169
      Jens Axboe authored
      
      There's a race between shutting down one io scheduler and firing up the
      next, in which a new io could enter and cause the io scheduler to be
      invoked with bad or NULL data.
      
      To fix this, we need to maintain the queue lock for a bit longer.
      Unfortunately we cannot do that, since the elevator init requires to be
      run without the lock held.  This isn't easily fixable, without also
      changing the mempool API.  So split the initialization into two parts,
      and alloc-init operation and an attach operation.  Then we can
      preallocate the io scheduler and related structures, and run the attach
      inside the lock after we detach the old one.
      
      This patch has survived 30 minutes of 1 second io scheduler switching
      with a very busy io load.
      Signed-off-by: default avatarJens Axboe <axboe@suse.de>
      Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
      bc1c1169
  18. 21 Apr, 2006 1 commit
  19. 18 Apr, 2006 1 commit
    • OGAWA Hirofumi's avatar
      [PATCH 1/2] iosched: fix typo and barrier() · fba82272
      OGAWA Hirofumi authored
      
      On rmmod path, cfq/as waits to make sure all io-contexts was
      freed. However, it's using complete(), not wait_for_completion().
      
      I think barrier() is not enough in here. To avoid the following case,
      this patch replaces barrier() with smb_wmb().
      
      	cpu0			visibility			cpu1
      	                [ioc_gnone=NULL,ioc_count=1]
      
      ioc_gnone = &all_gone		NULL,ioc_count=1
      atomic_read(&ioc_count)		NULL,ioc_count=1
      wait_for_completion()		NULL,ioc_count=0	atomic_sub_and_test()
      				NULL,ioc_count=0	if ( && ioc_gone)
      						    [ioc_gone==NULL,
      						    so doesn't call complete()]
      			   &all_gone,ioc_count=0
      Signed-off-by: default avatarOGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
      Signed-off-by: default avatarJens Axboe <axboe@suse.de>
      fba82272
  20. 19 Mar, 2006 1 commit
  21. 18 Mar, 2006 3 commits
  22. 06 Jan, 2006 1 commit
    • Tejun Heo's avatar
      [BLOCK] as-iosched: update alias handling · ef9be1d3
      Tejun Heo authored
      
      Unlike other ioscheds, as-iosched handles alias by chaing them using
      rq->queuelist.  As aliased requests are very rare in the first place,
      this complicates merge/dispatch handling without meaningful
      performance improvement.  This patch updates as-iosched to dump
      aliased requests into dispatch queue as other ioscheds do.
      Signed-off-by: default avatarTejun Heo <htejun@gmail.com>
      Signed-off-by: default avatarJens Axboe <axboe@suse.de>
      ef9be1d3