From 587c5da6d90d1233b65bded7a96601e2d26dc621 Mon Sep 17 00:00:00 2001 From: Tejun Heo Date: Fri, 4 Sep 2009 11:38:02 +0900 Subject: [PATCH] --- yaml --- r: 167221 b: refs/heads/master c: 5915136d4d3954867cced8a2297bddd16caf36a1 h: refs/heads/master i: 167219: 00ebf0607d38aa10410cc3c9f3fed3fcb18b7394 v: v3 --- [refs] | 2 +- trunk/drivers/scsi/sr.c | 22 ++++++++++++++-------- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/[refs] b/[refs] index d31233a0d316..c635fced99e5 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 53203244a4f9988f132ef481867ff47d6bd055b5 +refs/heads/master: 5915136d4d3954867cced8a2297bddd16caf36a1 diff --git a/trunk/drivers/scsi/sr.c b/trunk/drivers/scsi/sr.c index eb61f7a70e1d..d6f340f48a3b 100644 --- a/trunk/drivers/scsi/sr.c +++ b/trunk/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) {