mirror of
https://github.com/adulau/aha.git
synced 2024-12-27 19:26:25 +00:00
[SCSI] sr: consider the last written sector when determining media 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> Signed-off-by: James Bottomley <James.Bottomley@suse.de>
This commit is contained in:
parent
53203244a4
commit
5915136d4d
1 changed files with 14 additions and 8 deletions
|
@ -684,14 +684,20 @@ static void get_sectorsize(struct scsi_cd *cd)
|
||||||
cd->capacity = 0x1fffff;
|
cd->capacity = 0x1fffff;
|
||||||
sector_size = 2048; /* A guess, just in case */
|
sector_size = 2048; /* A guess, just in case */
|
||||||
} else {
|
} else {
|
||||||
#if 0
|
long last_written;
|
||||||
if (cdrom_get_last_written(&cd->cdi,
|
|
||||||
&cd->capacity))
|
cd->capacity = 1 + ((buffer[0] << 24) | (buffer[1] << 16) |
|
||||||
#endif
|
(buffer[2] << 8) | buffer[3]);
|
||||||
cd->capacity = 1 + ((buffer[0] << 24) |
|
/*
|
||||||
(buffer[1] << 16) |
|
* READ_CAPACITY doesn't return the correct size on
|
||||||
(buffer[2] << 8) |
|
* certain UDF media. If last_written is larger, use
|
||||||
buffer[3]);
|
* 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) |
|
sector_size = (buffer[4] << 24) |
|
||||||
(buffer[5] << 16) | (buffer[6] << 8) | buffer[7];
|
(buffer[5] << 16) | (buffer[6] << 8) | buffer[7];
|
||||||
switch (sector_size) {
|
switch (sector_size) {
|
||||||
|
|
Loading…
Reference in a new issue