lkml.org 
[lkml]   [2009]   [May]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 12/18] xd: dequeue in-flight request
    Date
    xd processes requests one-by-one synchronously and can be easily
    converted to dequeueing model. Convert it.

    While at it, use rq_cur_bytes instead of rq_bytes when checking for
    sector overflow. This is for for consistency and better behavior for
    merged requests.

    [ Impact: dequeue in-flight request ]

    Signed-off-by: Tejun Heo <tj@kernel.org>
    ---
    drivers/block/xd.c | 29 +++++++++++++++++------------
    1 files changed, 17 insertions(+), 12 deletions(-)

    diff --git a/drivers/block/xd.c b/drivers/block/xd.c
    index 4ef8801..d4c4352 100644
    --- a/drivers/block/xd.c
    +++ b/drivers/block/xd.c
    @@ -305,26 +305,31 @@ static void do_xd_request (struct request_queue * q)
    if (xdc_busy)
    return;

    - while ((req = elv_next_request(q)) != NULL) {
    + req = elv_next_request(q);
    + if (req)
    + blkdev_dequeue_request(req);
    +
    + while (req) {
    unsigned block = blk_rq_pos(req);
    - unsigned count = blk_rq_sectors(req);
    + unsigned count = blk_rq_cur_sectors(req);
    XD_INFO *disk = req->rq_disk->private_data;
    - int res = 0;
    + int res = -EIO;
    int retry;

    - if (!blk_fs_request(req)) {
    - __blk_end_request_cur(req, -EIO);
    - continue;
    - }
    - if (block + count > get_capacity(req->rq_disk)) {
    - __blk_end_request_cur(req, -EIO);
    - continue;
    - }
    + if (!blk_fs_request(req))
    + goto done;
    + if (block + count > get_capacity(req->rq_disk))
    + goto done;
    for (retry = 0; (retry < XD_RETRIES) && !res; retry++)
    res = xd_readwrite(rq_data_dir(req), disk, req->buffer,
    block, count);
    + done:
    /* wrap up, 0 = success, -errno = fail */
    - __blk_end_request_cur(req, res);
    + if (!__blk_end_request_cur(req, res)) {
    + req = elv_next_request(q);
    + if (req)
    + blkdev_dequeue_request(req);
    + }
    }
    }

    --
    1.6.0.2


    \
     
     \ /
      Last update: 2009-05-08 05:07    [W:0.023 / U:2.944 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site