• Tejun Heo's avatar
    ide-tape: use standard data transfer mechanism · e998f30b
    Tejun Heo authored
    Impact: use standard way to transfer data
    
    ide-tape uses rq in an interesting way.  For r/w requests, rq->special
    is used to carry a private buffer management structure idetape_bh and
    rq->nr_sectors and current_nr_sectors are initialized to the number of
    idetape blocks which isn't necessary 512 bytes.  Also,
    rq->current_nr_sectors is used to report back the residual count in
    units of idetape blocks.
    
    This peculiarity taxes both block layer and ide.  ide-atapi has
    different paths and hooks to accomodate it and what a rq means becomes
    quite confusing and making changes at the block layer becomes quite
    difficult and error-prone.
    
    This patch makes ide-tape use bio instead.  With the previous patch,
    ide-tape currently is using single contiguos buffer so replacing it
    isn't difficult.  Data buffer is mapped into bio using
    blk_rq_map_kern() in idetape_queue_rw_tail().  idetape_io_buffers()
    and idetape_update_buffers() are dropped and pc->bh is set to null to
    tell ide-atapi to use standard data transfer mechanism and idetape_bh
    byte counts are updated by the issuer on completion using the residual
    count.
    
    This change also nicely removes the FIXME in ide_pc_intr() where
    ide-tape rqs need to be completed using ide_rq_bytes() instead of
    blk_rq_bytes() (although this didn't really matter as the request
    didn't have bio).
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    Cc: Jens Axboe <jens.axboe@oracle.com>
    e998f30b
ide-tape.c 61.3 KB