1. 28 1月, 2008 3 次提交
    • K
      blk_end_request: add callback feature (take 4) · e19a3ab0
      Kiyoshi Ueda 提交于
      This patch adds a variant of the interface, blk_end_request_callback(),
      which has driver callback feature.
      
      Drivers may need to do special works between end_that_request_first()
      and end_that_request_last().
      For such drivers, blk_end_request_callback() allows it to pass
      a callback function which is called between end_that_request_first()
      and end_that_request_last().
      
      This interface is only for fallback of other blk_end_request interfaces.
      Drivers should avoid their tricky behaviors and use other interfaces
      as much as possible.
      
      Currently, only one driver, ide-cd, needs this interface.
      So this interface should/will be removed, after the driver removes
      such tricky behaviors.
      
      o ide-cd (cdrom_newpc_intr())
        In PIO mode, cdrom_newpc_intr() needs to defer end_that_request_last()
        until the device clears DRQ_STAT and raises an interrupt after
        end_that_request_first().
        So end_that_request_first() and end_that_request_last() are called
        separately in cdrom_newpc_intr().
      
        This means blk_end_request_callback() has to return without
        completing request even if no leftover in the request.
        To satisfy the requirement, callback function has return value
        so that drivers can tell blk_end_request_callback() to return
        without completing request.
      Signed-off-by: NKiyoshi Ueda <k-ueda@ct.jp.nec.com>
      Signed-off-by: NJun'ichi Nomura <j-nomura@ce.jp.nec.com>
      Signed-off-by: NJens Axboe <jens.axboe@oracle.com>
      e19a3ab0
    • K
      blk_end_request: add/export functions to get request size (take 4) · 3b11313a
      Kiyoshi Ueda 提交于
      This patch adds/exports functions to get the size of request in bytes.
      They are useful because blk_end_request interfaces take bytes
      as a completed I/O size instead of sectors.
      Signed-off-by: NKiyoshi Ueda <k-ueda@ct.jp.nec.com>
      Signed-off-by: NJun'ichi Nomura <j-nomura@ce.jp.nec.com>
      Signed-off-by: NJens Axboe <jens.axboe@oracle.com>
      3b11313a
    • K
      blk_end_request: add new request completion interface (take 4) · 336cdb40
      Kiyoshi Ueda 提交于
      This patch adds 2 new interfaces for request completion:
        o blk_end_request()   : called without queue lock
        o __blk_end_request() : called with queue lock held
      
      blk_end_request takes 'error' as an argument instead of 'uptodate',
      which current end_that_request_* take.
      The meanings of values are below and the value is used when bio is
      completed.
          0 : success
        < 0 : error
      
      Some device drivers call some generic functions below between
      end_that_request_{first/chunk} and end_that_request_last().
        o add_disk_randomness()
        o blk_queue_end_tag()
        o blkdev_dequeue_request()
      These are called in the blk_end_request interfaces as a part of
      generic request completion.
      So all device drivers become to call above functions.
      To decide whether to call blkdev_dequeue_request(), blk_end_request
      uses list_empty(&rq->queuelist) (blk_queued_rq() macro is added for it).
      So drivers must re-initialize it using list_init() or so before calling
      blk_end_request if drivers use it for its specific purpose.
      (Currently, there is no driver which completes request without
       re-initializing the queuelist after used it.  So rq->queuelist
       can be used for the purpose above.)
      
      "Normal" drivers can be converted to use blk_end_request()
      in a standard way shown below.
      
       a) end_that_request_{chunk/first}
          spin_lock_irqsave()
          (add_disk_randomness(), blk_queue_end_tag(), blkdev_dequeue_request())
          end_that_request_last()
          spin_unlock_irqrestore()
          => blk_end_request()
      
       b) spin_lock_irqsave()
          end_that_request_{chunk/first}
          (add_disk_randomness(), blk_queue_end_tag(), blkdev_dequeue_request())
          end_that_request_last()
          spin_unlock_irqrestore()
          => spin_lock_irqsave()
             __blk_end_request()
             spin_unlock_irqsave()
      
       c) spin_lock_irqsave()
          (add_disk_randomness(), blk_queue_end_tag(), blkdev_dequeue_request())
          end_that_request_last()
          spin_unlock_irqrestore()
          => blk_end_request()   or   spin_lock_irqsave()
                                      __blk_end_request()
                                      spin_unlock_irqrestore()
      Signed-off-by: NKiyoshi Ueda <k-ueda@ct.jp.nec.com>
      Signed-off-by: NJun'ichi Nomura <j-nomura@ce.jp.nec.com>
      Signed-off-by: NJens Axboe <jens.axboe@oracle.com>
      336cdb40
  2. 27 1月, 2008 1 次提交
  3. 26 1月, 2008 1 次提交
  4. 12 1月, 2008 1 次提交
  5. 09 11月, 2007 1 次提交
  6. 29 10月, 2007 1 次提交
    • J
      [BLOCK] Fix bad sharing of tag busy list on queues with shared tag maps · 6eca9004
      Jens Axboe 提交于
      For the locking to work, only the tag map and tag bit map may be shared
      (incidentally, I was just explaining this to Nick yesterday, but I
      apparently didn't review the code well enough myself). But we also share
      the busy list!  The busy_list must be queue private, or we need a
      block_queue_tag covering lock as well.
      
      So we have to move the busy_list to the queue. This'll work fine, and
      it'll actually also fix a problem with blk_queue_invalidate_tags() which
      will invalidate tags across all shared queues. This is a bit confusing,
      the low level driver should call it for each queue seperately since
      otherwise you cannot kill tags on just a single queue for eg a hard
      drive that stops responding. Since the function has no callers
      currently, it's not an issue.
      Signed-off-by: NJens Axboe <jens.axboe@oracle.com>
      6eca9004
  7. 16 10月, 2007 3 次提交
  8. 12 10月, 2007 1 次提交
  9. 10 10月, 2007 5 次提交
    • N
      Remove flush_dry_bio_endio · d24517d7
      NeilBrown 提交于
      The entire function of flush_dry_bio_endio is to undo the effects
      of bio_endio (when called on a barrier request).  So remove the
      function and the call to bio_endio.
      
      This allows us to remove "bi_size" from "struct request_queue".
      Signed-off-by: NNeil Brown <neilb@suse.de>
      
      ### Diffstat output
       ./block/ll_rw_blk.c      |   39 ++-------------------------------------
       ./include/linux/blkdev.h |    1 -
       2 files changed, 2 insertions(+), 38 deletions(-)
      
      diff .prev/block/ll_rw_blk.c ./block/ll_rw_blk.c
      Signed-off-by: NJens Axboe <jens.axboe@oracle.com>
      d24517d7
    • J
      Fix warnings with !CONFIG_BLOCK · f5ff8422
      Jens Axboe 提交于
      Hide everything in blkdev.h with CONFIG_BLOCK isn't set, and fixup
      the (few) files that fail to build because they were relying on blkdev.h
      pulling in extra includes for them.
      Signed-off-by: NJens Axboe <jens.axboe@oracle.com>
      f5ff8422
    • N
      Stop exporting blk_rq_bio_prep · 66846572
      NeilBrown 提交于
      blk_rq_bio_prep is exported for use in exactly
      one place.  That place can benefit from using
      the new blk_rq_append_bio instead.
      So
        - change dm-emc to call blk_rq_append_bio
        - stop exporting blk_rq_bio_prep, and
        - initialise rq_disk in blk_rq_bio_prep,
             as dm-emc needs it.
      Signed-off-by: NNeil Brown <neilb@suse.de>
      
      diff .prev/block/ll_rw_blk.c ./block/ll_rw_blk.c
      Signed-off-by: NJens Axboe <jens.axboe@oracle.com>
      66846572
    • N
      New function blk_req_append_bio · 3001ca77
      NeilBrown 提交于
      ll_back_merge_fn is currently exported to SCSI where is it used,
      together with blk_rq_bio_prep, in exactly the same way these
      functions are used in __blk_rq_map_user.
      
      So move the common code into a new function (blk_rq_append_bio), and
      don't export ll_back_merge_fn any longer.
      Signed-off-by: NNeil Brown <neilb@suse.de>
      
      diff .prev/block/ll_rw_blk.c ./block/ll_rw_blk.c
      Signed-off-by: NJens Axboe <jens.axboe@oracle.com>
      3001ca77
    • N
      Introduce rq_for_each_segment replacing rq_for_each_bio · 5705f702
      NeilBrown 提交于
      Every usage of rq_for_each_bio wraps a usage of
      bio_for_each_segment, so these can be combined into
      rq_for_each_segment.
      
      We define "struct req_iterator" to hold the 'bio' and 'index' that
      are needed for the double iteration.
      Signed-off-by: NNeil Brown <neilb@suse.de>
      
      Various compile fixes by me...
      Signed-off-by: NJens Axboe <jens.axboe@oracle.com>
      5705f702
  10. 27 7月, 2007 1 次提交
  11. 24 7月, 2007 2 次提交
  12. 22 7月, 2007 1 次提交
  13. 18 7月, 2007 1 次提交
  14. 16 7月, 2007 5 次提交
  15. 10 7月, 2007 1 次提交
  16. 10 5月, 2007 1 次提交
  17. 30 4月, 2007 1 次提交
  18. 12 2月, 2007 1 次提交
  19. 19 12月, 2006 2 次提交
  20. 12 12月, 2006 1 次提交
    • B
      [PATCH] remove blk_queue_activity_fn · 2b02a179
      Boaz Harrosh 提交于
      While working on bidi support at struct request level
      I have found that blk_queue_activity_fn is actually never used.
      The only user is in ide-probe.c with this code:
      
      	/* enable led activity for disk drives only */
      	if (drive->media == ide_disk && hwif->led_act)
      		blk_queue_activity_fn(q, hwif->led_act, drive);
      
      And led_act is never initialized anywhere.
      (Looking back at older kernels it was used in the PPC arch, but was removed around 2.6.18)
      Unless it is all for future use off course.
      (this patch is against linux-2.6-block.git as off 2006/12/4)
      Signed-off-by: NBoaz Harrosh <bharrosh@panasas.com>
      Signed-off-by: NJens Axboe <jens.axboe@oracle.com>
      2b02a179
  21. 01 12月, 2006 1 次提交
  22. 21 10月, 2006 2 次提交
  23. 12 10月, 2006 1 次提交
  24. 05 10月, 2006 1 次提交
  25. 01 10月, 2006 1 次提交