summaryrefslogtreecommitdiff
path: root/usr/src
diff options
context:
space:
mode:
authoryl194034 <none@none>2007-01-23 18:37:34 -0800
committeryl194034 <none@none>2007-01-23 18:37:34 -0800
commita60be22acbb80aed1c647876c5d71f32e99d2e34 (patch)
treeb55589e5914e5b2fb113e255da0192c9950da335 /usr/src
parent0f2cfdbb2dd724b1f649ce31d87b7964153dc0bc (diff)
downloadillumos-gate-a60be22acbb80aed1c647876c5d71f32e99d2e34.tar.gz
6505720 wrong default disk label on x86, for an audio cd
Contributed by Juergen Keil <jk@tools.de>
Diffstat (limited to 'usr/src')
-rw-r--r--usr/src/uts/common/io/scsi/targets/sd.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/usr/src/uts/common/io/scsi/targets/sd.c b/usr/src/uts/common/io/scsi/targets/sd.c
index 9fe7a311a4..6d2cdc6bff 100644
--- a/usr/src/uts/common/io/scsi/targets/sd.c
+++ b/usr/src/uts/common/io/scsi/targets/sd.c
@@ -4481,6 +4481,14 @@ sd_validate_geometry(struct sd_lun *un, int path_flag)
return (EACCES);
case SD_CMD_FAILURE:
ASSERT(mutex_owned(SD_MUTEX(un)));
+ /*
+ * A multisession audio cd can have an unreadable
+ * fdisk sector, but there could be readable data
+ * in a separate session. Accept this and let
+ * the code build a default disk label later on.
+ */
+ if (ISCD(un))
+ break;
return (ENOMEM);
}
@@ -4915,8 +4923,9 @@ sd_read_fdisk(struct sd_lun *un, uint_t capacity, int lbasize, int path_flag)
if (rval != 0) {
SD_ERROR(SD_LOG_ATTACH_DETACH, un,
"sd_read_fdisk: fdisk read err\n");
- kmem_free(bufp, blocksize);
- return (SD_CMD_FAILURE);
+ bzero(un->un_fmap, sizeof (struct fmap) * FD_NUMPART);
+ rval = SD_CMD_FAILURE;
+ goto done;
}
mbp = (struct mboot *)bufp;