lkml.org 
[lkml]   [2004]   [Feb]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
Subject[PATCH] 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
diff -urN linux-2.6.2/drivers/scsi/Kconfig linux-2.6.2-patched/drivers/scsi/Kconfig
--- linux-2.6.2/drivers/scsi/Kconfig 2004-02-22 20:15:07.000000000 -0500
+++ linux-2.6.2-patched/drivers/scsi/Kconfig 2004-02-08 20:29:04.000000000 -0500
@@ -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
diff -urN linux-2.6.2/drivers/scsi/sr.c linux-2.6.2-patched/drivers/scsi/sr.c
--- linux-2.6.2/drivers/scsi/sr.c 2004-02-22 20:15:08.000000000 -0500
+++ linux-2.6.2-patched/drivers/scsi/sr.c 2004-02-08 20:31:52.000000000 -0500
@@ -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;
\
 
 \ /
  Last update: 2005-03-22 14:01    [from the cache]
©2003-2011 Jasper Spaans. Advertise on this site