Skip to content

Commit

Permalink
[PATCH] i2o: block IO errors on i2o disk
Browse files Browse the repository at this point in the history
I2O subsystem has been broken in mainstream several months ago (after
2.6.18).  Commit 4aff5e2 from Jens
Axboe split struct request ->flags into two parts: cmd_type and
cmd_flags.

In i2o layer this patch has replaced flag REQ_SPECIAL by the according
cmd_type.  However i2o has used REQ_SPECIAL not as command type but as
driver-specific flag for the debug purposes.  As result all i2o requests
have type "special" now, are not processed to the hardware and fail with
I/O error:

   i2o/hda:<3>Buffer I/O error on device i2o/hda, logical block 0
  Buffer I/O error on device i2o/hda, logical block 0
  Buffer I/O error on device i2o/hda, logical block 0
   unable to read partition table
  block-osm: device added (TID: 207): i2o/hda

The following patch removes the extra debug checks without any drawbacks and
restores the normal driver's work.

Signed-off-by:	Vasily Averin <[email protected]>
Acked-by: Markus Lidel <[email protected]>
Cc: Jens Axboe <[email protected]>
Cc: <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
  • Loading branch information
Vasily Averin authored and Linus Torvalds committed Mar 27, 2007
1 parent 88f4500 commit d1985ad
Showing 1 changed file with 1 addition and 11 deletions.
12 changes: 1 addition & 11 deletions drivers/message/i2o/i2o_block.c
Original file line number Diff line number Diff line change
Expand Up @@ -390,13 +390,6 @@ static int i2o_block_prep_req_fn(struct request_queue *q, struct request *req)
return BLKPREP_KILL;
}

/* request is already processed by us, so return */
if (blk_special_request(req)) {
osm_debug("REQ_SPECIAL already set!\n");
req->cmd_flags |= REQ_DONTPREP;
return BLKPREP_OK;
}

/* connect the i2o_block_request to the request */
if (!req->special) {
ireq = i2o_block_request_alloc();
Expand All @@ -408,11 +401,8 @@ static int i2o_block_prep_req_fn(struct request_queue *q, struct request *req)
ireq->i2o_blk_dev = i2o_blk_dev;
req->special = ireq;
ireq->req = req;
} else
ireq = req->special;

}
/* do not come back here */
req->cmd_type = REQ_TYPE_SPECIAL;
req->cmd_flags |= REQ_DONTPREP;

return BLKPREP_OK;
Expand Down

0 comments on commit d1985ad

Please sign in to comment.