path: root/block
diff options
authorJens Axboe <axboe@suse.de>2006-02-03 08:37:08 +0100
committerJens Axboe <axboe@nelson.home.kernel.dk>2006-02-08 10:07:13 +0100
commit01840f9c9d7ae366311302077ace6bc39169399b (patch)
treede26c62e94ab279e18b8278cb7d74f1d14290a0c /block
parentac171c46667c1cb2ee9e22312291df6ed78e1b6e (diff)
[PATCH] blk: Fix SG_IO ioctl failure retry looping
When issuing an SG_IO ioctl through sd that resulted in an unrecoverable error, a nearly infinite retry loop was discovered. This is due to the fact that the block layer SG_IO code is not setting up rq->retries. This patch also fixes up the sg_scsi_ioctl path. Signed-off-by: Brian King <brking@us.ibm.com> Signed-off-by: Jens Axboe <axboe@suse.de>
Diffstat (limited to 'block')
1 files changed, 3 insertions, 0 deletions
diff --git a/block/scsi_ioctl.c b/block/scsi_ioctl.c
index cc72210687e..24f7af9d0ab 100644
--- a/block/scsi_ioctl.c
+++ b/block/scsi_ioctl.c
@@ -310,6 +310,8 @@ static int sg_io(struct file *file, request_queue_t *q,
if (!rq->timeout)
rq->timeout = BLK_DEFAULT_TIMEOUT;
+ rq->retries = 0;
start_time = jiffies;
/* ignore return value. All information is passed back to caller
@@ -427,6 +429,7 @@ static int sg_scsi_ioctl(struct file *file, request_queue_t *q,
rq->data = buffer;
rq->data_len = bytes;
rq->flags |= REQ_BLOCK_PC;
+ rq->retries = 0;
blk_execute_rq(q, bd_disk, rq, 0);
err = rq->errors & 0xff; /* only 8 bit SCSI status */