lkml.org 
[lkml]   [2008]   [Dec]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH] Correctly release and allocate a new request on TUR retries


    Commands needing to be retried (TUR in this case) would result in a block
    I/O request being re-used, without being re-initialized properly. This
    patch ensures that the requests are correctly re-initialized via
    standard allocation means.

    Prior to this patch, boots were failing consistently as in:
    http://lkml.org/lkml/2008/12/5/161

    With this patch in place, the system is booting reliably.

    Signed-off-by: Alan D. Brunelle <alan.brunelle@hp.com>
    Cc: Jens Axboe <jens.axboe@oracle.com>
    ---
    drivers/scsi/device_handler/scsi_dh_hp_sw.c | 6 ++++--
    1 files changed, 4 insertions(+), 2 deletions(-)

    diff --git a/drivers/scsi/device_handler/scsi_dh_hp_sw.c b/drivers/scsi/device_handler/scsi_dh_hp_sw.c
    index 9aec4ca..1f6b6a8 100644
    --- a/drivers/scsi/device_handler/scsi_dh_hp_sw.c
    +++ b/drivers/scsi/device_handler/scsi_dh_hp_sw.c
    @@ -107,6 +107,7 @@ static int hp_sw_tur(struct scsi_device *sdev, struct hp_sw_dh_data *h)
    struct request *req;
    int ret;

    +retry:
    req = blk_get_request(sdev->request_queue, WRITE, GFP_NOIO);
    if (!req)
    return SCSI_DH_RES_TEMP_UNAVAIL;
    @@ -121,7 +122,6 @@ static int hp_sw_tur(struct scsi_device *sdev, struct hp_sw_dh_data *h)
    memset(req->sense, 0, SCSI_SENSE_BUFFERSIZE);
    req->sense_len = 0;

    -retry:
    ret = blk_execute_rq(req->q, NULL, req, 1);
    if (ret == -EIO) {
    if (req->sense_len > 0) {
    @@ -136,8 +136,10 @@ retry:
    h->path_state = HP_SW_PATH_ACTIVE;
    ret = SCSI_DH_OK;
    }
    - if (ret == SCSI_DH_IMM_RETRY)
    + if (ret == SCSI_DH_IMM_RETRY) {
    + blk_put_request(req);
    goto retry;
    + }
    if (ret == SCSI_DH_DEV_OFFLINED) {
    h->path_state = HP_SW_PATH_PASSIVE;
    ret = SCSI_DH_OK;
    --
    1.5.6.3
    \
     
     \ /
      Last update: 2008-12-05 15:39    [W:0.023 / U:0.264 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site