Messages in this thread Patch in this message | | | Date | Thu, 19 Jun 2008 14:30:03 -0700 | From | Greg KH <> | Subject | [patch 10/15] SCSI: sr: fix corrupt CD data after media change and delay |
| |
2.6.25-stable review patch. If anyone has any objections, please let us know.
------------------ From: James Bottomley <James.Bottomley@HansenPartnership.com>
commit: d1daeabf0da5bfa1943272ce508e2ba785730bf0 upstream
Reported-by: Geert Uytterhoeven <Geert.Uytterhoeven@sonycom.com>
If you delay 30s or more before mounting a CD after inserting it then the kernel has the wrong value for the CD size.
http://marc.info/?t=121276133000001
The problem is in sr_test_unit_ready(): the function eats unit attentions without adjusting the sdev->changed status. This means that when the CD signals changed media via unit attention, we can ignore it. Fix by making sr_test_unit_ready() adjust the changed status.
Reported-by: Geert Uytterhoeven <Geert.Uytterhoeven@sonycom.com> Tested-by: Geert Uytterhoeven <Geert.Uytterhoeven@sonycom.com> Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
--- drivers/scsi/sr.c | 3 +++ 1 file changed, 3 insertions(+)
--- a/drivers/scsi/sr.c +++ b/drivers/scsi/sr.c @@ -178,6 +178,9 @@ int sr_test_unit_ready(struct scsi_devic the_result = scsi_execute_req(sdev, cmd, DMA_NONE, NULL, 0, sshdr, SR_TIMEOUT, retries--); + if (scsi_sense_valid(sshdr) && + sshdr->sense_key == UNIT_ATTENTION) + sdev->changed = 1; } while (retries > 0 && (!scsi_status_is_good(the_result) || --
| |