Skip to contentSkip to conversation

2.6.2, Partition support for SCSI CDROM...

PATCH In review Steven J. Hill 9 participants 12 messages Feb 23, 2004 – Feb 27, 2004 SCSI

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 2.6.2, Partition support for SCSI CDROM...

Greetings.

This patch enables support for CDROMs that have partitions on them, like say SGI and SUN media. It was sent to me by Christoph Hellwig and then I cleaned it up a bit. I am posting it more for flamebait^Wcomments to see if people are comfortable with it. Thanks.

-Steve

drivers/scsi/Kconfig +42 -0
diff -urN linux-2.6.2/drivers/scsi/Kconfig linux-2.6.2-patched/drivers/scsi/Kconfig
@@ -112,6 +112,48 @@
 	  drives (and HP Writers). If you have such a drive and get the first
 	  session only, try saying Y here; everybody else says N.
 
+config BLK_DEV_SR_PARTITIONS
+	bool "Enable partitions (for SCSI CDROM)"
+	depends on BLK_DEV_SR
+	help
+	  This enables the utilisation of partitions on CDs, usually
+	  media from SGI or Sun. You must enable "SGI partition support"
+	  and/or "Sun partition tables support" to be able to see their
+	  respective CD partitions. Also make sure to say Y or M to
+	  "EFS file system support" and "UFS file system support" to
+	  support reading of SGI and Sun filesystems.
+	  
+	  If you want to this feature, say Y here; everybody else will
+	  most likely say N.
+
+config BLK_DEV_SR_PARTITIONS_PER_DEVICE
+	int "Number of paritions supported per SCSI CDROM device"
+	depends on BLK_DEV_SR_PARTITIONS
+	default "0"
+	help
+	  The number of partitions supported per SCSI CDROM device. If
+	  the value chosen was 7, you will have the following device
+	  node mappings:
+
+	     sr0 - first CDROM, whole disk
+	     sr1 - first CDROM, first partition
+	     
+	     [...]
+	     
+	     sr7 - first CDROM, seventh partition
+	     sr8 - second CDROM, whole disk
+	     sr9 - second CDROM, first partition
+
+	     [...]
+
+	  You made need to create additional device nodes depending on
+	  the number of partitions and SCSI CDROM devices you have in
+	  your system.
+	  
+	  If SCSI CDROM support is compiled as a module, you can specify
+	  how many partitions you want when you insert the module which
+	  will override this default value.
+	  
 config CHR_DEV_SG
 	tristate "SCSI generic support"
 	depends on SCSI
drivers/scsi/sr.c +15 -2
diff -urN linux-2.6.2/drivers/scsi/sr.c linux-2.6.2-patched/drivers/scsi/sr.c
@@ -55,6 +55,13 @@
 #include "scsi_logging.h"
 #include "sr.h"
 
+#ifdef CONFIG_BLK_DEV_SR_PARTITIONS
+static int partitions = CONFIG_BLK_DEV_SR_PARTITIONS_PER_DEVICE;
+MODULE_PARM(partitions, "i");
+MODULE_PARM_DESC(partitions, "number of SCSI CDROM partitions to support");
+#else
+static int partitions = 0;
+#endif
 
 MODULE_PARM(xa_test, "i");	/* see sr_ioctl.c */
 
@@ -518,7 +525,7 @@
 		goto fail;
 	memset(cd, 0, sizeof(*cd));
 
-	disk = alloc_disk(1);
+	disk = alloc_disk(partitions + 1);
 	if (!disk)
 		goto fail_free;
 
@@ -533,7 +540,7 @@
 	spin_unlock(&sr_index_lock);
 
 	disk->major = SCSI_CDROM_MAJOR;
-	disk->first_minor = minor;
+	disk->first_minor = minor * (partitions + 1);
 	sprintf(disk->disk_name, "sr%d", minor);
 	disk->fops = &sr_bdops;
 	disk->flags = GENHD_FL_CD;
