• Kiyoshi Ueda's avatar
    blk_end_request: add callback feature (take 4) · e19a3ab0
    Kiyoshi Ueda authored
    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: default avatarKiyoshi Ueda <k-ueda@ct.jp.nec.com>
    Signed-off-by: default avatarJun'ichi Nomura <j-nomura@ce.jp.nec.com>
    Signed-off-by: default avatarJens Axboe <jens.axboe@oracle.com>
    e19a3ab0
ll_rw_blk.c 113 KB