• Tejun Heo's avatar
    [BLOCK] Reimplement elevator switch · cb98fc8b
    Tejun Heo authored
     This patch reimplements elevator switch.  This patch assumes generic
    dispatch queue patchset is applied.
    
     * Each request is tagged with REQ_ELVPRIV flag if it has its elevator
       private data set.
     * Requests which doesn't have REQ_ELVPRIV flag set never enter
       iosched.  They are always directly back inserted to dispatch queue.
       Of course, elevator_put_req_fn is called only for requests which
       have its REQ_ELVPRIV set.
     * Request queue maintains the current number of requests which have
       its elevator data set (elevator_set_req_fn called) in
       q->rq->elvpriv.
     * If a request queue has QUEUE_FLAG_BYPASS set, elevator private data
       is not allocated for new requests.
    
     To switch to another iosched, we set QUEUE_FLAG_BYPASS and wait until
    elvpriv goes to zero; then, we attach the new iosched and clears
    QUEUE_FLAG_BYPASS.  New implementation is much simpler and main code
    paths are less cluttered, IMHO.
    Signed-off-by: default avatarTejun Heo <htejun@gmail.com>
    Signed-off-by: default avatarJens Axboe <axboe@suse.de>
    cb98fc8b
elevator.c 17.3 KB