Message ID | 4AA07D8A.6090004@kernel.org |
---|---|
State | Not Applicable |
Delegated to: | David Miller |
Headers | show |
Tejun Heo wrote: > On certain cases, UDF disc doesn't report capacity correctly via > READ_CAPACITY but TOC or trackinfo contains valid information which > can be obtained using cdrom_get_last_written(). ide-cd considers both > values and uses the larger one. Do the same in sr. This fixes > bko#9668. > > http://bugzilla.kernel.org/show_bug.cgi?id=9668 > > Signed-off-by: Tejun Heo <tj@kernel.org> > Reported-by: Milan Kocian <milan.kocian@wq.cz> > Cc: Jan Kara <jack@suse.cz> PING.
On Tue, Sep 15, 2009 at 06:54:02AM +0900, Tejun Heo wrote: > Tejun Heo wrote: > > On certain cases, UDF disc doesn't report capacity correctly via > > READ_CAPACITY but TOC or trackinfo contains valid information which > > can be obtained using cdrom_get_last_written(). ide-cd considers both > > values and uses the larger one. Do the same in sr. This fixes > > bko#9668. > > > > http://bugzilla.kernel.org/show_bug.cgi?id=9668 > > > > Signed-off-by: Tejun Heo <tj@kernel.org> > > Reported-by: Milan Kocian <milan.kocian@wq.cz> > > Cc: Jan Kara <jack@suse.cz> > > PING. > > -- > tejun > yes, works for me. You can add : Tested-by: Milan Kocian <milan.kocian@wq.cz> :-)
diff --git a/drivers/scsi/sr.c b/drivers/scsi/sr.c index cce0fe4..76bdcfc 100644 --- a/drivers/scsi/sr.c +++ b/drivers/scsi/sr.c @@ -684,14 +684,20 @@ static void get_sectorsize(struct scsi_cd *cd) cd->capacity = 0x1fffff; sector_size = 2048; /* A guess, just in case */ } else { -#if 0 - if (cdrom_get_last_written(&cd->cdi, - &cd->capacity)) -#endif - cd->capacity = 1 + ((buffer[0] << 24) | - (buffer[1] << 16) | - (buffer[2] << 8) | - buffer[3]); + long last_written; + + cd->capacity = 1 + ((buffer[0] << 24) | (buffer[1] << 16) | + (buffer[2] << 8) | buffer[3]); + /* + * READ_CAPACITY doesn't return the correct size on + * certain UDF media. If last_written is larger, use + * it instead. + * + * http://bugzilla.kernel.org/show_bug.cgi?id=9668 + */ + if (!cdrom_get_last_written(&cd->cdi, &last_written)) + cd->capacity = max_t(long, cd->capacity, last_written); + sector_size = (buffer[4] << 24) | (buffer[5] << 16) | (buffer[6] << 8) | buffer[7]; switch (sector_size) {
On certain cases, UDF disc doesn't report capacity correctly via READ_CAPACITY but TOC or trackinfo contains valid information which can be obtained using cdrom_get_last_written(). ide-cd considers both values and uses the larger one. Do the same in sr. This fixes bko#9668. http://bugzilla.kernel.org/show_bug.cgi?id=9668 Signed-off-by: Tejun Heo <tj@kernel.org> Reported-by: Milan Kocian <milan.kocian@wq.cz> Cc: Jan Kara <jack@suse.cz> --- drivers/scsi/sr.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) -- To unsubscribe from this list: send the line "unsubscribe linux-ide" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html