[SCSI] Enable retries for SYNCRONIZE_CACHE commands to fix I/O error
authorHannes Reinecke <hare@suse.de>
Tue, 4 May 2010 14:49:21 +0000 (16:49 +0200)
committerJames Bottomley <James.Bottomley@suse.de>
Wed, 5 May 2010 16:13:26 +0000 (12:13 -0400)
Some arrays are giving I/O errors with ext3 filesystems when
SYNCHRONIZE_CACHE gets a UNIT_ATTENTION.  What is happening is that
these commands have no retries, so the UNIT_ATTENTION causes the
barrier to fail.  We should be enable retries here to clear any
transient error and allow the barrier to succeed.

Signed-off-by: Hannes Reinecke <hare@suse.de>
Cc: Stable Tree <stable@kernel.org>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
drivers/scsi/sd.c

index 8b827f3..de6c603 100644 (file)
@@ -1040,6 +1040,7 @@ static void sd_prepare_flush(struct request_queue *q, struct request *rq)
 {
        rq->cmd_type = REQ_TYPE_BLOCK_PC;
        rq->timeout = SD_TIMEOUT;
+       rq->retries = SD_MAX_RETRIES;
        rq->cmd[0] = SYNCHRONIZE_CACHE;
        rq->cmd_len = 10;
 }