@@ -868,6 +875,12 @@
 {
 	int rc;
 
+#ifdef MODULE
+	/* Check number of partitions specified. */
+	if (partitions < 0)
+		partitions = 0;
+#endif
+
 	rc = register_blkdev(SCSI_CDROM_MAJOR, "sr");
 	if (rc)
 		return rc;
#1 lore raw

drivers/scsi/Kconfig line 129

Quoted 10 lines · Steven J. Hill

Greetings.

This patch enables support for CDROMs that have partitions on them, like say SGI and SUN media. It was sent to me by Christoph Hellwig and then I cleaned it up a bit. I am posting it more for flamebait^Wcomments to see if people are comfortable with it.

drivers/scsi/Kconfig +2 -0
+config BLK_DEV_SR_PARTITIONS
+config BLK_DEV_SR_PARTITIONS_PER_DEVICE

Do we actually need these config options? Why not hardwire it to some reasonable upper bound and be done with it?

drivers/scsi/sr.c line 883

Quoted 7 lines
drivers/scsi/sr.c +6 -0
+#ifdef MODULE
+	/* Check number of partitions specified. */
+	if (partitions < 0)
+		partitions = 0;
+#endif
+

Why is this ifdef needed?

#2 lore raw
Quoted 8 lines · Andrew Morton

drivers/scsi/Kconfig line 129

Quoted 3 lines
drivers/scsi/Kconfig +2 -0
+config BLK_DEV_SR_PARTITIONS
+config BLK_DEV_SR_PARTITIONS_PER_DEVICE

Do we actually need these config options? Why not hardwire it to some reasonable upper bound and be done with it?

I have no problem hardwiring the number of partitions, but the BLK_DEV_SR_PARTITIONS should still be an option to allow the user to decided if they want partitioning support for their SCSI CDROMs. Or are you suggesting that from now on partitions will be supported by default?

Quoted 2 lines

Why is this ifdef needed?

Indeed, it is pointless.

-Steve

#3 lore raw
Quoted 10 lines · Steven J. Hill
Quoted 8 lines · Andrew Morton

drivers/scsi/Kconfig line 129

Quoted 3 lines
drivers/scsi/Kconfig +2 -0
+config BLK_DEV_SR_PARTITIONS
+config BLK_DEV_SR_PARTITIONS_PER_DEVICE

Do we actually need these config options? Why not hardwire it to some reasonable upper bound and be done with it?

Quoted 5 lines

I have no problem hardwiring the number of partitions, but the BLK_DEV_SR_PARTITIONS should still be an option to allow the user to decided if they want partitioning support for their SCSI CDROMs. Or are you suggesting that from now on partitions will be supported by default?

Well we need to be able to handle both types at runtime anyway, and the amount of added code is tiny.

#4 lore raw
In reply to Steven J. Hill
Quoted 9 lines · Steven J. Hill
Quoted 8 lines · Andrew Morton

drivers/scsi/Kconfig line 129

Quoted 3 lines
drivers/scsi/Kconfig +2 -0
+config BLK_DEV_SR_PARTITIONS
+config BLK_DEV_SR_PARTITIONS_PER_DEVICE

Do we actually need these config options? Why not hardwire it to some reasonable upper bound and be done with it?

Quoted 5 lines

I have no problem hardwiring the number of partitions, but the BLK_DEV_SR_PARTITIONS should still be an option to allow the user to decided if they want partitioning support for their SCSI CDROMs. Or are you suggesting that from now on partitions will be supported by default?

A couple of comments on this.

First, I've seen CDs in which the capacity reported by the CD is actually slightly greater than the number of burned sectors. In that case, you'll get errors during the partition scanning. You can just ignore the errors, however, so it's no big deal.

Also, the default should probably be 16 partitions, since that is what's supported on SGI CDs. Most SGI CDs are in ISO format, but Irix installation CDs do have an SGI partition table.

jeremy

#5 lore raw

Here is the second try at the patch.

-Steve

drivers/scsi/sr.c +23 -2
diff -urN linux-2.6.2/drivers/scsi/sr.c linux-2.6.2-patched/drivers/scsi/sr.c
@@ -55,6 +55,23 @@
 #include "scsi_logging.h"
 #include "sr.h"
 
+/*
+ * Device node mappings are as follows:
+ *
+ *    sr0 - first CDROM, whole disk
+ *    sr1 - first CDROM, first partition
+ *
+ *    [...]
+ *
+ *    sr16 - first CDROM, sixteenth partition
+ *    sr17 - second CDROM, whole disk
+ *    sr18 - second CDROM, first partition
+ *
+ *    [...]
+ */
+static int partitions = 16;
+MODULE_PARM(partitions, "i");
+MODULE_PARM_DESC(partitions, "number of SCSI CDROM partitions to support");
 
 MODULE_PARM(xa_test, "i");	/* see sr_ioctl.c */
 
@@ -518,7 +535,7 @@
 		goto fail;
 	memset(cd, 0, sizeof(*cd));
 
-	disk = alloc_disk(1);
+	disk = alloc_disk(partitions + 1);
 	if (!disk)
 		goto fail_free;
 
@@ -533,7 +550,7 @@
 	spin_unlock(&sr_index_lock);
 
 	disk->major = SCSI_CDROM_MAJOR;
-	disk->first_minor = minor;
+	disk->first_minor = minor * (partitions + 1);
 	sprintf(disk->disk_name, "sr%d", minor);
 	disk->fops = &sr_bdops;
 	disk->flags = GENHD_FL_CD;
@@ -868,6 +885,10 @@
 {
 	int rc;
 
+	/* Check number of partitions specified. */
+	if (partitions < 0)
+		partitions = 0;
+
 	rc = register_blkdev(SCSI_CDROM_MAJOR, "sr");
 	if (rc)
 		return rc;
#6 lore raw
Quoted 3 lines · Steven J. Hill

Here is the second try at the patch.

-Steve

+static int partitions = 16;

This is changes what sr1 is mapped to without specicying any option. The default _must_ be 0 partitions or existing setups will break.

+MODULE_PARM(partitions, "i");

please make this module_param so it works at boot-time aswell.

+MODULE_PARM_DESC(partitions, "number of SCSI CDROM partitions to support");

+ /* Check number of partitions specified. */
+ if (partitions < 0)
+ partitions = 0;

now if you made the variable 'unsigned' you wouldn't have that problem..

While you're at it please also cook up an ide-cd variant, having partitions only supported on scsi cdroms is more than confusing.

#8 lore raw
In reply to Steven J. Hill
Quoted 11 lines · Steven J. Hill

+/*
+ * Device node mappings are as follows:
+ *
+ * sr0 - first CDROM, whole disk
+ * sr1 - first CDROM, first partition
+ *
+ * [...]
+ *

+ *    sr16 - first CDROM, sixteenth partition
+ *    sr17 - second CDROM, whole disk
+ *    sr18 - second CDROM, first partition

Umm... no. I suspect you mean:

sr15 - first CDROM, fifteenth partition
sr16 - second CDROM, whole disk
sr17 - second CDROM, first partition

But what a bad idea for device names. Why not

sr0 whole disc
sr0a ... sr0o partitions
sr1, sr1a ... sr1o

It's probably too late to be consistent with discs and call them sra, sra1, ... sra15
srb, srb1, ... srb15

Quoted 3 lines

+ * [...]
+ */
+static int partitions = 16;

15.

Signature · 6 lines
"Next the statesmen will invent cheap lies, putting the blame upon 
the nation that is attacked, and every man will be glad of those
conscience-soothing falsities, and will diligently study them, and refuse
to examine any refutations of them; and thus he will by and by convince 
himself that the war is just, and will thank God for the better sleep 
he enjoys after this process of grotesque self-deception." -- Mark Twain
#9 lore raw
Quoted 7 lines · Matthew Wilcox

sr0 whole disc
sr0a ... sr0o partitions
sr1, sr1a ... sr1o

It's probably too late to be consistent with discs and call them sra, sra1, ... sra15
srb, srb1, ... srb15

The (BSDish) xx0a convention is arguably better anyway (because the various parts of the name split naturally along the letter-digit boundaries); I never quite figured out why linux used the convention it does for disks.

[Of course consistency generally wins out over niceness, but where consistency isn't an option...]

-Miles

Signature · 1 line
`The suburb is an obsolete and contradictory form of human settlement'
#10 lore raw
In reply to Matthew Wilcox
Quoted 19 lines · Matthew Wilcox
Quoted 8 lines · Steven J. Hill

+ * sr0 - first CDROM, whole disk
+ * sr1 - first CDROM, first partition
+ *
+ * [...]
+ *

+ *    sr16 - first CDROM, sixteenth partition
+ *    sr17 - second CDROM, whole disk
+ *    sr18 - second CDROM, first partition

Umm... no. I suspect you mean:

sr15 - first CDROM, fifteenth partition
sr16 - second CDROM, whole disk
sr17 - second CDROM, first partition

But what a bad idea for device names. Why not

Quoted 7 lines

sr0 whole disc
sr0a ... sr0o partitions
sr1, sr1a ... sr1o

It's probably too late to be consistent with discs and call them sra, sra1, ... sra15
srb, srb1, ... srb15

It is standard convention to use numerical suffixes to refer to partitions, with a 'p' separator in case the full device has a name ending in a digit.

So: sr0p1, ..., sr0p15, sr1p1, ...

Andries

#7 lore raw
In reply to Christoph Hellwig

In message <[email protected]> you write:

Quoted 3 lines

+MODULE_PARM(partitions, "i");

please make this module_param so it works at boot-time aswell.

But beware: there's another MODULE_PARM in the same module. You can't mix them, you'll need to find and fix that too.

Thanks,
Rusty.
--
Anyone who quotes me in their sig is an idiot. -- Rusty Russell.

#11 lore raw
In reply to Andries Brouwer
Quoted 31 lines · Andries Brouwer
Quoted 20 lines · Matthew Wilcox
Quoted 8 lines · Steven J. Hill

+ * sr0 - first CDROM, whole disk
+ * sr1 - first CDROM, first partition
+ *
+ * [...]
+ *

+ *    sr16 - first CDROM, sixteenth partition
+ *    sr17 - second CDROM, whole disk
+ *    sr18 - second CDROM, first partition

Umm... no. I suspect you mean:

sr15 - first CDROM, fifteenth partition
sr16 - second CDROM, whole disk
sr17 - second CDROM, first partition

But what a bad idea for device names. Why not

Quoted 7 lines

sr0 whole disc
sr0a ... sr0o partitions
sr1, sr1a ... sr1o

It's probably too late to be consistent with discs and call them sra, sra1, ... sra15
srb, srb1, ... srb15

Quoted 5 lines

It is standard convention to use numerical suffixes to refer to partitions, with a 'p' separator in case the full device has a name ending in a digit.

So: sr0p1, ..., sr0p15, sr1p1, ...

That sounds a LOT better. Of course mknod is your friend, and some of us have sr0, sr1 etc, but that's our problem. I think one of the distros does it that way, but not one I have here.

Signature · 3 lines
bill davidsen <[email protected]>
  CTO TMR Associates, Inc
  Doing interesting things with small computers since 1979